.NET
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
How to get AcadBlock and AcadEntity in transactio n?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
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.
Re: How to get AcadBlock and AcadEntity in transactio n?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
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 -
Alfred NESWADBA
Ingenieur Studio HOLLAUS ... www.hollaus.at
-------------------------------------------------------------------------
Re: How to get AcadBlock and AcadEntity in transactio n?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
That's correct - Your code is doing exactly what I meant.
Thanks for Your help and support.
Best regards
