xtjefhw 发表于 2009-6-17 20:17:00

[求助]如何快速创建有名块呀?

<p>如何快速创建有名块呀?能不能把下面两个合成一个</p><p>(defun C:za (/ E)<br/>&nbsp; (mc-make-unname-block (ssget)) <br/>&nbsp; (princ)<br/>) </p><p>(defun mc-make-unname-block(ss / count entlist ent blk)<br/>&nbsp; </p><p>&nbsp; (entmake '((0 . "BLOCK")<br/>&nbsp;&nbsp; (2 . "*u")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (70 . 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (10 0 0 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp; ))<br/>&nbsp; (setq count 0)<br/>&nbsp; (repeat (sslength ss)<br/>&nbsp;&nbsp;&nbsp; (setq entlist(entget(setq ent(ssname ss&nbsp; count))))<br/>&nbsp;&nbsp;&nbsp; (setq count (1+ count))<br/>&nbsp;&nbsp;&nbsp; (entmake entlist)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; (setq count 0)<br/>&nbsp; (repeat(sslength ss)<br/>&nbsp;&nbsp;&nbsp; (setq ent(ssname ss count))<br/>&nbsp;&nbsp;&nbsp; (setq count (1+ count))<br/>&nbsp;&nbsp;&nbsp; (entdel ent)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; (setq blk(entmake '((0 . "ENDBLK"))))<br/>&nbsp; (if (princ blk)<br/>&nbsp; (entmake (list (cons 0&nbsp; "INSERT")<br/>&nbsp;&nbsp;&nbsp;&nbsp; (cons 2 blk)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (cons 10 '(0 0 0))<br/>&nbsp;&nbsp;&nbsp;&nbsp; ))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; blk<br/>&nbsp; ) </p><p><br/>&nbsp; <br/>(defun C:ccc (/ *APP *DOC EntNam NewNam)&nbsp; <br/>&nbsp;&nbsp;&nbsp; (vl-load-com)&nbsp; </p><p></p><p>&nbsp;&nbsp;&nbsp; (setq *APP (vlax-get-acad-object))&nbsp; <br/>&nbsp;&nbsp;&nbsp; (setq *DOC (vla-get-activeDocument *APP))&nbsp; <br/>&nbsp;&nbsp;&nbsp; (if (setq EntNam (car (entsel "\n请选择块: ")))&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (null (tblobjname "block" (setq NewNam (rtos (txt-rnd))))) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (change-block-name EntNam NewNam)&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n你没有输入新块名!")&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n你没有选择物体!")&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; (princ)&nbsp; <br/>)&nbsp; <br/>;;;改块名程序&nbsp; <br/>(defun change-block-name (EntNam NewNam / obj blocks BlkNam block)&nbsp; <br/>&nbsp;&nbsp;&nbsp; (setq obj (vlax-ename-&gt;vla-object EntNam))&nbsp; <br/>&nbsp;&nbsp;&nbsp; (setq blocks (vla-get-blocks *DOC))&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; (if (=(vla-get-objectname obj) "AcDbBlockReference")&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (tblsearch "block" NewNam)&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n和已有块名重复!")&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq BlkNam (vla-get-name obj))&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq block&nbsp; (vla-item blocks BlkNam))&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-name block NewNam)&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= (substr BlkNam 1 2) "*U")&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n这是一个匿名块.")&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-auditinfo *Doc :vlax-true)&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-name block NewNam)&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n块名已经更改成\"")&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ NewNam)&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\"")&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n所选物体不是块!")&nbsp; <br/>&nbsp;&nbsp;&nbsp; )&nbsp; <br/>)&nbsp; </p><p><br/>&nbsp; (defun txt-rnd ()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; 随机名字 </p><p>&nbsp; (* (rem (getvar "cputicks") 213) 100)<br/>)</p>

ZZXXQQ 发表于 2009-6-17 22:26:00


(defun c:tt ()
(setvar "CMDECHO" 0)
(if (and (princ "\n选择建块图元 :")
          (setq ss (ssget))
          (setq pt (getpoint "\n图块插入点 :"))
          (setq bnm (getstring "\n块名 :")))
(command "-block" bnm pt ss)
)
(setvar "CMDECHO" 1)
(princ)
)

ttsmile 发表于 2009-6-17 22:45:00

用二楼的代码,创建完了块,但是块本身不显示,不知道为什么啊?

totoro 发表于 2009-6-17 23:07:00

此程序使用选定的对象、插入基准点与提供的名称来定义图块,然后从图面中删除选定的对象。在运行 BLOCK 命令之后,立即输入 OOPS 可以还原删除的对象。

ttsmile 发表于 2009-6-17 23:10:00

<p>那怎么做成块后让块不消失呢?</p><p></p>

xtjefhw 发表于 2009-6-18 00:17:00

<p>怎么做才能不消失呀只是转换为块呀,或者消失了,怎样插入比较简单,刚学不是很明白,能不能说明白上点</p><p>(defun c:tt ()<br/>&nbsp;(setvar "CMDECHO" 0)<br/>&nbsp;(if (and (princ "\n选择建块图元 :")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ss (ssget))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq pt (list 0 0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq bnm&nbsp; (rtos (txt-rnd))))<br/>&nbsp; (command "-block" bnm pt ss)<br/>&nbsp;)<br/>&nbsp;(setvar "CMDECHO" 1)</p><p>&nbsp;(princ)<br/>)</p><p>&nbsp;(defun txt-rnd ()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; 随机名字 </p><p>&nbsp; (* (rem (getvar "cputicks") 213) 100)<br/>)<br/></p>

totoro 发表于 2009-6-18 01:09:00

如我所说-block制作成图块后,图形会删除~
只要在插入图快就行了~
修改如下~

(defun    c:tt    ()
(setvar    "CMDECHO"    0)
(if    (and    (princ    "\n选择建块图元 :")
         (setq ss (ssget))
         (setq pt (getpoint    "\n图块插入点 :"))
         (setq bnm (getstring    "\n块名 :")))
   (command    "-block" bnm pt ss "" "-insert" bnm pt "" "" "")
)
(setvar    "CMDECHO"    1)
(princ)
)

xtjefhw 发表于 2009-6-18 07:05:00

<p>多谢高手高招,终于拔开青天见月明了 ,这 个问题困扰我三天了,在百度左搜右搜,都 是些做无名块的,但无名块不能直接编辑,还得转有名块,相当于直接做有名块的麻烦。再次感谢高手,我还有个想法:</p><p>我们一般一个产品投影出来至少三个视图,视图与视图之间都会有个不太小的距离,能不能框选所有视图 ,自动判断这个比较模糊的距离(好像这个判断,比较麻烦,不知道能不能成立)</p><p>然后添加至选择集1,2,3~~~,用循环函数比如其它语言的 IF GOTO for do loop, 批量创建块,</p><p>块名随机名,插入点0点关系也不会很大为了代码简单。一个框选搞掂一切,期待高手出招吧</p>

peter-wen 发表于 2013-12-20 00:06:07

最近想写个属性块,偷师来了。谢谢各位前辈。
页: [1]
查看完整版本: [求助]如何快速创建有名块呀?