autocad

Veiwports with TranslateCoordinates and CHSPACE

The code below will draw a viewport in paper space and zoom to an area in model space. It will then create a circle in model space and then change that circle to to papers pace while still keeping the circle in the same location.

Note: for this to work, the MSpace has to be set as true. Once the CHSPACE command is used, it atomically changes the MSPACE to false.

    Set ACLayout = acadDoc.Layouts.Add(pgnum)
    acadDoc.ActiveLayout = ACLayout    

    Dim viewportCenter(0 To 2) As Double
    viewportCenter(0) = 0.762: viewportCenter(1) = 0.8
    Set pviewportObj = acadDoc.PaperSpace.AddPViewport(viewportCenter, 17, 7)
    pviewportObj.Layer = "viewport"
    pviewportObj.Display True
    acadDoc.MSpace = True
    
    zoompoint1(0) = -1: zoompoint1(1) = -20
    zoompoint2(0) = 1: zoompoint2(1) = Range("tank_dia") / 2 + 20
    acadDoc.Application.ZoomWindow zoompoint2, zoompoint1
    
    Dim vphandle As String
    Set objEntcir = acadDoc.ModelSpace.AddCircle(crossGirdposition, zoomdistance * 2)
    objEntcir.Layer = "dashed"
    objEntcir.LinetypeScale = 0.2
    vphandle = "(handent " & Chr(34) & objEntcir.Handle & Chr(34) & ")"
    acadDoc.SendCommand "CHSPACE" & vbCr & vphandle & vbCr & vbCr & vbCr

the next code example will use the TranslateCoordinates method to translate an array of x y coordinates from model space to paper space. In this case, it will move the x y point of the start line from model to paper space. It works similar to CHSPACE except instead of moving whole objects it will move only coordinates.

    Set ACLayout = acadDoc.Layouts.Add(pgnum)
    acadDoc.ActiveLayout = ACLayout  

    Dim endline(0 To 2) As Double
    Dim insertionPointPS As Variant
    startline(0) = crossGirdposition(0) + 0.707 * zoomdistance * 2: startline(1) = crossGirdposition(1) + 0.707 * zoomdistance * 2
    insertionPointPS = acadDoc.Utility.TranslateCoordinates(startline, acDisplayDCS, acPaperSpaceDCS, False)
    endline(0) = 7: endline(1) = 1.0889
    Set objline = acadDoc.PaperSpace.AddLine(insertionPointPS, endline)
    objline.Layer = "dashed"
    objline.LinetypeScale = 0.2

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s