明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1005|回复: 26

[【高飞鸟】] 如何将图纸空间的物体转换到模型空间

  [复制链接]
发表于 4 天前 | 显示全部楼层 |阅读模式
在CAD中有个命令,CHSPACE,这个命令能将图纸空间中的物体转换到模型空间中,且保持正确的变换。

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

  26.   ;;通过copyobjects方式把物体拷贝到模型空间中
  27.   (setq copies (vlax-invoke (LM:acdoc) 'copyobjects objs (LM:mspace)))
  28.   (if mat
  29.     (foreach obj copies
  30.       (vla-transformby obj mat)
  31.     )
  32.   )
  33.   (if toErase
  34.     (mapcar 'vla-erase objs)
  35.   )
  36.   copies
  37. )


源程序在此。

下面为效果演示:



本帖子中包含更多资源

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

x

评分

参与人数 7明经币 +7 金钱 +10 收起 理由
magicheno + 1 很给力!
tigcat + 1 + 10 很给力!高版分享的都是好东西,先收藏
zhoupeng220 + 1 很给力!
tranque + 1 很给力!
kucha007 + 1 赞一个!
ssyfeng + 1 赞一个!
Bao_lai + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

发表于 3 天前 | 显示全部楼层
跑了一下午 发表于 2025-4-13 20:40
布局里面可以单独冻结图层吗?不会影响到其他布局窗口吗?

进入视口内用la,你就可以看见"视口冻结",
你如果不在视口内进行冻结,那么就是全局冻结.
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
谢谢高飞老师的分享。
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
感谢高大师分享代码!
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
感谢高飞鸟大师分享优秀代码。
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
谢谢高飞鸟老师的分享
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
其实我就是很好奇,为什么有时候模型里面有很多东西,布局里面只有单一的一样,然后一个布局显示一个,这个是怎么做到的
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
谢谢高大师分享
回复 支持 反对

使用道具 举报

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

视口图层冻结
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-16 08:49 , Processed in 0.196029 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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