etoxp 发表于 2015-7-17 11:43:55

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

想把块内图元复制到块外,而且位置不变,还和在块内时一样。请问如何实现?(这个块的位置与角度在三维空间中是任意的)
我能想到的一个方法:复制一个块,然后炸开,留下目标图元,其余的删除。
还有其它更简便的方法没?貌似可以用矩阵变换,但一直没找到简单的参考代码。

vormittag 发表于 2015-7-17 14:32:12

我只列主要代码:容错性不高。程序默认你选择的是一个块插入(insert),如果选择其他图元将出错。对选择图元的判断需要你自己补充。程序直接在原位复制一个图元。如果你想基点复制,代码也需要自己补充。
(defun c:te(/ select ptsel ename entlst newvlaobj)
    (setq select (nentselp)
                  ptsel(cadrselect)
                  ename(car   select)
                  entlst (entget ename)
              matrix (caddr select))          
        (entmake entlst)
        (setq newvlaobj (vlax-ename->vla-object (entlast)))
        (vla-transformby newvlaobj (vlax-tmatrix matrix))
        (princ))

masterlong 发表于 2015-7-17 12:15:44

凡涉及块内图元的问题
基本就没有简单的
你的方法已经是最简单
或者说容易使用的了
矩阵方式的代码论坛上有
搜下块内图元原位复制

edata 发表于 2015-7-17 12:24:33

炸开是最简单的。。
我尝试了下用entmake+command,因为时间关系,这个对于嵌套块无效。
(defun c:tt (/ E1 E2 E3 EN P10 P41 P50)
(if (setq en (nentsel))
    (progn
      (setq e1(car en))
      (setq e2(car(last en)))
      (setq p10(sk_dxf e2 10))
      (setq p41(sk_dxf e2 41))
      (setq p50(sk_dxf e2 50))
      (setq e3(entmakex (entget e1)))
      (command "_.SCALE" e3 "" "non" "0,0" "non" p41)
      (command "_.ROTATE" e3 "" "non" "0,0" "non" (angtos p50 2 8))
      (command "_.move" e3 "" "non" "0,0" "non" p10 )
    )
)
)
(defun sk_dxf(ent code)(cdr(assoc code (entget ent))))

etoxp 发表于 2015-7-17 13:55:49

edata 发表于 2015-7-17 12:24 static/image/common/back.gif
炸开是最简单的。。
我尝试了下用entmake+command,因为时间关系,这个对于嵌套块无效。
谢谢前辈!
程序对放置于xy平面的块有效,但若将此块旋转一定角度使其不在xy平面内,程序有点小问题,复制出来的对象不能保持“原位”,跑到其它地方去了。
前辈有空时能否帮忙改进一下,谢谢!!!

etoxp 发表于 2015-7-17 17:21:08

vormittag 发表于 2015-7-17 14:32 static/image/common/back.gif
我只列主要代码:容错性不高。程序默认你选择的是一个块插入(insert),如果选择其他图元将出错。对选择图元 ...

非常感谢,完全实现了我想要的功能,大感谢了!

caoyin 发表于 2015-7-18 00:13:17

cad自带命令:NCOPY(低版本只有ET中才有)
矩阵变换的要考虑到不等比例的图块中诸如圆等对象的问题

etoxp 发表于 2015-8-29 13:01:10

vormittag 发表于 2015-7-17 14:32 static/image/common/back.gif
我只列主要代码:容错性不高。程序默认你选择的是一个块插入(insert),如果选择其他图元将出错。对选择图元 ...

谢谢,能实现我的目的。对于容错,我的程序功能比较简单,不一定要很严谨。
页: [1]
查看完整版本: 请教如何实现 块内图元原位复制到块外?