Welcome
I have a little problem - how to get AcadBlock or AcadEntities by using transaction.
In a current open document I can do something like this:
Dim document As Document = Application.DocumentManager.MdiActiveDocument Dim AcadDrawing As AcadDocument = DirectCast(document.AcadDocument, AcadDocument) For Each block As AcadBlock In AcadDrawing.Blocks For Each ent As AcadEntity In block 'here I can access all of the entities in block Next Next
It's working fine, but when I tried open a document in backgroud I can't get the AcadBlock or AcadEntities, only a BlockTableRecord.
Dim path As String = "c:\path to dwg file" Dim db As Database = New Database(True, True) db.ReadDwgFile(path, FileOpenMode.OpenForReadAndAllShare, True, Nothing) Dim tr As Transaction = db.TransactionManager.StartTransaction() Dim blockTable As BlockTable = DirectCast(tr.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable) For Each blockRecordId As ObjectId In blockTable Dim blockRecord As BlockTableRecord = DirectCast(tr.GetObject(blockRecordId, OpenMode.ForRead), BlockTableRecord)'I can't get AcadEntity or AcadBlock here :/ Next
Is there any posibility to get AcadBlocks or AcadEntities by using TransactionManager?
what's the difference between AcadBlock and BlockTableRecord?
I will be very grateful if anyone would like to help me with this problem 🙂
Solved! Go to Solution.
Solved by Alfred.NESWADBA. Go to Solution.
Hi,
am I right that you try to scan through all Blocks?
Look at this code. ... does it help?
Dim blockTable As BlockTable = ctype(tr.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable) For Each blockRecordId As ObjectId In blockTable if (blockRecordID.isValid) andalso (not blockRecordID.isErased) Then 'now we can get the BlockTableRecord for this ID Dim blockRecord As BlockTableRecord = cType(tr.GetObject(blockRecordId, OpenMode.ForRead), BlockTableRecord) 'now scan through the entities in the BlockTableRecord for each EntID as ObjectID in blockRecord if (EntID.isValid) andalso (not EntID.isErased) Then dim tEnt as Entity = cType(tr.GetObject(EntID,OpenMode.ForRead),Entity) 'whatever you want to do with this Entity now ... end if Next end if Next
HTH, - alfred -
That's correct - Your code is doing exactly what I meant.
Thanks for Your help and support.
Best regards