层帮助,请
昨天在搜索该网站时,偶然发现了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方法来识别层是否打开,因此我可以使用“如果瘙痒可见,请抓挠它”
史蒂夫
. 看见http://www.cadtutor.net/forum/showthread.php?t=36938 你想看看他们是否被冻住了吗?如果是这样,请看这些:
(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
不试图设置或维护图层;我能做到。我似乎找不到的是一种用LISP检查图层是否打开的方法。
--
查看图层是否打开
如果是这样,做下一步
--
一定有办法的。我看起来太难了吗?答案这么简单,我错过了吗?
史蒂夫
. 好的,看看我在这段代码中的注释。。。这应该会给你一个想法。
(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))
希望这能有所帮助 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 感谢大家的帮助和投入。
我可以看出这比我准备的要复杂得多,所以下周我将在工作中对它们进行测试,看看是否可以实现其中一个。
再次感谢,
史蒂夫
. 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)
)
谢谢你们所有有用的想法,伙计们。
史蒂夫
. 干得好,史蒂夫-祝贺你Lisp程序
只是一个快速指针-对于多个选项-COND函数更快、更简洁
李 谢谢你,李。
这是下一步。
看起来不太难,我刚开始很容易。
史蒂夫
.
页:
[1]
2