TurboCAD Forums

SDK Corner => Sample SDK Projects => VBScript => Topic started by: JMWolzSr on May 24, 2017, 07:17:37 AM

Title: Adding Items the Undo Buffer
Post by: JMWolzSr on May 24, 2017, 07:17:37 AM
I am using a VBA program in Excel to collect coordinates from TC 2016 and then I add a Point Number (and optional Easting, Northing, and Elevation) text to the TC Drawing.  Here is a section of the code I use for .AddText:

        IMSIGX.Application.ActiveDrawing.Activate
        TextPosition = Range("cllTextPosition").Value
       
        If chkConvertToFeet.Value = False Then
       
            Set tcGrText = tcGrs.AddText(TCText, XCoordinate, YCoordinate, 0, LinesofText * txtTextHeight, , , , TextPosition)
       
        Else
       
            Set tcGrText = tcGrs.AddText(TCText, XCoordinate, YCoordinate, 0, LinesofText * txtTextHeight * 12, , , , TextPosition)
           
        End If

The problem is that the text added to the TC Drawing is not added to the TC Undo Buffer.  Does anyone know if this can be done?
Title: Re: Adding Items the Undo Buffer
Post by: Andy H on May 24, 2017, 09:14:47 AM
First  -  I've no idea if this works as I've not tested it.

Looking at the tcsdk.chm doc, my interpretation is that one sets up a user defined undo record (separate from the main TC one), then add graphics to this record, when finished one issues a .close command which then tells TC to transfers the user record into the main TC stack.

There are references to it in the tcsdk.chm help file though its a shame that particular chm doesn't have a search facility.

if you have visual studio express there is an example of its use in the multi-add vb.net  file on this page http://forums.turbocad.com/index.php/topic,9564.0.html (http://forums.turbocad.com/index.php/topic,9564.0.html).

or for a vbs (which can be viewed in notepad),  see the attached, which was on the forum in this thread (I think) http://forums.turbocad.com/index.php/topic,1015.0.html (http://forums.turbocad.com/index.php/topic,1015.0.html) but was deleted in a  forum clean-up,
Title: Re: Adding Items the Undo Buffer
Post by: ibruethsch on June 13, 2017, 03:08:10 AM
@JMW
this is what I found in the tcsdk Help

For each Graphic object that is created, destroyed or modified as part of an undoable action, you must add a reference to the graphic to the UndoRecord Object that you have set up. The UndoRecord Object exposes a method for each of the three actions: create, destroy and modify.
Using the UndoRecord Object
First you must create an UndoRecord Object:
Dim urec As UndoRecord
Set urec = ActiveDrawing.AddUndoRecord("Add Part")
To add a graphic to the UndoRecord Object:
Dim grNew As Graphic
Set grNew = ActiveDrawing.AddSquare
urec.AddGraphic grNew

=====================
in an old TC version with vba this code works:

Sub undo()

Dim urec As UndoRecord
Set urec = ActiveDrawing.AddUndoRecord("Add Part")

Dim grNew As Graphic
Set grNew = ActiveDrawing.Graphics.AddSquare(10, 10, 10)
urec.AddGraphic grNew

End Sub
================
each undorecord has to have a name.
After running the macro there is available "Undo Add Part"

best regards
Title: Re: Adding Items the Undo Buffer
Post by: ibruethsch on June 13, 2017, 03:16:44 AM
I just found at
http://www.bcitool.com/TCDRC/index.htm
undo Example
=============================
Option Explicit

Sub main()
Dim Dr As Drawing
Dim Gr As Graphic
Dim urec As UndoRecord
Set Dr = Application.ActiveDrawing
Set urec = Dr.AddUndoRecord("Remove circles drawn by macro")
Set Gr = Dr.Graphics.AddCircleCenterAndPoint(0, 0, 0, 2, 0, 0)
urec.AddGraphic Gr
Set Gr = Dr.Graphics.AddCircleCenterAndPoint(0, 0, 0, 3, 0, 0)
urec.AddGraphic Gr
urec.Close
Dr.ActiveView.Refresh
MsgBox "Next step will remove both circles."
Dr.Undo (1)
End Sub
======================