[求助]如何快速创建有名块呀?
<p>如何快速创建有名块呀?能不能把下面两个合成一个</p><p>(defun C:za (/ E)<br/> (mc-make-unname-block (ssget)) <br/> (princ)<br/>) </p><p>(defun mc-make-unname-block(ss / count entlist ent blk)<br/> </p><p> (entmake '((0 . "BLOCK")<br/> (2 . "*u")<br/> (70 . 1)<br/> (10 0 0 0)<br/> ))<br/> (setq count 0)<br/> (repeat (sslength ss)<br/> (setq entlist(entget(setq ent(ssname ss count))))<br/> (setq count (1+ count))<br/> (entmake entlist)<br/> )<br/> (setq count 0)<br/> (repeat(sslength ss)<br/> (setq ent(ssname ss count))<br/> (setq count (1+ count))<br/> (entdel ent)<br/> )<br/> (setq blk(entmake '((0 . "ENDBLK"))))<br/> (if (princ blk)<br/> (entmake (list (cons 0 "INSERT")<br/> (cons 2 blk)<br/> (cons 10 '(0 0 0))<br/> ))<br/> )<br/> blk<br/> ) </p><p><br/> <br/>(defun C:ccc (/ *APP *DOC EntNam NewNam) <br/> (vl-load-com) </p><p></p><p> (setq *APP (vlax-get-acad-object)) <br/> (setq *DOC (vla-get-activeDocument *APP)) <br/> (if (setq EntNam (car (entsel "\n请选择块: "))) <br/> (if (null (tblobjname "block" (setq NewNam (rtos (txt-rnd))))) <br/> (change-block-name EntNam NewNam) <br/> (princ "\n你没有输入新块名!") <br/> ) <br/> (princ "\n你没有选择物体!") <br/> ) <br/> (princ) <br/>) <br/>;;;改块名程序 <br/>(defun change-block-name (EntNam NewNam / obj blocks BlkNam block) <br/> (setq obj (vlax-ename->vla-object EntNam)) <br/> (setq blocks (vla-get-blocks *DOC)) <br/> (if (=(vla-get-objectname obj) "AcDbBlockReference") <br/> (if (tblsearch "block" NewNam) <br/> (princ "\n和已有块名重复!") <br/> (progn <br/> (setq BlkNam (vla-get-name obj)) <br/> (setq block (vla-item blocks BlkNam)) <br/> (vla-put-name block NewNam) <br/> (if (= (substr BlkNam 1 2) "*U") <br/> (progn <br/> (princ "\n这是一个匿名块.") <br/> (vla-auditinfo *Doc :vlax-true) <br/> (vla-put-name block NewNam) <br/> ) <br/> ) <br/> (princ "\n块名已经更改成\"") <br/> (princ NewNam) <br/> (princ "\"") <br/> ) <br/> ) <br/> (princ "\n所选物体不是块!") <br/> ) <br/>) </p><p><br/> (defun txt-rnd () ; 随机名字 </p><p> (* (rem (getvar "cputicks") 213) 100)<br/>)</p>(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)
)
用二楼的代码,创建完了块,但是块本身不显示,不知道为什么啊? 此程序使用选定的对象、插入基准点与提供的名称来定义图块,然后从图面中删除选定的对象。在运行 BLOCK 命令之后,立即输入 OOPS 可以还原删除的对象。 <p>那怎么做成块后让块不消失呢?</p><p></p> <p>怎么做才能不消失呀只是转换为块呀,或者消失了,怎样插入比较简单,刚学不是很明白,能不能说明白上点</p><p>(defun c:tt ()<br/> (setvar "CMDECHO" 0)<br/> (if (and (princ "\n选择建块图元 :")<br/> (setq ss (ssget))<br/> (setq pt (list 0 0))<br/> (setq bnm (rtos (txt-rnd))))<br/> (command "-block" bnm pt ss)<br/> )<br/> (setvar "CMDECHO" 1)</p><p> (princ)<br/>)</p><p> (defun txt-rnd () ; 随机名字 </p><p> (* (rem (getvar "cputicks") 213) 100)<br/>)<br/></p> 如我所说-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)
)
<p>多谢高手高招,终于拔开青天见月明了 ,这 个问题困扰我三天了,在百度左搜右搜,都 是些做无名块的,但无名块不能直接编辑,还得转有名块,相当于直接做有名块的麻烦。再次感谢高手,我还有个想法:</p><p>我们一般一个产品投影出来至少三个视图,视图与视图之间都会有个不太小的距离,能不能框选所有视图 ,自动判断这个比较模糊的距离(好像这个判断,比较麻烦,不知道能不能成立)</p><p>然后添加至选择集1,2,3~~~,用循环函数比如其它语言的 IF GOTO for do loop, 批量创建块,</p><p>块名随机名,插入点0点关系也不会很大为了代码简单。一个框选搞掂一切,期待高手出招吧</p> 最近想写个属性块,偷师来了。谢谢各位前辈。
页:
[1]