明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 892|回复: 15

[源码] 分享源码 查找布局视口在模型的位置并显示

  [复制链接]
发表于 2025-10-30 16:42:25 | 显示全部楼层 |阅读模式
本帖最后由 wungqiao3 于 2025-10-30 16:48 编辑


【应用场景】
在布局里有很多视口,找到这个视口在模型里的位置
这段码说明了在布局里的坐标转换到模型里
以前不明白怎么用,其实就是要激活当前视口,通过trans把布局里的坐标转换到视口坐标,再转换到世界坐标系

直接上码吧,如果对你有用可以赏个明经币

  1. (defun C:TT (/ doc pts pv s)
  2.   (vl-load-com)
  3.   (if (and
  4.         (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  5.         (setq s (ssget ":S" '((0 . "VIEWPORT"))))
  6.         (setq pv (vlax-ename->vla-object (ssname s 0)))
  7.         (not (vla-put-MSpace doc :vlax-true))
  8.         (not (vla-put-ActivePViewport doc pv))
  9.         (not (vla-put-MSpace doc :vlax-false))
  10.       )
  11.     (progn
  12.       (vla-getboundingbox pv 'minp 'maxp)
  13.       (setq pts (mapcar 'vlax-safearray->list (list minp maxp)))
  14.       (setq pts (mapcar '(lambda (x) (trans (trans x 3 2) 2 1)) pts))
  15.       (vla-put-ActiveSpace doc 1)
  16.       (vl-cmdf "ZOOM" "W" (car pts) (cadr pts))
  17.     )
  18.   )
  19.   (vlax-release-object doc)
  20.   (princ)
  21. )


【附件】



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 5明经币 +5 收起 理由
A._建筑李工 + 1 很给力!
gaics + 1 很给力!
USER2128 + 1 赞一个!
xj6019 + 1 赞一个!
bssurvey + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2025-10-30 18:45:22 | 显示全部楼层
yangyangyixia 发表于 2025-10-30 17:00
有的视口行,有的不行,我没看出来哪里的问题,这个就不行

修正了视口内目标点位移的问题,你可以再试下
当然,你可以修正视口内的目标点为0,也可以忽略它保持位移


  1. (defun C:TT (/ doc pts pv s tarp)
  2.   (vl-load-com)
  3.   (if (and
  4.         (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  5.         (setq s (ssget ":S" '((0 . "VIEWPORT"))))
  6.         (setq pv (vlax-ename->vla-object (ssname s 0)))
  7.         (not (vla-put-MSpace doc :vlax-true))
  8.         (not (vla-put-ActivePViewport doc pv))
  9.         (not (vla-put-MSpace doc :vlax-false))
  10.         (setq tarp (vlax-safearray->list (vlax-variant-value (vla-get-Target pv))))
  11.       )
  12.     (progn
  13.       (vla-getboundingbox pv 'minp 'maxp)
  14.       (setq pts (mapcar 'vlax-safearray->list (list minp maxp)))
  15.       (setq pts (mapcar '(lambda (x / p)
  16.                            (setq p (trans x 3 2))
  17.                            (setq p (trans p 2 0))
  18.                            (mapcar '(lambda (a b)  (+ a b)) p tarp)
  19.                          )
  20.                   pts
  21.                 )
  22.       )      
  23.       (vla-put-ActiveSpace doc 1)
  24.       (vl-cmdf "ZOOM" "W" (car pts) (cadr pts))
  25.     )
  26.   )
  27.   (vlax-release-object doc)
  28.   (princ)
  29. )

回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-30 17:59:55 | 显示全部楼层
yangyangyixia 发表于 2025-10-30 17:00
有的视口行,有的不行,我没看出来哪里的问题,这个就不行

不太清楚,我对比了obj的属性,发现Target个值跟正常的视口值不一样,正常的是'(0 0 0),而你的是Target = (135108.0 34511.5 -6.89434),所以我试着把这个视口的值改回'(0 0 0)时,它就正常了
Target=视口的目标点,不太懂什么意思
你也可以试下用下面这段代码修改Target的值
  1. (vla-put-Target (vlax-ename->vla-object (car (entsel ))) (vlax-3D-point '(0 0 0)))



回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-31 17:42:54 | 显示全部楼层
本帖最后由 wungqiao3 于 2025-10-31 17:49 编辑
23410997 发表于 2025-10-30 20:34
感谢分享,能否加个在模型里选择图元自动跳至视口呢!感觉原理一样的,我不懂啊,说的不对不要上火。

想了下,如果非要实现的话,还是有机会的
1. 在模型里找到这堆图元的外框范围

2. 获取布局所有视口在模型的范围
3. 判断,如果范围有重叠,就跳转到布局的视口

楼下的哥们说的一样,可能存在多视口看1个对象的问题,需要再加判断跳转


回复 支持 反对

使用道具 举报

发表于 2025-10-30 17:00:22 | 显示全部楼层
有的视口行,有的不行,我没看出来哪里的问题,这个就不行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 2025-10-30 17:44:20 | 显示全部楼层
我以前是双击进视口画个大圆,再进MODEL里看位置。。代码也是一种思路,感谢分享!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-30 18:07:39 | 显示全部楼层
konoko 发表于 2025-10-30 17:44
我以前是双击进视口画个大圆,再进MODEL里看位置。。代码也是一种思路,感谢分享!

嗯。一个意思,我之前是进视口画个构造线,再进模型里,选中线,看中点在哪,
回复 支持 反对

使用道具 举报

发表于 2025-10-30 18:15:51 | 显示全部楼层
wungqiao3 发表于 2025-10-30 17:59
不太清楚,我对比了obj的属性,发现Target个值跟正常的视口值不一样,正常的是'(0 0 0),而你的是Target  ...

视口支持相对坐标系,也就是视口坐标系.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-30 18:42:07 | 显示全部楼层
你有种再说一遍 发表于 2025-10-30 18:15
视口支持相对坐标系,也就是视口坐标系.

感谢指点,就是搞不懂这些相对坐标跟坐标系转,不过按你的意思,我加了段视口目标点的坐标位移,就正常了
  1. (mapcar '(lambda (a b)  (+ a b)) p tarp)

回复 支持 反对

使用道具 举报

发表于 2025-10-30 20:34:56 | 显示全部楼层
感谢分享,能否加个在模型里选择图元自动跳至视口呢!感觉原理一样的,我不懂啊,说的不对不要上火。
回复 支持 反对

使用道具 举报

发表于 2025-10-30 21:27:04 来自手机 | 显示全部楼层
23410997 发表于 2025-10-30 20:34
感谢分享,能否加个在模型里选择图元自动跳至视口呢!感觉原理一样的,我不懂啊,说的不对不要上火。

这个应该不行,模型里一个对象可能在多个视口里。
建议选择之前先判断是否在布局空间,如果不是自动切换到布局。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-11-13 23:06 , Processed in 0.192623 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表