新人自学lisp不久,望高手指点一二
插件写完经过测试发现如下问题,本人使用天正电气T20V5.0
1,在CAD2017版本,win10系统中,能够正确无误统计出闭合曲线范围内块的数量,无论曲线范围内块数量是多少。
2,在CAD2016版本,win7系统中,不能正确统计出闭合曲线范围内块数量,且每次统计出来的块数量均不一致,且多次运行后插件返回“lselsetp nil”;在数量不多的情况下(估算在100个内)又能够正确统计。
望能够指点一二,看代码有什么问题 - (defun c:tet()
- (setq
- zm nil
- name nil
- tkmz nil
- ssd nil
- pts nil
- ii 0
- i 0
- tcq_num 0
- xhs_num 0
- wg_num 0
- slzs_num 0
- xhf_num 0
- ssbjf_num 0
- 70if_num 0
- 280if_num 0
-
- sgbj_num 0
- sb_num 0
- jlm_num 0
- qyxs_num 0
- xfdh_num 0
- xfgb_num 0
- )
- ;获取闭合曲线
- (setq zm (entget(car(entsel"\n选闭合曲线范围"))))
- ;得到闭合曲线点坐标
- (repeat (length zm)
- (if (= 10 (car (nth ii zm)))
- (setq pts (append pts (list (cdr(nth ii zm)))))
- )
- (setq ii (1+ ii))
- )
- ;获取闭合曲线范围内的块的选择集
- (setq ssd(ssget "wp" pts '((0 . "insert"))))
- ;判断选择集中,块名是"$equip$00002649","$equip$00002656"等的数量
- (repeat (sslength ssd)
- (setq name (ssname ssd i))
- (setq tkmz (cdr (assoc 2 (entget name))))
- (cond
- ((= "$equip$00002649" tkmz)(setq tcq_num(1+ tcq_num)));如果块名是"$equip$00002649",则对应数量加+1
- ((= "$equip$00002656" tkmz)(setq xhs_num(1+ xhs_num)));余同
- ((= "$equip$00002648" tkmz)(setq wg_num(1+ wg_num)))
- ((= "$equip$00002760" tkmz)(setq slzs_num(1+ slzs_num)))
- ((= "$equip$00002794" tkmz)(setq xhf_num(1+ xhf_num)))
- ((= "$equip$00002662" tkmz)(setq ssbjf_num(1+ ssbjf_num)))
- ((= "$equip$00002402" tkmz)(setq 70if_num(1+ 70if_num)))
- ((= "$equip$00002403" tkmz)(setq 280if_num(1+ 280if_num)))
-
- ((= "$equip$00002679" tkmz)(setq sgbj_num(1+ sgbj_num)))
- ((= "$equip$00002655" tkmz)(setq sb_num(1+ sb_num)))
- ((= "$equip$00002781" tkmz)(setq jlm_num(1+ jlm_num)))
- ((= "$equip$00002779" tkmz)(setq qyxs_num(1+ qyxs_num)))
- ((= "$equip$00002658" tkmz)(setq xfdh_num(1+ xfdh_num)))
- ((= "$equip$00002677" tkmz)(setq xfgb_num(1+ xfgb_num)))
- )
- (setq i (1+ i))
- )
- ;文字输出位置坐标
- (setq pta1 (getpoint"\n文字输出起始位置"));获取第一个(块数量)文字输出的位置
- (setq pta2 (polar pta1 (/ pi 2) -400));第二个(块数量)文字输出的位置
- (setq pta3 (polar pta1 (/ pi 2) -800))
- (setq pta4 (polar pta1 (/ pi 2) -1200))
- (setq pta5 (polar pta1 (/ pi 2) -1600))
- (setq pta6 (polar pta1 (/ pi 2) -2000))
- (setq pta7 (polar pta1 (/ pi 2) -2400))
- (setq pta8 (polar pta1 (/ pi 2) -2800))
-
- (setq ptb1 (polar pta1 (/ pi 2) -3200))
- (setq ptb2 (polar pta1 (/ pi 2) -3600))
- (setq ptb3 (polar pta1 (/ pi 2) -4000))
- (setq ptb4 (polar pta1 (/ pi 2) -4400))
- (setq ptc1 (polar pta1 (/ pi 2) -4800))
- (setq ptc2 (polar pta1 (/ pi 2) -5200))
- ;文字输出
- (command "text" "S" "宋体" "J" "mc" "non" pta1 "300" "0" tcq_num)
- (command "text" "S" "宋体" "J" "mc" "non" pta2 "300" "0" xhs_num)
- (command "text" "S" "宋体" "J" "mc" "non" pta3 "300" "0" wg_num)
- (command "text" "S" "宋体" "J" "mc" "non" pta4 "300" "0" slzs_num)
- (command "text" "S" "宋体" "J" "mc" "non" pta5 "300" "0" xhf_num)
- (command "text" "S" "宋体" "J" "mc" "non" pta6 "300" "0" ssbjf_num)
- (command "text" "S" "宋体" "J" "mc" "non" pta7 "300" "0" 70if_num)
- (command "text" "S" "宋体" "J" "mc" "non" pta8 "300" "0" 280if_num)
-
- (command "text" "S" "宋体" "J" "mc" "non" ptb1 "300" "0" sgbj_num)
- (command "text" "S" "宋体" "J" "mc" "non" ptb2 "300" "0" sb_num)
- (command "text" "S" "宋体" "J" "mc" "non" ptb3 "300" "0" jlm_num)
- (command "text" "S" "宋体" "J" "mc" "non" ptb4 "300" "0" qyxs_num)
- (command "text" "S" "宋体" "J" "mc" "non" ptc1 "300" "0" xfdh_num)
- (command "text" "S" "宋体" "J" "mc" "non" ptc2 "300" "0" xfgb_num)
-
- (princ)
- )
|