uuoo10levi 发表于 2022-7-6 07:10:34

我想改变a层

我已经为我工作的公司创建了一个lisp,它创建了我们的自定义领导,并将添加文本。它工作得很好,我只需要它改变层,线被绘制到某个层,不管当前层是什么,当然文本也在不同的层上。谢谢,我的学校教育在lisping部分没有涵盖这一点。

Tharwat 发表于 2022-7-6 07:17:56

这很容易,所以试着自己做吧。
 
-创建对象的选择集
-迭代选择集中的每个对象
-使用以下行更改当前图形中存在的图层名称,如下所示。
*(entmod(subst(cons 8“LayerName”)(assoc 8(setq elist(entget)))elist))

uuoo10levi 发表于 2022-7-6 07:24:56

好的,我为对象创建了选择集,但我在迭代选择集中的每个对象时都迷失了方向。

Tharwat 发表于 2022-7-6 07:30:13

 

(repeat (setq qty (sslength Selectionset))
(setq ssn (ssname Selectionset (setq qty (1- qty))))
;;; and so on ......
;;; ......
)

Tharwat 发表于 2022-7-6 07:33:24

你一定对编写代码不感兴趣,无论如何,看看这个。
 

(defun c:obj2Layer (/ l ss qty e)
(if
   (and (or (/= "" (setq l (getstring t "\n Enter name of layer :")))
            (/= l nil)
      )
      (if (not (tblsearch "LAYER" l))
          (progn
            (alert "Layer name is not existed !!")
            nil
          )
          t
      )
      (progn
          (prompt "\n Select objects to change their layer name ")
          (setq ss (ssget "_:L"))
      )
   )
    (repeat (setq qty (sslength ss))
      (setq e (entget (ssname ss (setq qty (1- qty)))))
      (entmod (subst (cons 8 l) (assoc 8 e) e))
    )
)
(princ)
)

BIGAL 发表于 2022-7-6 07:39:51

存在最简单的层
 
(setq oldlay (getvar "clayer"))
(setvar "clayer" mylayer)
.do stuff
(setvar "clayer" oldlay)

 
不确定引线是否可以有一行一层文字?我来看看

ksperopoulos 发表于 2022-7-6 07:47:30

难道你不能用一个属性创建一个块,这个属性已经在你想要文本所在的层上了吗。然后可以使用该块创建多重引线样式。完成后,可以将此多重引线样式放在工具选项板中。从那里可以控制引线插入的图层。只是一个想法。

pBe 发表于 2022-7-6 07:52:11

 
就像比格尔建议的那样,在“创建”行和“文本”之前,将所需层设置为当前层,只需记住在代码中包含一个错误函数。
 

 
使用tharwat的方法在最后创建的实体上强制执行entmod。这种方法的一个优点是,您不必担心目标层是否存在。
entmod将在实体上指定层,无论该层是否存在。
 
(defun c:demo()
   (command "_line" pause pause "")
   (entmod (subst '(8 . "banana")
                  (assoc 8 (setq l (entget (entlast))))
                  l))
   (princ))

Tharwat 发表于 2022-7-6 07:55:44

 
我是否误读了OP的请求,或者其他人是否偏离了这一点?

pBe 发表于 2022-7-6 08:03:43

 
OP希望确保通过lisp代码(由OP)创建的实体落入特定层(me认为)
 
页: [1] 2
查看完整版本: 我想改变a层