lisp例程帮助
大家好我已经在这个lisp例程上工作了几个星期,每次我完成它,老板都会要求额外的功能。
这次我卡住了。
我附上了lisp文件的副本供您评论。
我现在不知道我改变了什么,原因是什么。
感谢您的帮助。
谢谢
清理-S1a。lsp 你好
您需要在以下代码之前添加cond函数:
((wcmatch ent_name "ROMANS") .....
然后,函数wcmatch的工作方式与程序中显示的if函数不同。
((wcmatch ent_name "ROMANS")
(setq ans "T")
(setq ans "F")......
因此,应该考虑最后一个表达式,即变量“ans”在任何情况下都不会等于“t”。 我只是盲目地修改了代码,并没有改变您编写代码的方式,以便您能够在以后需要时修改它,所以只需测试以下mod并让我知道;
(defun c:cleanup(/ col count ent ent_data ent_lay ent_name hgt1 len new_lay new_tstyle obj_lay ssetmtxt)
(if (setq ssetmtxt (ssget "_X" '((0 . "*TEXT"))))
(progn
(setq len (sslength ssetmtxt)
count 0)
(while (< count len)
(setq ent (ssname ssetmtxt count)
ent_data (entget ent)
ent_name (cdr (assoc 7 ent_data))
ent_lay(cdr (assoc 8 ent_data))
hgt1 (cdr (assoc 40 ent_data))
)
(cond
((wcmatch ent_name "ROMANS")
(setq new_tstyle
(cond ((vl-position hgt1 '(1.3 2.6 6.5 13.0 26.0 32.5 65.0 130.0)) "13-TEXT")
((vl-position hgt1 '(1.8 3.6 9.0 18.0 36.0 45.0 90.0 180.0)) "18-TEXT")
((vl-position hgt1 '(2.5 12.5 62.5 250.0)) "25-TEXT")
((vl-position hgt1 '(3.5 7.0 17.5 35.0 70.0 87.5 175.0 350.0)) "35-TEXT")
((vl-position hgt1 '(5.0 10.0 25.0 50.0 100.0 125.0 500.0)) "5-TEXT")
(t "7-TEXT")
)
))
((wcmatch ent_name "TXT-#,TXT-##")
(setq new_tstyle
(cons 7
(strcat (substr ent_name 5) "-TEXT")))
(setq obj_lay (strcat "TEXT-" (substr ent_name 5)))
(setq new_lay
(cons 8 (strcat "TEXT-" (substr ent_name 5))))
(cond
((= obj_lay "TEXT-13") (setq col 1))
((= obj_lay "TEXT-18") (setq col 7))
((= obj_lay "TEXT-25") (setq col 7))
((= obj_lay "TEXT-35") (setq col 2))
((= obj_lay "TEXT-5") (setq col 5))
((= obj_lay "TEXT-7") (setq col 6))
)
(or (tblsearch "LAYER" obj_lay)
(command "-Layer" "m" obj_lay "C" col "" "")
)
(vla-put-layer (vlax-ename->vla-object ent) obj_lay)
)
)
(entmod
(subst (cons 7 new_tstyle) (assoc 7 ent_data) ent_data))
(setq count (1+ count))
)
)
)
(princ)
)
(vl-load-com)
嗨Tharwat
谢谢你的回复。
我只需要编辑1到2行,现在可以了。
另一个问题,通过下面的cond语句,我试图匹配文本样式和文本高度。
我的问题是,不止一种样式可以具有相同的高度,正如下面的代码所示。
你能提供更好的编程方法吗?
所以我要做的是检查样式是否是罗马语,然后检查文本高度,这将确定要将obj更改为的新样式。
如果没有匹配项,则使用默认样式18-TEXT。
(cond
((wcmatch ent_name "ROMANS")
(setq new_tstyle
(cond ((vl-position hgt1 '(1.3 2.6 6.5 13.0 26.0 32.5 65.0 130.0)) "13-TEXT")
((vl-position hgt1 '(1.8 3.6 9.0 18.0 36.0 45.0 90.0 180.0)) "18-TEXT")
((vl-position hgt1 '(2.5 5.0 12.5 25.0 50.0 62.5 125.0 250.0)) "25-TEXT")
((vl-position hgt1 '(3.5 7.0 17.5 35.0 70.0 87.5 175.0 350.0)) "35-TEXT")
((vl-position hgt1 '(5.0 10.0 25.0 50.0 100.0 125.0 500.0)) "5-TEXT")
((vl-position hgt1 '(7.0 14.0 35.0 70.0 140.0 175.0 350.0 700.0)) "7-TEXT")
(t "18-TEXT")
)
))
玩一玩:
(cond
((wcmatch ent_name "ROMANS")
(if (not (vl-some '(lambda (_h _s) (and (vl-position hgt1 _l) (setq new_tstyle _s)))
'((1.3 2.6 6.5 13.0 26.0 32.5 65.0 130.0)
(1.8 3.6 9.0 18.0 36.0 45.0 90.0 180.0)
(2.5 5.0 12.5 25.0 50.0 62.5 125.0 250.0)
(3.5 7.0 17.5 35.0 70.0 87.5 175.0 350.0)
(5.0 10.0 25.0 50.0 100.0 125.0 500.0)
(7.0 14.0 35.0 70.0 140.0 175.0 350.0 700.0)
)
'("13-TEXT" "18-TEXT" "25-TEXT" "35-TEXT" "5-TEXT" "7-TEXT")))
(setq new_tstyle "18-TEXT")
)
)
)
页:
[1]