谁能写个修改组码的通用函数,参考代码如下
谁能写个修改组码的通用函数,要求调用命令为(xgzm** (* 123))**为对象名,*为组码123为组码值。参考代码如下:
(setq ss (ssdel s1 ss)
s1 (ssname ss 0)
ent (entget s1)
txtn (itoa (1+ (atoi txtn)))
ent (subst
(cons 1 txtn)
(assoc 1 ent)
ent
)
)
代码节选自zzxxqq版主的一段
(defun xgzm (name mode)
(setq endata (entget name))
(cdr (assoc mode endata))
) 楼上的还不够好,我的意思是,给出对象,直接修改该对象,的组码,最后重新生成该实体。 ;; 很多函数都是嵌套的,可能部分函数给得不全,就慢慢完善吧……
;; xyp-SubUpd 更改图元DXF组码以修改实体属性 (xyp-SubUpd ename code newvalue)
;|
功能 : 更改图元、图元表、选择集DXF组码以修改实体属性
方式 : (xyp-SubUpd 实体名 DXF码 新值)
实例1 : 改圆半径为500
(xyp-SubUpd (car(entsel"\n选择圆: ")) 40 500)
实例2 : 改文本为"明经通道"
(xyp-SubUpd (car(entsel"\n选择文本: ")) 1 "明经通道")
实例3 : 改块的插入点为(0 0 0)
(xyp-SubUpd (car(entsel"\n选择图块: ")) 10 '(0 0 0))
(xyp-SubUpd (ssget) 62 1)
|;
(defun xyp-SubUpd (ename code val / ent x y i s1)
(cond ((= (type ename) 'ENAME)
(setq ent (entget ename))
(if (and (= (type code) 'LIST) (= (type val) 'LIST))
(mapcar '(lambda (x y) (xyp-SubUpd ename x y)) code val)
(progn
(if (= (xyp-get-dxf code ename) nil)
(entmod (append ent (list (cons code val))))
(entmod (subst (cons code val) (assoc code ent) ent))
)
(entupd ename)
)
)
)
((= (type ename) 'PICKSET)
(setq i -1)
(while (setq s1 (ssname ename (setq i (1+ i))))
(xyp-SubUpd s1 code val)
)
)
((= (type ename) 'LIST)
(foreach s1 ename (xyp-SubUpd s1 code val))
)
)
ename
)
多谢linshiyin2 。很好的代码!!! <center><h1>练习 组码操作.lsp</h1></center>
<script language="JavaScript">document.write("最后修改时间: " + document.lastModified)
</script>
<hr size="5"><pre><font size="2" face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC">;|问题来源:http://bbs.mjtd.com/thread-96667-1-1.html</span></font>
<font size="2" face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC"></span></font>
<font size="2" face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC">谁能写个修改组码的通用函数</span></font>
<font size="2" face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC"></span></font>
<font size="2" face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC">要求:调用命令为(xgzm ** (* 123))</span></font>
<font size="2" face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC">其中:**为对象名,*为组码123为组码值。</span></font>
<font size="2" face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC"></span></font>
<font size="2" face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC">|;</span></font>
<font face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC">;;;=================================================================*</span></font>
<font face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC">;;;测试: (xgzm (ssget) '(10 0 0 0)) *</span></font>
<font face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC">;;;日期:zml84 于 2012-10-20 10:10 *</span></font>
<font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">defun</font> <font face="Fixedsys">xgzm</font> <font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys">ss</font> <font face="Fixedsys">lst</font> <font face="Fixedsys" color="#0000FF">/</font> <font face="Fixedsys">i</font> <font face="Fixedsys">en</font> <font face="Fixedsys">ent</font><font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">setq</font> <font face="Fixedsys">i</font> <font face="Fixedsys" color="#009900">0</font><font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">repeat</font> <font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">sslength</font> <font face="Fixedsys">ss</font><font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">setq</font> <font face="Fixedsys">en</font> <font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">ssname</font> <font face="Fixedsys">ss</font> <font face="Fixedsys">i</font><font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys">ent</font> <font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">entget</font> <font face="Fixedsys">en</font><font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys">ent</font> <font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">subst</font> <font face="Fixedsys">lst</font> <font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">assoc</font> <font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">car</font> <font face="Fixedsys">lst</font><font face="Fixedsys" color="#FF0000">)</font> <font face="Fixedsys">ent</font><font face="Fixedsys" color="#FF0000">)</font> <font face="Fixedsys">ent</font><font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">entmod</font> <font face="Fixedsys">ent</font><font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">setq</font> <font face="Fixedsys">i</font> <font face="Fixedsys" color="#FF0000">(</font><font face="Fixedsys" color="#0000FF">1+</font> <font face="Fixedsys">i</font><font face="Fixedsys" color="#FF0000">)</font><font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys" color="#FF0000">)</font>
<font face="Fixedsys" color="#990099"><span style="BACKGROUND-COLOR: #CCCCCC">;;;=================================================================*</span></font>
</pre> zml84 发表于 2012-10-20 10:17 static/image/common/back.gif
练习 组码操作.lsp
document.write("最后修改时间: " + document.lastModified)
请问,能不能修改,如果有两个或两个以上相同的组码,能批量修改。谢谢!
页:
[1]