highflybird 发表于 2025-4-12 19:54:17

如何将图纸空间的物体转换到模型空间

在CAD中有个命令,CHSPACE,这个命令能将图纸空间中的物体转换到模型空间中,且保持正确的变换。

那么如何不用命令来完成呢?
这里我提供了一个lisp程序,可以实现将图纸空间中的全部物体转换到模型空间中。
用户可以根据这个程序修改,把所需转换的物体过滤,转换到模型空间中。或者将模型空间的物体转换到图纸空间中。
要注意,图纸空间可能存在多个布局。
下面是核心代码:
;;;-------------------------------------------------------------
;;; 参数:layout --布局对象, toErase 是否删除原对象            
;;; 功能:将布局空间中的物体转换到模型空间中                  
;;; 返回:已经被转换的对象列表                                 
;;;-------------------------------------------------------------
(defun HFB:PS2MS (layout toErase / mat COPIES OBJS ORG SPACE)      
(vla-put-activelayout (LM:acdoc) layout)
(vla-zoomall (LM:acad))
(if (setq org (trans '(0 0 0) 3 2))      ;如果布局中没有活动视窗,则返回为nil
    (setq mat (list (trans '(1 0 0) 3 2 T)
      (trans '(0 1 0) 3 2 T)
      (trans '(0 0 1) 3 2 T)
      )
    mat (mapcar (function (lambda (x y) (append x (list y)))) mat org)
    mat (append mat '((0. 0. 0. 1.)))
    mat (vlax-tmatrix mat)
    )
)
(setq space (vla-get-block layout))                           ;通过布局获得空间名称
(setq objs nil)
(vlax-for n space
    (if(/= (vla-get-objectname n) "AcDbViewport")            ;排除视口对象
      (setq objs (cons n objs))
    )
)

;;通过copyobjects方式把物体拷贝到模型空间中
(setq copies (vlax-invoke (LM:acdoc) 'copyobjects objs (LM:mspace)))
(if mat
    (foreach obj copies
      (vla-transformby obj mat)
    )
)
(if toErase
    (mapcar 'vla-erase objs)
)
copies
)

源程序在此。

下面为效果演示:



跑了一下午 发表于 2025-4-14 09:43:48

你有种再说一遍 发表于 2025-4-13 20:51
进入视口内用la,你就可以看见"视口冻结",
你如果不在视口内进行冻结,那么就是全局冻结.

模型里面冻结我知道,现在是要布局里面的,比如模型里面有1和2两个图层,我要在一个布局1里面看到1图层,另外一个布局2里面看到2图层,这样可以实现吗

woshilj 发表于 2025-4-16 09:41:54

跑了一下午 发表于 2025-4-14 09:43
模型里面冻结我知道,现在是要布局里面的,比如模型里面有1和2两个图层,我要在一个布局1里面看到1图层, ...
你要在布局里面进入视口1,再对图层进行当前视口冻结,这个时候,视口2还是能看见这个图层的。

wudechao 发表于 2025-4-13 21:35:56

布局转模型,最大的挑战是图块,块中块,填充。布局某个视口只显示图块或填充的一部分(有部分是不在视口范围,比如巨大的地下室,每个塔楼是个块,室外填充是一个巨大填充区域),acad2008~cad2026都没有成功过,我一直在测试,都很失望,高飞鸟的没有测试过,估计都很失望。

hubeiwdlue 发表于 2025-4-12 20:40:03

谢谢高飞老师的分享。

guosheyang 发表于 2025-4-12 20:41:37

感谢高大师分享代码!

Bao_lai 发表于 2025-4-12 20:51:50

感谢高飞鸟大师分享优秀代码。

跑了一下午 发表于 2025-4-12 21:07:08

谢谢高飞鸟老师的分享

跑了一下午 发表于 2025-4-12 21:09:02

其实我就是很好奇,为什么有时候模型里面有很多东西,布局里面只有单一的一样,然后一个布局显示一个,这个是怎么做到的

season_88 发表于 2025-4-12 21:10:14

谢谢高大师分享

你有种再说一遍 发表于 2025-4-12 21:15:14

跑了一下午 发表于 2025-4-12 21:09
其实我就是很好奇,为什么有时候模型里面有很多东西,布局里面只有单一的一样,然后一个布局显示一个,这个 ...

视口图层冻结

moranyuyan 发表于 2025-4-12 22:21:56

谢谢分享:handshake

MZ_li 发表于 2025-4-12 22:27:39

谢谢分享
页: [1] 2 3 4
查看完整版本: 如何将图纸空间的物体转换到模型空间