Tyke 发表于 2022-7-6 11:39:43

获取模型空间比例事实

你好
我在模型空间中有一个带有两个视口的图形。
在其中一个视口中,用户使用任何常规缩放功能缩放对象。如何在VBA中获得用户放大到的最终比例因子,然后将其应用于第二个视口,以便两个视口具有相同的缩放因子。
 
第二部分似乎可以通过以下方式解决:
ZoomScaled Zoomfactor,acZoomScaledRelative
但我似乎无法得到比例因子。
 
有人有什么想法吗?

Lee Mac 发表于 2022-7-6 11:56:48

也许是CustomScale属性?

David Bethel 发表于 2022-7-6 12:01:56

泰克,
 
将模型空间VIEWSIZE除以图纸空间视口的高度
 
您必须在图纸空间和模型空间之间来回切换以收集数据-大卫

BIGAL 发表于 2022-7-6 12:14:50

每个视口都以某种方式保持着比例,它可能是每个视口的表列表的一部分,一旦您阅读了它,那么很容易复制它,它只是用于绘制多视图的简单lisp,用其他多视图比例值替换sc值。
 
(setq sc (getstring "\nScale for this window 1: "))
(setq sc3 (strcat "1/" sc "xp"))
(command "_.zoom" "all")
(setq zc (getpoint "\nPoint to centre of view in Viewport:"))
(command "_.zoom" "_center" zc sc3)

 
我在vport上做了一个Entsel,然后查了我的lisp书(是的,真的页面)和assoc等等

(setq obj (car (entsel "\npick vport boundary ")))
(setq tpp1 (entget obj))
(setq pt3 (cdr (assoc 40 tpp1))) ; Height
(setq pt4 (cdr (assoc 41 tpp1))) ; width
(setq pt5 (cdr (assoc 42 tpp1))) ; scale
(princ pt5)

 
希望这有帮助

BIGAL 发表于 2022-7-6 12:28:35

我最后的一些回答是正确的,发现变量“viewsize”随视口比例的变化而变化,还发现了如何计算比例。
 
Vport比例1;50(公制)
vport 418.645的高度
视图大小20.932
 
418.645/20.932 =20   1000/50 =20
 
对于ft标尺来说有点困难,但可以解决。

Tyke 发表于 2022-7-6 12:38:15

好了,伙计们,我们有一个部分解。它以相同的视图比例将一个视口中的视图复制到另一个视口。
它仍然有一个怪癖,即两个视口中的视图向左跳转屏幕宽度的四分之一。

Sub CopyViewPort()
   
   Dim objViewPort As AcadViewport
   Dim objCurrentViewport As AcadViewport
   Dim vpCentre(0 To 1) As Double
   Dim dblViewSize As Double
   Dim dblCVPHeight As Double
   Dim dblCVPWidth As Double
   Dim dblCVPScale As Double
   
   Set objCurrentViewport = ThisDrawing.ActiveViewport
   
   Set objViewPort = ThisDrawing.ActiveViewport
   
   ' get centre of current viewport
   vpCentre(0) = ThisDrawing.GetVariable("ViewCtr")(0)
   vpCentre(1) = ThisDrawing.GetVariable("ViewCtr")(1)
   
   'get current vp scale
   dblCVPHeight = objCurrentViewport.Height
   dblCVPWidth = objCurrentViewport.Width
   dblCVPScale = dblCVPWidth / dblCVPHeight
   
   ' get sysvar ViewSize
   dblViewSize = ThisDrawing.GetVariable("ViewSize")
   
   For Each objViewPort In ThisDrawing.Viewports
       ThisDrawing.ActiveViewport = objViewPort
       objViewPort.Center = vpCentre
       objViewPort.Height = dblViewSize
       objViewPort.Width = dblViewSize * dblCVPScale
   Next
   
   ThisDrawing.ActiveViewport = objCurrentViewport
   
   ' regen in all viewports
   ThisDrawing.Regen acAllViewports
   
End Sub

 
谢谢你的帮助,我希望有人能利用它。

Tyke 发表于 2022-7-6 12:40:50

解决了故障。
 
通过移动objViewPort。中心=VP中心
至之后
 
objViewPort。高度=dblViewSize
objViewPort。宽度=dblViewSize*dblCVPScale
 
那么我们就没有问题了。
 
因此,代码段现在是:
 
objViewPort。高度=dblViewSize
objViewPort。宽度=dblViewSize*dblCVPScale
objViewPort。中心=VP中心
 
再次感谢你的帮助。
页: [1]
查看完整版本: 获取模型空间比例事实