neeboy 发表于 2022-7-6 10:16:36

层提示bef需要lisp

大家好:
 
我对自己感到恼火;有时我忘记更改当前图层设置,结果将图形元素放置在错误的图层上。所以。。。。我希望有一个LISP,它强制我在使用(例如)LINE命令时输入图层名;我会启动命令,然后ACAD会弹出提示,要求我输入图层名称。(我不打算每次都实际输入层名称,我有一个小的可编程键盘,我将设置为只需按一个按钮即可输入层名称)。这整件事听起来可能很愚蠢,但我只有大约6层要处理,所以听起来可能没那么费力。有人能帮我吗?谢谢

BIGAL 发表于 2022-7-6 10:21:49

你可以用很多方法来做,最简单的方法是在这里搜索“复制命令”,它允许你选择一个现有的对象,并使一个新的相同,但与所有的对象颜色层等。
 
或者,如果您希望在一个层上有一条线,并且只有6个层,那么一系列defuns将是最简单的L1 L2 etc C1 C2
 
(defun C:L1()(setvar“clayer”“layer1”)(命令行)
(defun C:C1()(setvar“clayer”“layer1”)(命令“Circle”))
 
或者用^c^c(setvar“clayer”“layer1”)行制作工具栏或菜单

neeboy 发表于 2022-7-6 10:25:55

感谢您的贡献;我想我肯定会将其用于其他事情,但我也想知道如何做我最初发布的事情,即调用命令(如LINE),然后询问用户层的名称。程序要求我输入信息的行为将有助于“激励我”做出正确的决定。

alanjt 发表于 2022-7-6 10:29:44

要么重新定义行命令,要么使用命令反应器。

BlackBox 发表于 2022-7-6 10:33:41

 
我个人使用一个命令反应器来执行命令,例如MVIEW和XATTACH等,一旦命令结束(或取消),它也会更改层。(感谢艾伦的建议!)

Michaels 发表于 2022-7-6 10:37:41

 
你能告诉我指挥反应堆是什么意思吗?
 
我的问候。

irneb 发表于 2022-7-6 10:39:37

是的,我也会走反应堆的路线。基本上,我有一个命令名的关联列表,以及允许它们的层。例如。
请注意多个命令名,如果需要,可以用逗号甚至通配符分隔,否则需要为具有相同层列表的每个命令提供重复的命令名。然后我有一个修改的assoc函数:
然后您将有几个vlr命令反应器(请参阅开发人员帮助)。用于:vlr命令willstart回调的一个包含了大部分代码。它将使用上面的assocwc函数检查传递的命令名,以获取包含允许的层名称的项。然后使用任意成员/vl位置与CLayer系统变量进行比较。如果未找到,则应将一些全局变量设置为CLayer的当前值。然后使用getstring函数要求用户输入层名称(如果列表中有多个层名称,则使用该层名称,因为它是唯一的选项),如果不存在,则创建该层名称,然后将clayer设置为该层名称。
 
所有:vlr commandend:vlr commandcancelled和:vlr CommandFailed回调可以是同一个函数。它所需要做的就是检查vlr命令willstart回调保存的全局变量是否有一些值,然后将CLayer设置为该值,并将全局var重置为nil。

BlackBox 发表于 2022-7-6 10:42:09

 
 
这正是我的命令反应器/回调所做的:眨眼:

jcap91163 发表于 2022-7-6 10:47:35


(defun C:PCOM ()
(setq e (car(entsel "Pick your command. "))
      e (entget e)
      lyr (cdr(assoc 8 e))
      lt (cdr(assoc 6 e))
      txts (cdr(assoc 7 e))
      blk (cdr(assoc 2 e))
      com (cdr(assoc 0 e)))
(command "layer" "s" lyr "")
(if (/= lt nil)
(command "linetype" "s" lt "")
(command "linetype" "s" "bylayer" ""))
(if (/= txts nil)
(command "style" txts "" "" "" "" "" "" ""))
(if (= com "TEXT") (setq com "DTEXT"))
(if (= com "LWPOLYLINE") (setq com "PLINE"))
(if (= com "LINE") (setq com "LINE"))
(if (= com "CIRCLE") (setq com "CIRCLE"))
(if (= com "INSERT")((setq comm com)(setq com "INSERT")
(command comm blk)))
(command com)
(prin1))

 
这个怎么样,我用它来写pcom,然后选择对象,它是一条线,它在创建所选对象的图层中激活line命令,它也适用于多段线、插入块、绘制圆、编写文本,希望它能帮助你。

VVA 发表于 2022-7-6 10:50:18

如果你从另一个角度来看这个问题
快速绘制-绘制类似对象
页: [1] 2
查看完整版本: 层提示bef需要lisp