石井鱼
发表于 2018-1-25 22:36:25
不怎么用这个,支持一下
lifuor
发表于 2018-1-26 20:27:24
qhdycm2017 发表于 2018-1-25 15:33
梯段宽度参数应该搞成自动记忆上次输入的数值
常用就260、280,所以没必要的
注册
发表于 2018-2-1 08:21:31
(defun C:bztd ()
(setq en (entsel "\n 请选择标注尺寸文字:")
data (entget(car en))
old_list (assoc 42 data)
text (cdr old_list)
b (getint "\n 请输入梯段宽b<260>:")
shzi (atof (substr (rtos text 2) 1))
)
(princ text)
(if (= b nil)(setq b 260))
(setq n (/ text b)
new (strcat (rtos n 2 0) "X" (rtos b 2 0) "=" (rtos shzi 2 0))
new_list (cons 1 new)
data (subst new_list old_list data)
)
(entmod data)
(prin1)
)
lifuor
发表于 2018-3-15 08:48:58
bssurvey 发表于 2018-1-23 08:51
(defun C:bztd ()
(setq en (entsel "\n 請選擇 ...
您好,我想在此基础上实现一次选多个标注的功能,也就是加个条件语句,我的修改如下,但是因为理论不扎实,有些问题,您方便时给看看行么?谢谢
;;楼梯-梯段尺寸标注
(defun C:bztd ( / en data old_list num b n new_list )
(setq en (entsel "\n 请选择标注尺寸文字:")
data (entget(car en))
old_list (assoc 42 data) ;因为是实际的尺寸,有时(assoc 1 data)里的值是""(空的)
num (cdr old_list)
b (getint "\n 请输入梯段宽b<260>:")
n (sslength data)
k 0
)
(if (= b nil)(setq b 260))
(while (< k n)
(setq n (/ num b)
new (strcat (rtos n 2 0) "x" (rtos b 2 0) "=" (rtos num 2 0))
;文字数字连接用stract及数字转文字rtos取实数(rtos n 2 0)如果要小数点,将0改为1或其他
new_list (cons 1 new)
data (subst new_list old_list data)
)
(entmod data)
(setq k (+ k 1))
)
(princ "\n 转换完成!")
(prin1)
)
LIULISHENG
发表于 2018-3-15 12:24:28
谢谢分享!
bssurvey
发表于 2018-3-16 11:46:13
lifuor 发表于 2018-3-15 08:48
您好,我想在此基础上实现一次选多个标注的功能,也就是加个条件语句,我的修改如下,但是因为理论不扎实 ...
看看是不是你想要的
(defun C:bztd ( / en data old_list num b n new_list )
(while (setq en (entsel "\n 請選擇標注尺寸文字:"))
(setq data (entget(car en))
old_list (assoc 42 data) ;因為是實際的尺寸,有時(assoc 1 data)裡的值是""(空的)
num (cdr old_list)
b (getint "\n 請輸入梯段寬b<260>:")
)
(if (= b nil)(setq b 260))
(setq n (/ num b)
new (strcat (rtos n 2 0) "x" (rtos b 2 0) "=" (rtos num 2 0))
;文字數字連接用stract及數字轉文字rtos取實數(rtos n 2 0)如果要小數點,將0改為1或其他
new_list (cons 1 new)
data (subst new_list old_list data)
)
(entmod data)
)
(princ "\n 轉換完成!")
(prin1)
)
還是你要選擇同一圖層的標註,因為entsel一次只能選擇一個圖元,不可多選,所以sslength會沒有作用,如果要用sslegth 要搭配ssget多重選擇才可使用。
lifuor
发表于 2018-3-19 21:01:15
bssurvey 发表于 2018-3-16 11:46
看看是不是你想要的
(defun C:bztd ( / en data old_list num b n new_list ) ...
麻烦帮我看看哪里有问题好么?
;;楼梯-梯段尺寸标注
(defun C:bztd ( / en data old_list num b n new_list )
(prompt "\n 请选择标注尺寸文字:")
(steq ss (ssget)
k 0
b (getint "\n 请输入梯段宽b<260>:")
)
(if (= b nil)(setq b 260))
(repeat (sslength ss)
(setq en (ssname ss k)
data (entget(cdr en))
old_list (assoc 42 data)
num (cdr old_list)
)
(setq n (/ num b)
new (strcat (rtos n 2 0) "x" (rtos b 2 0) "=" (rtos num 2 0))
new_list (cons 1 new)
data (subst new_list old_list data)
)
(entmod data)
(setq k (1+k))
)
(princ "\n 转换完成!")
(prin1)
)
bssurvey
发表于 2018-3-20 08:10:20
本帖最后由 bssurvey 于 2018-3-20 08:14 编辑
lifuor 发表于 2018-3-19 21:01
麻烦帮我看看哪里有问题好么?
;;楼梯-梯段尺寸标注
(defun C:bztd ( / en data old_list num b n new_ ...
(defun C:bztd ( / en data old_list num b n new_list )
(prompt "\n 请选择标注尺寸文字:")
(steq ss (ssget)
;這裡應該是(setq ss(ssget) k 0
b (getint "\n 请输入梯段宽b<260>:")
)
(if (= b nil)(setq b 260))
(repeat (sslength ss)
(setq en (ssname ss k)
data (entget(cdr en)) ;這裡的cdr用不到,因為不是用entsel是用ssget
old_list (assoc 42 data)
num (cdr old_list)
)
(setq n (/ num b)
new (strcat (rtos n 2 0) "x" (rtos b 2 0) "=" (rtos num 2 0))
new_list (cons 1 new)
data (subst new_list old_list data)
)
(entmod data)
(setq k (1+k));空格位置放錯 (setq k(1+ k))
)
(princ "\n 转换完成!")
(prin1)
)
lifuor
发表于 2018-3-20 23:42:46
bssurvey 发表于 2018-3-20 08:10
(defun C:bztd ( / en data old_list num b n new_list )
(prompt "\n 请选择标注尺寸文字:")
(steq...
感谢回复,只是我修改后还是运行不通。不知道哪里有问题,能烦请您再帮忙看看到底是哪里有问题好么?不盛感激!
bssurvey
发表于 2018-3-21 07:30:06
lifuor 发表于 2018-3-20 23:42
感谢回复,只是我修改后还是运行不通。不知道哪里有问题,能烦请您再帮忙看看到底是哪里有问题好么?不盛 ...
(defun C:bztd ( / en data old_list num b n new_list )
(prompt "\n 請選擇標注尺寸文字:")
(setq ss (ssget)
k 0
b (getint "\n 請輸入梯段寬b<260>:")
)
(if (= b nil)(setq b 260))
(repeat (sslength ss)
(setq en (ssname ss k)
data (entget en)
old_list (assoc 42 data)
num (cdr old_list)
)
(setq n (/ num b)
new (strcat (rtos n 2 0) "x" (rtos b 2 0) "=" (rtos num 2 0))
new_list (cons 1 new)
data (subst new_list old_list data)
)
(entmod data)
(setq k(1+ k))
)
(princ "\n 轉換完成!")
(prin1)
)