乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 19|回复: 19

[编程交流] 层帮助,请

[复制链接]

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-6 14:24:58 | 显示全部楼层 |阅读模式
昨天在搜索该网站时,偶然发现了CAB编写的一篇很好的教程:http://www.cadtutor.net/forum/showthread.php?t=27101
因此,我正在尝试在当前LISP例程中使用COND命令。
 
这第一次尝试是初步的,但它很有效(有点),所以如果有人愿意提示我正确的方向。
我尝试了AutoCAD帮助,但它不是为业余爱好者(我)编写的,也找不到任何关于这个主题的现有线程,但我相信我在不久的过去至少见过一个。
无论如何,如果某一层是可见的,我需要做一些事情。
我从下面的代码开始,发现了即时满足感,但很快发现我需要使用的一些后续例程会导致当前层发生变化,因此,除了短短几秒钟外,该方法不会起作用。
 
 
  1. (COND
  2.        ((= (getvar "CLAYER") "ITCH")  ; if ITCH layer is the current layer
  3.        (c:ScratchAnItch)  ; run the ScratchAnItch program
  4.        )
  5. And etc, so forth and “But wait there’s more!”
  6. (There are four more conditionals for other things)
  7. )

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

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:30:26 | 显示全部楼层
看见http://www.cadtutor.net/forum/showthread.php?t=36938
回复

使用道具 举报

15

主题

209

帖子

121

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 14:32:38 | 显示全部楼层
你想看看他们是否被冻住了吗?如果是这样,请看这些:
 
  1. (setq Frozen (assoc 70 (entget (tblobjname "LAYER" <your layer here>)))); 0 = Thawed 1 = Froze
  2. (setq Off (assoc 62  (entget (tblobjname "LAYER" <your layer here>)))); - number is off + number is on
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-6 14:35:15 | 显示全部楼层
 
 
不试图设置或维护图层;我能做到。我似乎找不到的是一种用LISP检查图层是否打开的方法。
 
--
查看图层是否打开
如果是这样,做下一步
--
 
一定有办法的。我看起来太难了吗?答案这么简单,我错过了吗?
 
史蒂夫
.
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:40:13 | 显示全部楼层
好的,看看我在这段代码中的注释。。。这应该会给你一个想法。
 
  1. (defun c:laysw (/ lay1 lay2)
  2. (vl-load-com); loads vl commands
  3. (setq lay1 (tblobjname "LAYER" "APPROVED")); checks to see if the layers exists "approved" being the layer name
  4. (setq lay1 (vlax-ename->vla-object lay1)); sets the layer to a vla object
  5. (eq :vlax-true (vla-get-layeron lay1)); this checks to see if it's on
  6.       
  7. (vla-put-layeron lay1 :vlax-false); this turns off the layer
  8.             
  9. (vla-put-layeron lay1 :vlax-true); this turns on the layer
  10. (princ))

 
希望这能有所帮助
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 14:41:57 | 显示全部楼层
Steve,这将测试开/关状态
  1. ;;;  Returns T if On. nill if OFF or not found
  2. (defun islayeron (lname / entlst)
  3. (and (= (type lname) 'str)
  4.       (setq entlst (tblsearch "layer" lname))
  5.       (null (minusp (cdr (assoc 62 entlst))))
  6. )
  7. ) ; end defun
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-6 14:45:23 | 显示全部楼层
感谢大家的帮助和投入。
我可以看出这比我准备的要复杂得多,所以下周我将在工作中对它们进行测试,看看是否可以实现其中一个。
 
再次感谢,
史蒂夫
.
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-6 14:49:00 | 显示全部楼层
Yee Ha!!!
使用buncha IF语句可以完美地工作。
我相信有更好的方法可以做到这一点,但就目前而言,我很容易遵循逻辑。
这有助于减少我在学习LISP时的沮丧程度。
下面是它的外观:
 
 
  1. (defun c:TEST ()
  2. (if (> (cdr (assoc 62 (entget (tblobjname "layer" "TEXT")))) 0);If TEXT layer is on,
  3.       (c:LISProutine1); run routine 1
  4. );endif 1
  5. (if (> (cdr (assoc 62 (entget (tblobjname "layer" "FIND")))) 0);If FIND layer is on,
  6.       (c:LISProutine2); run routine 2
  7. );endif 2
  8. (if (and (< (cdr (assoc 62 (entget (tblobjname "layer" "TEXT")))) 0);If TEXT layer is off *AND*
  9.         (< (cdr (assoc 62 (entget (tblobjname "layer" "FIND")))) 0));if FIND layer is off,
  10.         (c:LISProutine3); run routine 3
  11. );endif 3
  12. (PRINC)
  13. )

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:52:02 | 显示全部楼层
干得好,史蒂夫-祝贺你Lisp程序
 
只是一个快速指针-对于多个选项-COND函数更快、更简洁
 
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-6 14:55:43 | 显示全部楼层
谢谢你,李。
 
这是下一步。
看起来不太难,我刚开始很容易。
 
史蒂夫
.
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 00:51 , Processed in 0.430248 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表