可以使用 AddPViewport 方法创建图纸空间视口。此方法需要一个中心点以及新建视口的宽度和高度。在创建视口之前,请使用 ActiveSpace 特性将图纸空间设置为当前空间(一般通过将 TILEMODE 设置为 0 来完成)。
在创建 PViewport 对象后,可以设置视图本身的特性,例如观察方向(Direction 特性)、透视图的镜头长度(LensLength 特性)和栅格显示(GridOn 特性)。还可以控制视口本身的特性,例如图层(Layer 特性)、线型(Linetype 特性)和线型缩放(LinetypeScale 特性)。
本样例说明如何将 AutoCAD 切换到图纸空间、创建浮动视口、设置视图以及启用视口。
Sub Ch9_SwitchToPaperSpace()
' 将活动空间设置为图纸空间
ThisDrawing.ActiveSpace = acPaperSpace
' 创建图纸空间视口
Dim newVport As AcadPViewport
Dim center(0 To 2) As Double
center(0) = 3.25
center(1) = 3
center(2) = 0
Set newVport = ThisDrawing.PaperSpace. _
AddPViewport(center, 6, 5)
' 修改视口的观察方向
Dim viewDir(0 To 2) As Double
viewDir(0) = 1
viewDir(1) = 1
viewDir(2) = 1
newVport.direction = viewDir
' 启用视口
newVport.Display True
' 切换到模型空间
ThisDrawing.MSpace = True
' 将 newVport 置为当前
' (并非始终需要,但建议如此)
ThisDrawing.ActivePViewport = newVport
' 在模型空间中进行范围缩放
ZoomExtents
' 关闭模型空间编辑
ThisDrawing.MSpace = False
' 在图纸空间中进行范围缩放
ZoomExtents
End Sub
上述代码中的步骤顺序非常重要。一般来讲,步骤的顺序必须与它们在 AutoCAD 命令行中的执行顺序相同。唯一不能预期的操作是定义视图和启用视口。
注意要设置或修改视图的特性(视图方向、焦距等),必须将 Viewport 对象的 Display 方法设置为关 (FALSE);并且,必须将 Display 方法设置为开 (TRUE),才能将视口置为当前。
本样例使用了“创建和启用浮动视口”中的例子,并以之为基础继续创建了四个浮动视口,同时分别将每个视口的视图设置为俯视图、主视图、右视图和等轴测视图。每个视图按图纸空间比例的一半进行缩放。为确保在这些视口中能够看到一些内容,可以在进行本样例之前创建一个三维实体球体。
Sub Ch9_FourPViewports()
Dim topVport, frontVport As AcadPViewport
Dim rightVport, isoVport As AcadPViewport
Dim pt(0 To 2) As Double
Dim viewDir(0 To 2) As Double
ThisDrawing.ActiveSpace = acPaperSpace
ThisDrawing.MSpace = True
' 获取现有的 PViewport 并使其成为 topVport
pt(0) = 2.5: pt(1) = 5.5: pt(2) = 0
Set topVport = ThisDrawing.ActivePViewport
' 对俯视图不需要设置 Direction
topVport.center = pt
topVport.width = 2.5
topVport.height = 2.5
topVport.Display True
ThisDrawing.MSpace = True
ThisDrawing.ActivePViewport = topVport
ZoomExtents
ZoomScaled 0.5, acZoomScaledRelativePSpace
' 创建并设置 frontVport
pt(0) = 2.5: pt(1) = 2.5: pt(2) = 0
Set frontVport = ThisDrawing.PaperSpace. _
AddPViewport(pt, 2.5, 2.5)
viewDir(0) = 0: viewDir(1) = 1: viewDir(2) = 0
frontVport.direction = viewDir
frontVport.Display acOn
ThisDrawing.MSpace = True
ThisDrawing.ActivePViewport = frontVport
ZoomExtents
ZoomScaled 0.5, acZoomScaledRelativePSpace
' 创建并设置 rightVport
pt(0) = 5.5: pt(1) = 5.5: pt(2) = 0
Set rightVport = ThisDrawing.PaperSpace. _
AddPViewport(pt, 2.5, 2.5)
viewDir(0) = 1: viewDir(1) = 0: viewDir(2) = 0
rightVport.direction = viewDir
rightVport.Display acOn
ThisDrawing.MSpace = True
ThisDrawing.ActivePViewport = rightVport
ZoomExtents
ZoomScaled 0.5, acZoomScaledRelativePSpace
' 创建并设置 isoVport
pt(0) = 5.5: pt(1) = 2.5: pt(2) = 0
Set isoVport = ThisDrawing.PaperSpace. _
AddPViewport(pt, 2.5, 2.5)
viewDir(0) = 1: viewDir(1) = 1: viewDir(2) = 1
isoVport.direction = viewDir
isoVport.Display acOn
ThisDrawing.MSpace = True
ThisDrawing.ActivePViewport = isoVport
ZoomExtents
ZoomScaled 0.5, acZoomScaledRelativePSpace
'完成:在所有视口中执行重生成
ThisDrawing.Regen True
End Sub