乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 59|回复: 6

[编程交流] 获取模型空间比例事实

[复制链接]

29

主题

519

帖子

477

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 11:39:43 | 显示全部楼层 |阅读模式
你好
我在模型空间中有一个带有两个视口的图形。
在其中一个视口中,用户使用任何常规缩放功能缩放对象。如何在VBA中获得用户放大到的最终比例因子,然后将其应用于第二个视口,以便两个视口具有相同的缩放因子。
 
第二部分似乎可以通过以下方式解决:
ZoomScaled Zoomfactor,acZoomScaledRelative
但我似乎无法得到比例因子。
 
有人有什么想法吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:56:48 | 显示全部楼层
也许是CustomScale属性?
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 12:01:56 | 显示全部楼层
泰克,
 
将模型空间VIEWSIZE除以图纸空间视口的高度
 
您必须在图纸空间和模型空间之间来回切换以收集数据-大卫
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

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

 
我在vport上做了一个Entsel,然后查了我的lisp书(是的,真的页面)和assoc等等
  1. (setq obj (car (entsel "\npick vport boundary ")))
  2. (setq tpp1 (entget obj))
  3. (setq pt3 (cdr (assoc 40 tpp1))) ; Height
  4. (setq pt4 (cdr (assoc 41 tpp1))) ; width
  5. (setq pt5 (cdr (assoc 42 tpp1))) ; scale
  6. (princ pt5)

 
希望这有帮助
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 12:28:35 | 显示全部楼层
我最后的一些回答是正确的,发现变量“viewsize”随视口比例的变化而变化,还发现了如何计算比例。
 
Vport比例1;50(公制)
vport 418.645的高度
视图大小20.932
 
418.645/20.932 =20     1000/50 =20
 
对于ft标尺来说有点困难,但可以解决。
回复

使用道具 举报

29

主题

519

帖子

477

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 12:38:15 | 显示全部楼层
好了,伙计们,我们有一个部分解。它以相同的视图比例将一个视口中的视图复制到另一个视口。
它仍然有一个怪癖,即两个视口中的视图向左跳转屏幕宽度的四分之一。
  1. Sub CopyViewPort()
  2.    
  3.    Dim objViewPort As AcadViewport
  4.    Dim objCurrentViewport As AcadViewport
  5.    Dim vpCentre(0 To 1) As Double
  6.    Dim dblViewSize As Double
  7.    Dim dblCVPHeight As Double
  8.    Dim dblCVPWidth As Double
  9.    Dim dblCVPScale As Double
  10.    
  11.    Set objCurrentViewport = ThisDrawing.ActiveViewport
  12.    
  13.    Set objViewPort = ThisDrawing.ActiveViewport
  14.    
  15.    ' get centre of current viewport
  16.    vpCentre(0) = ThisDrawing.GetVariable("ViewCtr")(0)
  17.    vpCentre(1) = ThisDrawing.GetVariable("ViewCtr")(1)
  18.    
  19.    'get current vp scale
  20.    dblCVPHeight = objCurrentViewport.Height
  21.    dblCVPWidth = objCurrentViewport.Width
  22.    dblCVPScale = dblCVPWidth / dblCVPHeight
  23.    
  24.    ' get sysvar ViewSize
  25.    dblViewSize = ThisDrawing.GetVariable("ViewSize")
  26.    
  27.    For Each objViewPort In ThisDrawing.Viewports
  28.        ThisDrawing.ActiveViewport = objViewPort
  29.        objViewPort.Center = vpCentre
  30.        objViewPort.Height = dblViewSize
  31.        objViewPort.Width = dblViewSize * dblCVPScale
  32.    Next
  33.    
  34.    ThisDrawing.ActiveViewport = objCurrentViewport
  35.    
  36.    ' regen in all viewports
  37.    ThisDrawing.Regen acAllViewports
  38.    
  39. End Sub

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

使用道具 举报

29

主题

519

帖子

477

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 12:40:50 | 显示全部楼层
解决了故障。
 
通过移动objViewPort。中心=VP中心
至之后
 
objViewPort。高度=dblViewSize
objViewPort。宽度=dblViewSize*dblCVPScale
 
那么我们就没有问题了。
 
因此,代码段现在是:
 
objViewPort。高度=dblViewSize
objViewPort。宽度=dblViewSize*dblCVPScale
objViewPort。中心=VP中心
 
再次感谢你的帮助。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 02:36 , Processed in 0.497493 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表