jonathann3891 发表于 2022-7-5 19:39:02

标记变量问题

为什么这两个变量都不标?这是正确的术语吗?
一、 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)
)

rlx 发表于 2022-7-5 19:47:49

(strcat layername layercolor)

jonathann3891 发表于 2022-7-5 19:50:50

你能告诉我怎么用吗?我对编写lisp相当陌生

Commandobill 发表于 2022-7-5 19:56:37

由于您还没有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)
)

Commandobill 发表于 2022-7-5 19:59:47

如果你想让他们在不同的线路上,那么让我知道。这与代码略有不同。

jonathann3891 发表于 2022-7-5 20:07:44

我该如何将它们放在不同的行上?

jonathann3891 发表于 2022-7-5 20:13:15

另外,你能解释一下你做了什么吗?
 
 
我不明白
(itoa layercolor)))

David Bethel 发表于 2022-7-5 20:18:11

通过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)提供了对文本实体的完全控制/灵活性

Commandobill 发表于 2022-7-5 20:23:53

 
ITOA将整数更改为字符串。大卫也是正确的,但最好是按他的方式去做。只是,如果你想要多行文字,我会使用多行文字。

rlx 发表于 2022-7-5 20:25:34

(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
查看完整版本: 标记变量问题