明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5340|回复: 16

[LISP]帮忙看看这个批量修改属性块值自动编号

  [复制链接]
发表于 2005-5-30 07:45:00 | 显示全部楼层 |阅读模式
(Defun c:ZDBH (/ ss sscnt slist sname blkattlist blkattval newval)
(setvar "cmdecho" 0)
(command ".undo" "BE")
(princ "\n批量修改属性块值自动编号")
(setq ss (ssget '((0 . "INSERT"))))
(setq sscnt (sslength ss) nno 0)
(setq pd1 (cdr (assoc 10 (entget (ssname ss 0)))))
(setq pd2 (cdr (assoc 10 (entget (ssname ss 1)))))
(setq ang_pd (angle pd1 pd2)) (cond ((= ang_pd (* pi 0.5)) (sort_nam_Y_mi_ma))
((= ang_pd (* pi 1.5)) (sort_nam_Y_mi_ma))
((or (/= ang_pd (* pi 0.5)) (/= ang_pd (* pi 1.5))) (sort_nam_X_mi_ma))
)
(setq attrib_val (getstring "\n输入起始值:"))
(setq ascii_val (ascii attrib_val))
(if (= attrib_val "") (progn (command ".undo" "E") (exit)))
(while (< nno sscnt)
(setq sname (nth nno list_ent))
(setq slist (entget sname))
(if (assoc 66 slist)
(progn
(setq blkattlist (entget (entnext sname)))
(setq newval
(cond
((and (>= ascii_val 97) (<= ascii_val 122)) (itoa (chr (+ asscii_val nno))))
((and (>= ascii_val 65) (<= ascii_val 90)) (itoa (chr (+ asscii_val nno))))
((< (atoi attrib_val) 3000) (itoa (+ (atoi attrib_val) nno)))
)
) (setq blkattlist (subst (cons 1 newval) (assoc 1 blkattlist) blkattlist))
(entmod blkattlist)
(entupd sname)
);progn
);if
(setq nno (1+ nno))
);while
(command ".undo" "E")
(setvar "cmdecho" 1)
(princ)
)
;-----------------------------------------------
;;;;;;;;;X坐标从小到大将所选图元排序;;;;;;;;
;-----------------------------------------------
(defun sort_nam_X_mi_ma ()
(setq n (sslength ss))
(setq list_ent nil)
(setq m 0)
(while (< m n)
(setq list_ent (append list_ent (list (ssname ss m))))
(setq m (1+ m))
)
(setq l 0)
(setq m 1)
(while (< l n)
(setq b (nth l list_ent))
(while (< m n)
(setq c (nth m list_ent))
(if (< (nth 1 (assoc 10 (entget c))) (nth 1 (assoc 10 (entget b))))
(progn
(setq list_ent (subst 'aa (nth l list_ent) list_ent))
(setq list_ent (subst 'bb (nth m list_ent) list_ent))
(setq list_ent (subst c 'aa list_ent))
(setq list_ent (subst b 'bb list_ent))
(setq b c)
)
)
(setq m (1+ m))
)
(setq l (1+ l))
(setq m (1+ l))
)
);end defun
;-----------------------------------------------
;;;;;;;;;Y坐标从小到大将所选图元排序;;;;;;;;
;-----------------------------------------------
(defun sort_nam_Y_mi_ma ()
(setq n (sslength ss))
(setq list_ent nil)
(setq m 0)
(while (< m n)
(setq list_ent (append list_ent (list (ssname ss m))))
(setq m (1+ m))
)
(setq l 0)
(setq m 1)
(while (< l n)
(setq b (entget (nth l list_ent)))
(while (< m n)
(setq c (entget (nth m list_ent)))
(if (< (nth 2 (assoc '10 c)) (nth 2 (assoc '10 b)))
(progn
(setq list_ent (subst 'aa (nth l list_ent) list_ent))
(setq list_ent (subst 'bb (nth m list_ent) list_ent))
(setq list_ent (subst c 'aa list_ent))
(setq list_ent (subst b 'bb list_ent))
(setq b c)
)
)
(setq m (1+ m))
)
(setq l (1+ l))
(setq m (1+ l))
)
);end defun 这个程序可以把选中的属性块按顺序自动编号,但是能否改成可以自由选择从左到右或者从右到左及从上到下和从下到上这样的排序?请各位高手指点?
发表于 2020-9-23 18:06:41 | 显示全部楼层
做个记号 过段时日消化
发表于 2020-9-20 21:39:55 | 显示全部楼层
做个记号 过段时日消化
发表于 2005-5-31 00:13:00 | 显示全部楼层
"自由选择从左到右或者从右到左及从上到下和从下到上这样的排序",没看懂楼主的意思,说具体点
 楼主| 发表于 2005-5-31 09:37:00 | 显示全部楼层
就是把排序的方式改成可以自己选择,而不是程序中X坐标从小到大和Y坐标从小到大 这种排序方式
发表于 2005-5-31 21:19:00 | 显示全部楼层
怎么个自己选择法,请举例说明
 楼主| 发表于 2005-6-1 16:49:00 | 显示全部楼层
可以分几种:


1,X从小到到大,y从小到大


2,X从小到到大,y从大到小


3,X从大到到小,y从小到大


4,X从大到到小,y从大到小
发表于 2005-6-2 11:57:00 | 显示全部楼层
正需要,但程序只适用第一att,可否加强:


1 能否对图选att,和多att的tag,


2 不选时为第一 att
 楼主| 发表于 2005-6-3 18:35:00 | 显示全部楼层
明经的高手去哪里了啊):
发表于 2005-6-4 13:13:00 | 显示全部楼层
是啊,目前程序只能从按 先上到下,后从左到右 的顺序,希望改成可以按自己的选择顺序编号,自己先选了哪一个,哪一个就是1,后一个2……
发表于 2005-6-5 09:16:00 | 显示全部楼层
贱人发表于2005-6-4 13:13:00是啊,目前程序只能从按 先上到下,后从左到右 的顺序,希望改成可以按自己的选择顺序编号,自己先选了哪一个,哪一个就是1,后一个2……
按你的要求只能一个个点选了。
发表于 2005-6-5 12:46:00 | 显示全部楼层
楼上的,可以这样啊:


程序分2个选项,自动排序(多选)和单选排序(一个一个的选)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-26 10:20 , Processed in 0.213037 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表