.NET
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Adding item to transaction?

4 REPLIES 4
SOLVED
Reply
Message 1 of 5
JasonSelf
517 Views, 4 Replies

Adding item to transaction?

I am walking through someone elses code in order to make sure I unerstand some principles (inserting blocks via a jig) and I cam upon a couple of lines that I do not understand:

 

space.AppendEntity(br)
tr.AddnewlyCreatedDBObject(br, True)

 space is the blocktaclerecord for the current space and tr is the active transaction.

 

Here is what I don't get:  If I append the entity to the space in the blocktablerecord inside of the transaction why do I also need to add this newly created object to the transaction with the AddnewlyCreatedDBObject method as well? 

 

Thank you,

Jason

4 REPLIES 4
Message 2 of 5
StephenPreston
in reply to: JasonSelf

The short answer is - because that's how it works.

 

A slightly longer answer is - The BlockTableRecord doesn't know anything about the active transaction, so you have to separately add the object to the BTR and to the transaction. Remember that there are two ways to edit DWG resident entities - through the Open/Close model or through the Transaction Model (the latter is the recommended approach). API calls other than the open/close or transaction -related calls are the same whichever model you're using.

 

Cheers,

 

Stephen Preston

Autodesk Developer Network

Cheers,

Stephen Preston
Autodesk Developer Network
Message 3 of 5
JasonSelf
in reply to: StephenPreston

So, if I understand correctly:  The block is added as to the block table a result of a process inside the transaction, but the transaction itself doesn't know about that block yet so I need to tell the transaction about the block so that I can work with said block in the transaction....?

Message 4 of 5
MarkPendergraft
in reply to: JasonSelf

Yes, you need to tell the transaction that you have made changes to the blocktablerecord, and furthermore you need to commit the changes for them to actually take place in the drawing with tr.Commit()

 

-Mark P.

Message 5 of 5
Jeffrey_H
in reply to: MarkPendergraft

Stephen is way smarter and knows way more than I do so he would know better.

I might be wrong since I have never tried using it until now but in the old days I think they used a open/close method.

 

So I can insert a blockreference like this (I think you use VB since I did not see ';' at end)

assuming a block named "C" is in the drawing

 

        <CommandMethod("InsertBlockReference")> _
        Sub InsertBlockReference()
            Dim doc As Document = Application.DocumentManager.MdiActiveDocument
            Dim db As Database = doc.Database
            Dim ed As Editor = doc.Editor

            Dim bt As BlockTable = db.BlockTableId.Open(OpenMode.ForRead)
            Dim space As BlockTableRecord = db.CurrentSpaceId.Open(OpenMode.ForWrite)
            Dim blk As BlockTableRecord = bt("C").Open(OpenMode.ForRead)

            Dim bref As New BlockReference(Point3d.Origin, blk.ObjectId)

            space.AppendEntity(bref)
            blk.Close()
            bref.Close()
            space.Close()
            bt.Close()


        End Sub

 Now if you comment out

'bref.Close()' nothing will happen.

Even worst if you comment out 'space.Close()' nothing will happen but if you try to draw a line or add anything to the current space it will crash.

 

So transactions make it easier and keep from having to open and close objects and doing it many times etc.....

 

If the blockreference was already in the drawing when you use Transaction.GetObject() or ObjectID.GetObjectId()(Will use most recent transaction) now the transaction knows about it and will properly close it. So you do not have to add it to the transaction. So I would  guess that GetObject() must also add it to the transaction.

 

When you create a new BlockReference the transaction does not know about it and that is the reason for the AddNewlyCreatedDBObject() call.

 

Each object needs to be owned so AppendEntity() is telling it which space will own it ModelSpace or one if the paperspaces etc....

 

 Hopefully that is a decent enough explanation and not too far off.

 

 

You can also find your answers @ TheSwamp

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