<?xml encoding=”UTF-8″>By Daniel Du
Issue
How do I use the AutoCAD VBA API to create a new layout and a new paper space viewport?
Solution
To create a new layout, use the add method of the layouts property of the drawing:
<font face="新宋体"><span><font color="#0000ff"><font>Set</font></font></span><font color="#000000"> lyt = ThisDrawing.Layouts.Add("Test1")</font></font>
To create a new paper space viewport, use the AddPViewport of the drawing’s paper space property:
<font face="新宋体"><span><font color="#0000ff"><font>Set</font></font></span><font color="#000000"> PSVport = ThisDrawing.PaperSpace.AddPViewport(pnt, 5, 4) </font></font><br>
where pnt is the center of the viewport.
One item of which to be aware is that the paper space property of the drawing references the ActiveLayout. The following procedure creates a new layout and paper space viewport on the new layout.
<font face="新宋体"><span><font color="#0000ff"><font>Public</font></font></span><font><font color="#000000"> </font><span><font color="#0000ff">Sub</font></span></font></font><font><font face="新宋体"><font color="#000000"> NewLayoutAndNewPVport()<br> </font><span><font color="#0000ff">Dim</font></span><font color="#000000"> PSVport </font><span><font color="#0000ff">As</font></span></font><font face="新宋体"><font color="#000000"> AcadPViewport<br> </font><span><font color="#0000ff">Dim</font></span><font color="#000000"> lyt </font><span><font color="#0000ff">As</font></span></font><font face="新宋体"><font color="#000000"> AcadLayout<br> </font><span><font color="#0000ff">Dim</font></span><font color="#000000"> pnt(0 </font><span><font color="#0000ff">To</font></span><font color="#000000"> 2) </font><span><font color="#0000ff">As</font></span><font color="#000000"> </font><span><font color="#0000ff">Double</font></span><br></font><font face="新宋体"><font color="#000000"> <br> </font><span><font color="#008000">' Create a point to be used for the new paperspace viewport</font></span><br></font><font face="新宋体"><font color="#000000"> pnt(0) = 5<br> pnt(1) = 5<br> pnt(2) = 0<br> <br> </font><span><font color="#008000">' Create a new layout</font></span><br><font color="#000000"> lyt = ThisDrawing.Layouts.Add(</font><span><font color="#a31515">"Test1"</font></span></font><font face="新宋体"><font color="#000000">)<br> <br> </font><span><font color="#008000">' If a layout named "Test1" already exists comment out</font></span><br><font color="#000000"> </font><span><font color="#008000">' the line above and uncomment this line.</font></span><br><font color="#000000"> </font><span><font color="#008000">' Set lyt = ThisDrawing.Layouts("Test1")</font></span><br></font><font face="新宋体"><font color="#000000"> <br> </font><span><font color="#008000">' Make lyt created above the active layout</font></span><br></font><font face="新宋体"><font color="#000000"> ThisDrawing.ActiveLayout = lyt<br> <br> </font><span><font color="#008000">' Create a new paper space viewport notice that you use</font></span><br><font color="#000000"> </font><span><font color="#008000">' the Paperspace property of this drawing. The Paperspace</font></span><br><font color="#000000"> </font><span><font color="#008000">' property references the active layout</font></span><br></font><font face="新宋体"><font color="#000000"> PSVport = ThisDrawing.PaperSpace.AddPViewport(pnt, 5, 4)<br> <br> </font><span><font color="#008000">' Make sure the Viewport is displayed and on</font></span><br><font color="#000000"> PSVport.Display(</font><span><font color="#0000ff">True</font></span></font><font face="新宋体"><font color="#000000">)<br> PSVport.ViewportOn = </font><span><font color="#0000ff">True</font></span><br></font><font face="新宋体"><font color="#000000"> <br> </font><span><font color="#008000">' Before making a pViewport active the mspace property needs</font></span><br><font color="#000000"> </font><span><font color="#008000">' to be True for a floating viewport</font></span><br><font color="#000000"> ThisDrawing.MSpace = </font><span><font color="#0000ff">True</font></span><br></font></font><font face="新宋体"><font><font color="#000000"> ThisDrawing.ActivePViewport = PSVport<br> ThisDrawing.Regen(acActiveViewport)<br> </font><br><span><font color="#0000ff">End</font></span><font color="#000000"> </font></font><span><font color="#0000ff">Sub</font></span></font><br>
<br>
<br>

Leave a Reply