I have a portion of my routine below. Basically I need the user to continue to loop through the command. They are picking Circles or blocks in the drawing and I get the insertion point, then insert a new block. However, whenever they try and use a transparent zoom or pan to move around the drawing when the promptentityresult is hit, it zooms back to the original location. How do I stop it from doing that? Any help or direction is much appreciated. Here is a code....
CommandMethod("getpnt", CommandFlags.Session)> _
Dim cnt AsInteger = 0
Dim NEWPNT AsPoint3d = GetInsPoint()
While cnt < 3
NEWPNT = GetInsPoint()
' other code is inserted here...
cnt = cnt + 1
Public Function GetInsPoint()
Dim inspnt AsPoint3d
Dim acdoced AsDocument = Application.DocumentManager.MdiActiveDocument
Dim myed AsEditor = acdoced.Editor
Dim db AsDatabase = HostApplicationServices.WorkingDatabase
Using mytrans2 AsTransaction = db.TransactionManager.StartTransaction()
Dim myPEO AsNewPromptEntityOptions(vbLf & "Select Circle or Block: ")
"You must select a Circle or Block.")
Dim symbolent AsPromptEntityResult = myed.GetEntity(myPEO)
If symbolent.Status = PromptStatus.OK Then
Dim Objid AsObjectId = symbolent.ObjectId
Dim ent AsEntity = CType(mytrans2.GetObject(Objid, OpenMode.ForRead), Entity)
Dim enttype1 AsString = ent.GetType().ToString
Dim enttype AsString = Objid.ObjectClass.DxfName
Dim circleobj AsCircle = mytrans2.GetObject(Objid, OpenMode.ForRead)
inspnt = circleobj.Center
Dim blockent AsBlockReference = mytrans2.GetObject(Objid, OpenMode.ForRead)
inspnt = blockent.Position
Solved! Go to Solution.
This is an interesting issue I have not noticed before and did not know current view seems associated with a new started transaction.
The reason AutoCAD always restore back to original view after each pick is that you did not commit the Transaction in the GetInsPoint() function.
As rule of thumb, one should always EXPLICITLY complete the transaction, either commit it, or abort it. If a transaction is wrapped in Using ... End Using, when End Using is reached, if the transaction has not been commited, it will be aborted before being disposed, which may not be what you want, as your code behaves.
So, you need to add mytrans2.Commit() right before End Using.
That was it.....found a couple other locations that I did not commit my transactions. Still learning .NET as you can tell.
Once I got those cleared up, the routine is working like it should and is not zooming automatically!
Thanks so much for your help.
Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register
Start with some of our most frequented solutions to get help installing your software.