Message 1 of 8
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi
I am try to use ObjectID from Dictionary and send it to test to get Polyline Length
I get this error
System.InvalidCastException: Unable to cast object of type 'Autodesk.AutoCAD.DatabaseServices.DataTable' to type 'Autodesk.AutoCAD.DatabaseServices.Polyline'.
Public Sub getDictionary()
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Using trans As Transaction = db.TransactionManager.StartTransaction()
Dim NOD As DBDictionary = trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead, False)
Dim NetworkDict As DBDictionary
Try
NetworkDict = trans.GetObject(NOD.GetAt("ACAD_OC"), OpenMode.ForRead)
Catch ex As Autodesk.AutoCAD.Runtime.Exception
MsgBox(ex.Message)
Exit Sub
End Try
Dim DictEnum As DbDictionaryEnumerator = NetworkDict.GetEnumerator()
While DictEnum.MoveNext
Dim PageDict As DBDictionary = DirectCast(trans.GetObject(DictEnum.Value, OpenMode.ForRead), DBDictionary)
For Each eDict As DictionaryEntry In PageDict
Test66(eDict.Value)
Next
End While
End Using
End Sub
Public Sub Test(ByVal objId As ObjectId)
Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Dim Length As Double
Using doc.LockDocument()
Using tr As Transaction = db.TransactionManager.StartTransaction()
Dim obj As DBObject = tr.GetObject(objId, OpenMode.ForRead)
If TypeOf (obj) Is BlockReference Then
Else
Dim l As Polyline = DirectCast(obj, Polyline)
Length = Length + l.Length.ToString
End If
ed.WriteMessage(vbLf & Length)
tr.Commit()
End Using
End Using
End Sub
Solved! Go to Solution.