标记变量问题
为什么这两个变量都不标?这是正确的术语吗?一、 E.图层名称和图层颜色
它将标记一个或另一个,但不是两个?
(vl-load-com)
(defun C:Test (/ nwent layername layercolor)
(setq nwent (entsel))
(if nwent
(progn
(setq nwen(car nwent))
(setq nwelist (entget nwen))
(setq layername (cdr (assoc 8 nwelist)))
(setq obj (vlax-ename->vla-object (car nwent)))
(setq layerinfo (tblsearch "layer" layername))
(setq layercolor (cdr (assoc 62 layerinfo)))
(setq Textloc (getpoint "Pick Label Location: "))
)
(alert "Nothing Selected")
)
(command "text" textloc "" "" layername layercolor)
(princ)
)
(strcat layername layercolor) 你能告诉我怎么用吗?我对编写lisp相当陌生 由于您还没有VL命令,因此不需要第一行。我还去掉了一个“”,因为在我的autocad版本中,它只要求点和旋转,我不确定其余的是什么。如果需要,您可以将其添加回。
(defun C:Test (/ nwent layername layercolor)
(setq nwent (entsel))
(if nwent
(progn
(setq nwen(car nwent))
(setq nwelist (entget nwen))
(setq layername (cdr (assoc 8 nwelist)))
(setq obj (vlax-ename->vla-object (car nwent)))
(setq layerinfo (tblsearch "layer" layername))
(setq layercolor (cdr (assoc 62 layerinfo)))
(setq Textloc (getpoint "Pick Label Location: "))
)
(alert "Nothing Selected")
)
(command "text" textloc "" (strcat layername " " (itoa layercolor)))
(princ)
) 如果你想让他们在不同的线路上,那么让我知道。这与代码略有不同。 我该如何将它们放在不同的行上? 另外,你能解释一下你做了什么吗?
我不明白
(itoa layercolor))) 通过Autolsp使用TEXT命令很容易导致不想要的结果
另一个考虑因素是Vanilla AutoLISP:
(defun c:lay-clr (/ en ss ed ln lc pt)
(while (not en)
(and (setq ss (ssget))
(= (sslength ss) 1)
(setq en (ssname ss 0))))
(setq ed (entget en)
ln (cdr (assoc 8 ed))
lc (cdr (assoc 62 (tblsearch "LAYER" ln))))
(initget 1)
(setq pt (getpoint "\nLabel Location: "))
(entmake (list (cons 0 "TEXT")
(cons 1 (strcat ln " " (itoa lc)))
(cons 6 "CONTINUOUS") ; (getvar "CELTYPE")
(cons 7 (getvar "TEXTSTYLE"))
(cons 8 (getvar "CLAYER"))
(cons 10 pt)
(cons 11 (list 0 0 0)) ;pt value if 72 or 73 not zero
(cons 39 (getvar "THICKNESS"))
(cons 40 (getvar "TEXTSIZE"))
(cons 41 1.0) ; X axis Scale
(cons 50 0.0) ; Text Angle
(cons 51 0.0) ; Oblique Angle
(cons 62 (cdr (assoc 62 (tblsearch "LAYER" (getvar "CLAYER")))))
(cons 71 0) ; Text Generation
(cons 72 0) ; Justification Flag
(cons 73 0) ; Justification Flag
(cons 210 (trans '(0 0 1) 0 1))))
(prin1))
(entmake)提供了对文本实体的完全控制/灵活性
ITOA将整数更改为字符串。大卫也是正确的,但最好是按他的方式去做。只是,如果你想要多行文字,我会使用多行文字。 (defun FormatColorName(col/)
(条件
((或(=列0)(=列“0”))“ByBlock”)
((或(=列1)(=列“1”))“1(红色)”)
((或(=第2列)(=第2列”)“2(黄色)”)
((或(=第3列)(=第3列”)“3(绿色)”)
((或(=第4列)(=第4列”)“4(青色)”)
((或(=第5列)(=第5列”)“5(蓝色)”)
((或(=第6列)(=第6列”)“6(洋红)”)
((或(=第7列)(=第7列”)“7(黑色/白色)”
((或(=第8列)(=第8列”)“8(D.Gray)”)
((或(=第9列)(=第9列”)“9(L.Gray)”)
((或(=第256列)(=第256列”)“ByLayer”)
(t列)))
如果您使用以下内容:
(setq layerinfo(tblsearch“layer”layername))
(setq layercolor(cdr(assoc 62 layerinfo)))
layercolor将是一个数字。然后,您可以将数字(整数)转换为字符串(ascii),从而实现itoa。如果你想要更可读的东西,你可以使用上面的代码,然后它看起来像:
(setq layercolor(FormatColorName(cdr(assoc 62 layerinfo)))
strcat函数可以将两个或多个文本粘合在一起(strcat“hel”“lo”)->“hello”
rlx公司
页:
[1]
2