这似乎是一个足够明智的解决方案。如果视口需要特定比例,则可能会出现问题。如果ZoomWindow的范围已知,则必须调整视口的大小以允许适当的比例。一旦实现了这一点,谨慎的做法是通过PVport显式设置视口比例。StandardScale或PVport。自定义比例。
我应该指出,你提供的链接很好地展示了我在之前的帖子中提到的“奥术”。事实上,AutoCAD VBA编程的许多非直观方面都涉及TranslateCoordinates调用。
以下是使用标准WCS平面图居中视口的示例:
- Sub NewPVP()
- Dim varTarg As Variant
- Dim PVport As IAcadPViewport2
- Dim objLayout As AcadLayout
- Dim dblWTarg(0 To 2) As Double
- Dim objView As AcadView
- Dim varViewCtr As Variant
- Dim dblCen(0 To 2) As Double
- Dim dblTarg(0 To 2) As Double
- With ThisDrawing
- For Each objLayout In .Layouts
- If objLayout.Name = "Layout1" Then
- .ActiveLayout = objLayout
- varViewCtr = .GetVariable("VIEWCTR")
- Set PVport = .PaperSpace.AddPViewport(dblCen, 30, 20) 'Using a ARCH E sheet
- PVport.StandardScale = 4
- dblCen(0) = 24#
- dblCen(1) = 18#
- dblWTarg(0) = 60#: dblWTarg(1) = 30#: dblWTarg(2) = 0#: 'Modelspace center (WCS)
- PVport.Update
- PVport.Display True
- .MSpace = True
- PVport.Target = dblWTarg
- varTarg = .Utility.TranslateCoordinates(dblWTarg, acWorld, acDisplayDCS, 0)
- varTarg(0) = varTarg(0) - varViewCtr(0)
- varTarg(1) = varTarg(1) - varViewCtr(1)
- varTarg(2) = varTarg(2) - varViewCtr(2)
- varTarg = .Utility.TranslateCoordinates(varTarg, acDisplayDCS, acPaperSpace, 0)
- .MSpace = False
- PVport.Target = varTarg
- PVport.Center = dblCen
- PVport.Update
- End If
- Next
- End With
- End Sub
|