njwtg 发表于 2008-1-3 20:29:00

[求助]恳求zzxxqq,如何将图元转成块

恳求斑竹zzxxqq帮忙,图纸上有很多相同形状的图元,没有做成块,用程序可以将这些图元批量转成块吗,<br/>我的想法是这样:假如有a图元200个,b图元500个.....我先点选a图元,然后再点选需要转成的块,接着程序就自动将200a图元转成块了,可以吗 ,也就是说我只选一个a图元,就能批量转化200a图元为块<br/>

ZZXXQQ 发表于 2008-1-3 22:44:00

<p>难度挺大。最好给个DWG文件调试。</p><p>1、都是什么样的图元?</p><p>2、图元是独立的吗?</p><p>3、转成图块后插入点如何定?</p>

njwtg 发表于 2008-1-4 08:52:00

图元是独立的,插入点在图元的中间,不过插入点的位置不是太重要的,只要能在图元的内部就可以了,测试图中有二种不同的图元,谢谢您

ZZXXQQ 发表于 2008-1-4 20:53:00

先试试。只对LWPOLYLINE有效。


;图元转块 明经 ZZXXQQ 2008.1.4
(defun c:tt ()
(defun getpline (ename / pts)
(setq pts '())
(mapcar '(lambda(x) (if (= (car x) 10)(setq pts (cons (cdr x) pts)))) (entget ename))
(reverse pts)
)
(setvar "CMDECHO" 0)
(if (and (setq s1 (entsel "\nSelect a LWPOLYLINE :"))
          (setq ent (entget (car s1)))
    (setq pln (assoc 90 ent))
    (= (cdr (assoc 0 ent)) "LWPOLYLINE")
   ) (progn
(command ".UNDO" "BE")
(setq ptlst (getpline (car s1))
      p1 (car ptlst)
      p2 (caddr ptlst)
p3 (cadddr ptlst)
      p4 (last ptlst)
      ang1 (angle p1 p2)
ang2 (angle p1 p4)
ang (rem (- ang2 ang1) pi)
ang0 ang1)
(if (and (setq bnm (getstring "\nEnter Block Name <BLK1> :")
               bnm (if (= bnm "") "BLK1" bnm))
   (not (tblsearch "BLOCK" bnm))
   ) (progn
   (command "-BLOCK" bnm p1 (car s1) "")
   (command "-INSERT" bnm p1 "" "" "")
   (if (setq ss (ssget "X" (list '(0 . "LWPOLYLINE") pln))) (progn
    (setq i -1)
    (repeat (sslength ss)
   (setq en (ssname ss (setq i (1+ i))))
   (setq ptl (getpline en)
         p1 (car ptl)
         p2 (caddr ptl)
         p3 (cadr ptl)
         p4 (last ptl)
   ang1 (angle p1 p2)
   ang2 (angle p1 p4)
   ang3 (rem (- ang2 ang1) pi)
   angx (/ (* (- ang1 ang0) 180) pi))
(if (equal ang3 ang 0.0001) (progn
   (command "-insert" bnm p1 "" "" angx)
   (entdel en)
))
    )
   ))
))
(command ".UNDO" "E")
))
(princ)
)

无痕 发表于 2008-1-5 00:31:00

<p>应该加一些实体的特性,比如段数,各段比例,以便从一大堆实体中“智能”地找到类似实体进行转换,替换时候考虑角度和缩放比例。</p><p>如此,实际意义会更大</p>

无痕 发表于 2008-1-5 00:34:00

再进一步,可以考虑相似选集替换为块,思路类似,这样可还原被不小心炸开的块实体。

njwtg 发表于 2008-1-5 08:17:00

谢谢zzxxqq,<p><strong><font face="Verdana" color="#da2549">无痕的思路:</font></strong>应该加一些实体的特性,比如段数,各段比例,以便从一大堆实体中“智能”地找到类似实体进行转换,替换时候考虑角度和缩放比例。------比如图纸中的矩形,转化水平角度的矩形时,就不能同时转化非水平角度的矩形,我原来的想法是只要是矩形(形状大小一样)不管什么角度都要能转化为同名块,当然组成图元的也不仅仅是LWPOLYLINE,应该还有圆,直线,圆弧共四种</p>

wwwliuyu 发表于 2008-1-7 18:08:00

本帖最后由 作者 于 2008-1-7 18:09:20 编辑 <br /><br /> <p>我看不到.要努力.</p><p></p><p></p>

njwtg 发表于 2008-1-10 18:54:00

<p>能否请大师们再优化一下,点选需要转化为块的多个图元组合,然后转化为块,当然不同角度的也要能被转化,</p>

njwtg 发表于 2008-1-15 15:10:00

<p>能否请大师们帮个忙,点选需要转化为块的多个图元组合(有可能是块和文字的组合),然后将与多个图元组合成的图元相同的转化为块,当然不同角度的也要能被转化(此角度是多个图元组合成的图元的整体的角度)</p>
页: [1] 2 3 4 5
查看完整版本: [求助]恳求zzxxqq,如何将图元转成块