Tharwat 发表于 2022-7-5 18:52:07

好的,换成这个:
 

(setq tObj (mk_txt
                (setq p (polar iPt (+ lAng (/ pi 2.)) (* oFac tSze)))
                (vla-get-Layer (vlax-ename->vla-object ent))
            )
       )

最后,添加要本地化的变量,如下所示:
 
(defun c:LBLL (/ *error* mk_txt DOC ENT I IPT LANG OFAC P SPC SS TOBJ TSZE UFLAG lay)

Cylis0509 发表于 2022-7-5 18:55:19

像做梦一样工作!!非常感谢!不是为了给我带来好运,而是。。。
 
有没有两行或多行文字?

Tharwat 发表于 2022-7-5 18:59:48

真为你高兴。
 
 
当然,只需在字符之前添加\\P,您就可以在新行中获取字符。

Cylis0509 发表于 2022-7-5 19:02:36

好的,太好了。太谢谢你了Tharwat!
 
这可能再次给我带来好运。如果我问的问题太多,请告诉我。
 
这应该是最后一个了。我希望LISP在选择文字高度后从该点循环。因此,他们先选择对象,然后选择标签位置,命令继续询问下一个对象,然后选择标签位置。while语句在哪里开始和结束?

Tharwat 发表于 2022-7-5 19:06:26

我不太清楚你最后的要求。

Cylis0509 发表于 2022-7-5 19:09:26

 
我很抱歉。。。
 
当前,该例程在标记一条多段线后停止,用户必须再次初始化命令,再次选择文本高度,然后选择另一条多段线。
 
我希望该命令继续执行,直到用户退出。放置第一个标签后,它返回并要求下一条多段线进行标记,并指向放置标签,依此类推。这样他们可以一个接一个地走。选择“拾取标签位置”,然后选择“拾取标签位置”。
 
我希望这有意义。
 

Cylis0509 发表于 2022-7-5 19:11:50

 
嘿,这似乎不起作用。
 
(strcat“Lot”(substr lay 9)\\ PBlock(substr lay 5 3))
 
结果:标段1-298
 
我也尝试过:
 
(strcat“Lot”(substr lay 9)“\\P”“Block”(substr lay 5 3)
 
结果:相同。
 
我尝试了所有组合。似乎无法让它工作。我知道这很简单,但是。。。

BIGAL 发表于 2022-7-5 19:16:23

为了重复,请考虑将While更改为在过程中更高的位置,您可能会更好地将While与entsel一起使用,而不是ssget,因为您一次只看一个对象。搜索这里有一个质心lisp的GP,它做什么你想要的。
 
<p>; something like this pick nothing to exit.</p><p>(while (setq obj (entsel "pick line arc pline etc or nothing <exit>"))</exit></p><p>(setq layname (vla-get-layer (vlax-ename->vla-object (car obj)))</p><p>....check valid object</p><p>.....</p><p>) ;endwhile</p>

Tharwat 发表于 2022-7-5 19:21:07

试试这个:
 
7
页: 1 [2]
查看完整版本: 图层名称到文字