StevJ 发表于 2022-7-6 14:24:58

层帮助,请

昨天在搜索该网站时,偶然发现了CAB编写的一篇很好的教程:http://www.cadtutor.net/forum/showthread.php?t=27101
因此,我正在尝试在当前LISP例程中使用COND命令。
 
这第一次尝试是初步的,但它很有效(有点),所以如果有人愿意提示我正确的方向。
我尝试了AutoCAD帮助,但它不是为业余爱好者(我)编写的,也找不到任何关于这个主题的现有线程,但我相信我在不久的过去至少见过一个。
无论如何,如果某一层是可见的,我需要做一些事情。
我从下面的代码开始,发现了即时满足感,但很快发现我需要使用的一些后续例程会导致当前层发生变化,因此,除了短短几秒钟外,该方法不会起作用。
 
 

(COND
       ((= (getvar "CLAYER") "ITCH"); if ITCH layer is the current layer
       (c:ScratchAnItch); run the ScratchAnItch program
       )

And etc, so forth and “But wait there’s more!”
(There are four more conditionals for other things)

)

 
即使后续例程更改当前层,瘙痒层在整个过程中保持不变。
我似乎找不到的是变量或LISP方法来识别层是否打开,因此我可以使用“如果瘙痒可见,请抓挠它”
 
史蒂夫
.

Commandobill 发表于 2022-7-6 14:30:26

看见http://www.cadtutor.net/forum/showthread.php?t=36938

TimSpangler 发表于 2022-7-6 14:32:38

你想看看他们是否被冻住了吗?如果是这样,请看这些:
 

(setq Frozen (assoc 70 (entget (tblobjname "LAYER" <your layer here>)))); 0 = Thawed 1 = Froze
(setq Off (assoc 62(entget (tblobjname "LAYER" <your layer here>)))); - number is off + number is on

StevJ 发表于 2022-7-6 14:35:15

 
 
不试图设置或维护图层;我能做到。我似乎找不到的是一种用LISP检查图层是否打开的方法。
 
--
查看图层是否打开
如果是这样,做下一步
--
 
一定有办法的。我看起来太难了吗?答案这么简单,我错过了吗?
 
史蒂夫
.

Commandobill 发表于 2022-7-6 14:40:13

好的,看看我在这段代码中的注释。。。这应该会给你一个想法。
 

(defun c:laysw (/ lay1 lay2)
(vl-load-com); loads vl commands

(setq lay1 (tblobjname "LAYER" "APPROVED")); checks to see if the layers exists "approved" being the layer name

(setq lay1 (vlax-ename->vla-object lay1)); sets the layer to a vla object

(eq :vlax-true (vla-get-layeron lay1)); this checks to see if it's on
      
(vla-put-layeron lay1 :vlax-false); this turns off the layer
            
(vla-put-layeron lay1 :vlax-true); this turns on the layer

(princ))

 
希望这能有所帮助

CAB 发表于 2022-7-6 14:41:57

Steve,这将测试开/关状态
;;;Returns T if On. nill if OFF or not found
(defun islayeron (lname / entlst)
(and (= (type lname) 'str)
      (setq entlst (tblsearch "layer" lname))
      (null (minusp (cdr (assoc 62 entlst))))
)
) ; end defun

StevJ 发表于 2022-7-6 14:45:23

感谢大家的帮助和投入。
我可以看出这比我准备的要复杂得多,所以下周我将在工作中对它们进行测试,看看是否可以实现其中一个。
 
再次感谢,
史蒂夫
.

StevJ 发表于 2022-7-6 14:49:00

Yee Ha!!!
使用buncha IF语句可以完美地工作。
我相信有更好的方法可以做到这一点,但就目前而言,我很容易遵循逻辑。
这有助于减少我在学习LISP时的沮丧程度。
下面是它的外观:
 
 

(defun c:TEST ()

(if (> (cdr (assoc 62 (entget (tblobjname "layer" "TEXT")))) 0);If TEXT layer is on,
      (c:LISProutine1); run routine 1
);endif 1

(if (> (cdr (assoc 62 (entget (tblobjname "layer" "FIND")))) 0);If FIND layer is on,
      (c:LISProutine2); run routine 2
);endif 2

(if (and (< (cdr (assoc 62 (entget (tblobjname "layer" "TEXT")))) 0);If TEXT layer is off *AND*
      (< (cdr (assoc 62 (entget (tblobjname "layer" "FIND")))) 0));if FIND layer is off,
      (c:LISProutine3); run routine 3
);endif 3

(PRINC)
)

谢谢你们所有有用的想法,伙计们。
史蒂夫
.

Lee Mac 发表于 2022-7-6 14:52:02

干得好,史蒂夫-祝贺你Lisp程序
 
只是一个快速指针-对于多个选项-COND函数更快、更简洁
 

StevJ 发表于 2022-7-6 14:55:43

谢谢你,李。
 
这是下一步。
看起来不太难,我刚开始很容易。
 
史蒂夫
.
页: [1] 2
查看完整版本: 层帮助,请