明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1946|回复: 7

[提问] 请教如何实现 块内图元原位复制到块外?

[复制链接]
发表于 2015-7-17 11:43:55 | 显示全部楼层 |阅读模式
想把块内图元复制到块外,而且位置不变,还和在块内时一样。请问如何实现?(这个块的位置与角度在三维空间中是任意的)
我能想到的一个方法:复制一个块,然后炸开,留下目标图元,其余的删除。
还有其它更简便的方法没?貌似可以用矩阵变换,但一直没找到简单的参考代码。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-7-17 14:32:12 | 显示全部楼层
我只列主要代码:容错性不高。程序默认你选择的是一个块插入(insert),如果选择其他图元将出错。对选择图元的判断需要你自己补充。程序直接在原位复制一个图元。如果你想基点复制,代码也需要自己补充。
  1. (defun c:te(/ select ptsel ename entlst newvlaobj)
  2.     (setq select (nentselp)
  3.                   ptsel  (cadr  select)
  4.                   ename  (car   select)
  5.                   entlst (entget ename)
  6.               matrix (caddr select))          
  7.         (entmake entlst)
  8.         (setq newvlaobj (vlax-ename->vla-object (entlast)))
  9.         (vla-transformby newvlaobj (vlax-tmatrix matrix))
  10.         (princ))
回复 支持 1 反对 0

使用道具 举报

发表于 2015-7-17 12:15:44 来自手机 | 显示全部楼层
凡涉及块内图元的问题
基本就没有简单的
你的方法已经是最简单
或者说容易使用的了
矩阵方式的代码论坛上有
搜下块内图元原位复制
发表于 2015-7-17 12:24:33 | 显示全部楼层
炸开是最简单的。。
我尝试了下用entmake+command,因为时间关系,这个对于嵌套块无效。
  1. (defun c:tt (/ E1 E2 E3 EN P10 P41 P50)
  2.   (if (setq en (nentsel))
  3.     (progn
  4.       (setq e1(car en))
  5.       (setq e2(car(last en)))
  6.       (setq p10(sk_dxf e2 10))
  7.       (setq p41(sk_dxf e2 41))
  8.       (setq p50(sk_dxf e2 50))
  9.       (setq e3(entmakex (entget e1)))
  10.       (command "_.SCALE" e3 "" "non" "0,0" "non" p41)
  11.       (command "_.ROTATE" e3 "" "non" "0,0" "non" (angtos p50 2 8))
  12.       (command "_.move" e3 "" "non" "0,0" "non" p10 )
  13.     )
  14.   )
  15. )
  16. (defun sk_dxf(ent code)(cdr(assoc code (entget ent))))
 楼主| 发表于 2015-7-17 13:55:49 | 显示全部楼层
edata 发表于 2015-7-17 12:24
炸开是最简单的。。
我尝试了下用entmake+command,因为时间关系,这个对于嵌套块无效。

谢谢前辈!
程序对放置于xy平面的块有效,但若将此块旋转一定角度使其不在xy平面内,程序有点小问题,复制出来的对象不能保持“原位”,跑到其它地方去了。
前辈有空时能否帮忙改进一下,谢谢!!!
 楼主| 发表于 2015-7-17 17:21:08 | 显示全部楼层
vormittag 发表于 2015-7-17 14:32
我只列主要代码:容错性不高。程序默认你选择的是一个块插入(insert),如果选择其他图元将出错。对选择图元 ...

非常感谢,完全实现了我想要的功能,大感谢了!
发表于 2015-7-18 00:13:17 | 显示全部楼层
cad自带命令:NCOPY(低版本只有ET中才有)
矩阵变换的要考虑到不等比例的图块中诸如圆等对象的问题
 楼主| 发表于 2015-8-29 13:01:10 | 显示全部楼层
vormittag 发表于 2015-7-17 14:32
我只列主要代码:容错性不高。程序默认你选择的是一个块插入(insert),如果选择其他图元将出错。对选择图元 ...

谢谢,能实现我的目的。对于容错,我的程序功能比较简单,不一定要很严谨。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 09:54 , Processed in 0.278108 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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