.NET

.NET

Reply
Mentor
232 Posts
30 Kudos
Registered: ‎11-09-2012
Post 1 of 5

Leader with annotation take long time to create

186 Views, 4 Replies
06-21-2013 06:07 AM

Hi All,

 

To create a leader with annotation , I am using below code. Leader and annotation create without any problem. But one disgusting thing is that it took very long time if I use the command first time after opening ACAD. But afterwards when I use the command it execute very quickly. Can any body help me to optimize this code?

 

<CommandMethod("leadertest")> PublicSubleadertest()

 

Application.SetSystemVariable("dimldrblk", "_dot")

 

Dim acDoc AsDocument = Application.DocumentManager.MdiActiveDocument

 

Dim acCurDb AsDatabase= acDoc.Database

 

Using acTrans AsTransaction= acCurDb.TransactionManager.StartTransaction()

 

Dim acBlkTbl AsBlockTable

acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,

OpenMode.ForRead)

 

Dim acBlkTblRec AsBlockTableRecord

acBlkTblRec = acTrans.GetObject(acBlkTbl(

BlockTableRecord.ModelSpace), OpenMode.ForWrite)

 

Dim mtextId AsObjectIdDim mtxt AsMText = NewMText()

mtxt.SetDatabaseDefaults()

mtxt.Contents =

"first line/sencond line"

mtxt.Location =

NewPoint3d(4, 4, 0)

mtxt.TextHeight = 0.25

mtxt.Attachment =

AttachmentPoint.MiddleLeft

mtxt.SetAttachmentMovingLocation(mtxt.Attachment)

mtextId = acBlkTblRec.AppendEntity(mtxt)

acTrans.AddNewlyCreatedDBObject(mtxt,

True)

 

Dim acLdr AsLeader = NewLeader()

acLdr.SetDatabaseDefaults()

acLdr.AppendVertex(

NewPoint3d(2, 2, 0))

acLdr.AppendVertex(

NewPoint3d(4, 4, 0))

acLdr.Dimasz = 0.25

acBlkTblRec.AppendEntity(acLdr)

acTrans.AddNewlyCreatedDBObject(acLdr,

True)

acLdr.Annotation = mtextId

acLdr.Dimsah =

False

acLdr.Dimtad = 0

acLdr.Dimgap = 0.25

acLdr.EvaluateLeader()

acTrans.Commit()

EndUsingApplication.ShowAlertDialog("finish")EndSub

 

Thanks in advance.

Regards

Zakir

 

ADN Support Specialist
352 Posts
27 Kudos
Registered: ‎07-24-2007
Post 2 of 5

Re: Leader with annotation take long time to create

06-21-2013 10:35 AM in reply to: mzakiralam

The only thing i can think is, use StartOpenCloseTransaction and do you really need to call the Evaluate at the end?





Fenton Webb

Developer Technical Services

Autodesk Developer Network


*Expert Elite*
1,569 Posts
171 Kudos
Registered: ‎10-08-2008
Post 3 of 5

Re: Leader with annotation take long time to create

06-21-2013 12:57 PM in reply to: mzakiralam

I see nothing wrong with your code,

seems it working godd with EvaluateLeader methoud

and without it, see small changes:

        Public Sub leadertest()

            Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("dimldrblk", ".") '"_dot"

            Dim acDoc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument

            Dim acCurDb As Database = acDoc.Database

            Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

                Dim acBlkTbl As BlockTable

                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)

                Dim acBlkTblRec As BlockTableRecord

                acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)

                Dim arrId As ObjectId = acCurDb.Dimldrblk

                Dim mtextId As ObjectId

                Dim mtxt As MText = New MText()

                mtxt.SetDatabaseDefaults()

                mtxt.Contents = "first line\Psecond line"

                mtxt.Location = New Point3d(4, 4, 0)

                mtxt.TextHeight = 0.25

                mtxt.Attachment = AttachmentPoint.MiddleLeft

                mtxt.SetAttachmentMovingLocation(mtxt.Attachment)

                mtextId = acBlkTblRec.AppendEntity(mtxt)

                acTrans.AddNewlyCreatedDBObject(mtxt, True)

                Dim acLdr As Leader = New Leader()

                acLdr.SetDatabaseDefaults()

                acLdr.AppendVertex(New Point3d(2, 2, 0))

                acLdr.AppendVertex(New Point3d(4, 4, 0))

                acLdr.Dimasz = 0.25

                acLdr.Dimldrblk = arrId

                acBlkTblRec.AppendEntity(acLdr)

                acTrans.AddNewlyCreatedDBObject(acLdr, True)

                acLdr.Annotation = mtextId

                acLdr.Dimsah = False

                acLdr.Dimtad = 0

                acLdr.Dimgap = 0.25

                acTrans.Commit()

            End Using

            acDoc.Editor.WriteMessage(vbLf + "finish")
            ' for debug only
            'acDoc.SendStringToExecute("_ZOOM E ", True, False, False)
        End Sub

 

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Mentor
232 Posts
30 Kudos
Registered: ‎11-09-2012
Post 4 of 5

Re: Leader with annotation take long time to create

06-24-2013 01:18 AM in reply to: fenton.webb

@Fenton: Thanks for your suggestion. I have tried with openclosetransaction , but does not work well. Without evaluate leader it also works well.

 

Mentor
232 Posts
30 Kudos
Registered: ‎11-09-2012
Post 5 of 5

Re: Leader with annotation take long time to create

06-24-2013 01:19 AM in reply to: Hallex

@Hallex: Thanks for your code. I have tired with your code. It reduces little bit time now.

Post to the Community

Have questions about Autodesk products? Ask the community.

New Post
Announcements
Are you interested in helping shape the future of the Autodesk Community? To participate in this brief usability study, please click here. Your time and input is greatly appreciated!