.NET
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Reply
Message 1 of 2
shemt
791 Views, 1 Reply

XRecord

Hi,
Is it possible to store a String Array to an XRecord?
Thanks

1 REPLY 1
Message 2 of 2
Hallex
in reply to: shemt

I used in one of my application similar on the following methods

       #Region "Xrecord Tools"
        Public Function cutArray(ByVal ar As String(), ByVal start As String, ByVal fin As String) As String()

            Dim n As Integer = Array.IndexOf(ar, start)
            Dim m As Integer = Array.IndexOf(ar, fin)
            Dim newar() As String = New String(m - n) {}
            Dim i As Integer = 0
            For k As Integer = n + 1 To m - 1
                newar(i) = ar(k)
                i += 1
            Next
            Return newar
        End Function
        <CommandMethod("DisplayXRecord", "XD", CommandFlags.Modal Or CommandFlags.UsePickSet)> _
        Public Sub XdataDisplay()
            Dim doc As Document = acApp.DocumentManager.MdiActiveDocument
            Dim ed As Editor = doc.Editor
            Using tr As Transaction = doc.Database.TransactionManager.StartTransaction
                Try
                    Dim id As ObjectId = ed.GetEntity("Select your thing:").ObjectId

                    Dim obj As DBObject = DirectCast(tr.GetObject(id, OpenMode.ForWrite), DBObject)
                    Dim dict As DBDictionary = DirectCast(tr.GetObject(obj.ExtensionDictionary, OpenMode.ForWrite), DBDictionary)
                    Dim xid As ObjectId = dict.GetAt("Foo_XRec")
                    Dim xr As Xrecord = DirectCast(tr.GetObject(xid, OpenMode.ForWrite), Xrecord)
                    Dim buff As ResultBuffer = xr.Data

                    Dim tv() As TypedValue = buff.AsArray
                    buff.Dispose()
                    Dim list As New List(Of String)
                    For Each tpv As TypedValue In tv
                        list.Add(tpv.Value)
                    Next

                    Dim ar() As String = cutArray(list.ToArray, "Start_Array", "End_Array")
                    Dim msg As String = ""
                    For Each st As String In ar
                        msg = msg & st & vbLf
                    Next
                    MsgBox("Foo_XRec: " & vbLf & msg)
                    tr.Commit()

                Catch ex As Autodesk.AutoCAD.Runtime.Exception
                    Application.ShowAlertDialog(ex.Message & vbLf & ex.StackTrace)
                Finally

                End Try

            End Using
        End Sub


        <CommandMethod("ArrayToXrecord", "AX", CommandFlags.Modal Or CommandFlags.UsePickSet)> _
        Public Sub AddXrecord()
            Dim doc As Document = acApp.DocumentManager.MdiActiveDocument
            Dim ed As Editor = doc.Editor
            Using tr As Transaction = doc.Database.TransactionManager.StartTransaction
                Dim id As ObjectId = ed.GetEntity("Select your thing:").ObjectId
                Dim obj As DBObject = DirectCast(tr.GetObject(id, OpenMode.ForWrite), DBObject)
                obj.CreateExtensionDictionary()
                Dim dict As DBDictionary = DirectCast(tr.GetObject(obj.ExtensionDictionary, OpenMode.ForWrite), DBDictionary)

                Dim buff As New ResultBuffer

                Dim somearray() As String = {"Start_Array", "alpha", "bravo", "charlie", "delta", "End_Array"}
                For Each st As String In somearray
                    buff.Add(New TypedValue(DxfCode.Text, st))
                Next

                Dim myXRecord As New Xrecord
                myXRecord.Data = buff
                dict.SetAt("Foo_XRec", myXRecord)
                tr.AddNewlyCreatedDBObject(myXRecord, True)
                tr.Commit()

            End Using
        End Sub
#End Region 

 

_____________________________________
C6309D9E0751D165D0934D0621DFF27919

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Autodesk Design & Make Report

”Boost