乐筑天下

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

[编程交流] 层提示bef需要lisp

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:53:08 | 显示全部楼层
在命令行类型:
(命令“取消定义”“行”)
然后键入:
(defun c:LINE()(命令“layer”set“pause”“.LINE”))
这符合你的要求吗?
 
如果要返回原始行命令,请在命令行中键入以下内容:
(命令“redefine”“line”)
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 10:58:37 | 显示全部楼层
在他的两条相似的线索(同一个问题)之间,他应该有很多选择。现在由他来决定什么最适合他的需要,除非他另有要求。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 11:01:35 | 显示全部楼层
实际上,这不是“最佳”解决方案。问题是,不建议在反应堆回调中使用输入函数。原因是,当命令启动时,反应堆点火,但随后暂停,直到用户提供一些输入。一般来说,它“不应该”出现问题,但可能会引起诸如脚本或来自其他lisp函数的命令调用之类的问题。 
不幸的是,由于OP希望能够从列表中选择层,因此无法回避这个问题。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 11:05:30 | 显示全部楼层
 
 
我不认为我建议使用命令反应器是“最佳”解决方案(至少在本线程中不是这样)。
 
我的意思是我的发言相当字面;为了澄清。。。
 
 
 
根据调用的特定命令,您指定的三个反应器具有相同的回调函数(在我的代码中)。
 
 
 
我将全局变量与:vlr CommandWillStart一起使用,在将当前层更改为调用命令的预定义层(即_XREF command=XREF layer)之前存储当前层。一旦命令完成(或取消等),我的回调将恢复起始层(通过全局var),并将所述var重置为nil。
 
编辑:
此外,可以*潜在*使用ActiveX向用户提供选项列表,选择层,然后相应地设置层。。。都没有发出第二个命令,不是吗?
 
问题是有多少层可以用作选项,当然不是一个大的层列表的全部。也许定制DCL可以解决这个问题?(我认为这太过分了,但仍然如此)。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:08:27 | 显示全部楼层
这是我用的
 
  1. ;;--------------------=={ Layer Director }==------------------;;
  2. ;;                                                            ;;
  3. ;;  Uses a command reactor to automatically set the layer     ;;
  4. ;;  upon the user invoking certain commands.                  ;;
  5. ;;                                                            ;;
  6. ;;  Layer settings are stored in the list at the top of the   ;;
  7. ;;  program. The first entry in the list is the command on    ;;
  8. ;;  which the reactor will trigger, it may use wildcards.     ;;
  9. ;;  The second entry is the designated layer for the command  ;;
  10. ;;  entered, this layer will be created if non-existent.      ;;
  11. ;;  The third entry is the layer colour that will be used if  ;;
  12. ;;  the layer is to be created in the drawing.                ;;
  13. ;;                                                            ;;
  14. ;;  The Reactor is set to be enabled upon loading the program ;;
  15. ;;  it can furthermore be toggled on and off using by typing  ;;
  16. ;;  'LD' at the command line.                                 ;;
  17. ;;------------------------------------------------------------;;
  18. ;;  Author: Lee McDonnell, 2010                               ;;
  19. ;;                                                            ;;
  20. ;;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
  21. ;;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
  22. ;;------------------------------------------------------------;;
  23. (defun c:LD nil (LM:LayerDirector T))
  24. (defun LM:LayerDirector ( msg )
  25. (vl-load-com)
  26. ;; © Lee Mac 2010
  27. (setq *LayerData*
  28.   '(
  29.     ("*TEXT"           "TEXT"       2)
  30.     ("*DIM*,*QLEADER"  "DIMENSIONS" 2)
  31.     ("*VPORT*"         "DEFPOINTS"  7)
  32.     ("*EXECUTETOOL"    "4"          4)
  33.    )
  34. )      
  35. (
  36.    (lambda ( data callback1 callback2 / react )
  37.      (if
  38.        (setq react
  39.          (vl-some
  40.            (function
  41.              (lambda ( reactor )
  42.                (if (eq data (vlr-data reactor))
  43.                  reactor
  44.                )
  45.              )
  46.            )
  47.            (cdar (vlr-reactors :vlr-command-reactor))
  48.          )
  49.        )
  50.        (if (vlr-added-p react)
  51.          (vlr-remove react)
  52.          (vlr-add react)
  53.        )
  54.        (setq react
  55.          (vlr-command-reactor data
  56.            (list
  57.              (cons :vlr-commandWillStart callback1)
  58.              (cons :vlr-commandEnded     callback2)
  59.              (cons :vlr-commandCancelled callback2)
  60.            )
  61.          )
  62.        )
  63.      )
  64.      (if msg
  65.        (if (and react (vlr-added-p react))
  66.          (princ "\n<< Layer Director Enabled >>" )
  67.          (princ "\n<< Layer Director Disabled >>")
  68.        )
  69.      )
  70.    )
  71.    "LayerDirector"
  72.    'LayerDirectorSet
  73.    'LayerDirectorReset
  74. )
  75. (princ)
  76. )
  77. (defun LM:MakeLayer ( name colour )
  78. (or (tblsearch "LAYER" name)
  79.    (entmakex
  80.      (list
  81.        (cons 0   "LAYER")
  82.        (cons 100 "AcDbSymbolTableRecord")
  83.        (cons 100 "AcDbLayerTableRecord")
  84.        (cons 2   name)
  85.        (cons 62  colour)
  86.        (cons 70  0)
  87.      )
  88.    )
  89. )
  90. )
  91. (defun LayerDirectorSet ( reactor arguments / layerdetails layer )
  92. (vl-load-com)
  93. ;; © Lee Mac 2010
  94. (if
  95.    (and
  96.      (setq layerdetails
  97.        (vl-some
  98.          (function
  99.            (lambda ( x )
  100.              (if (wcmatch (strcase (car arguments)) (car x))
  101.                (cdr x)
  102.              )
  103.            )
  104.          )
  105.          *LayerData*
  106.        )
  107.      )
  108.      (LM:MakeLayer (setq layer (car layerdetails)) (cadr layerdetails))
  109.      (zerop
  110.        (logand 1
  111.          (cdr
  112.            (assoc 70
  113.              (tblsearch "LAYER" layer)
  114.            )
  115.          )
  116.        )
  117.      )
  118.    )
  119.    (progn
  120.      (setq *oldlayer* (getvar 'CLAYER))      
  121.      (setvar 'CLAYER layer)
  122.    )
  123. )
  124. (princ)
  125. )
  126. (defun LayerDirectorReset ( reactor arguments )
  127. (vl-load-com)
  128. ;; © Lee Mac 2010
  129. (if
  130.    (and (not (wcmatch (strcase (car arguments)) "*UNDO")) *oldlayer*
  131.      (tblsearch "LAYER" *oldlayer*)
  132.      (zerop
  133.        (logand 1
  134.          (cdr
  135.            (assoc 70
  136.              (tblsearch "LAYER" *oldlayer*)
  137.            )
  138.          )
  139.        )
  140.      )
  141.    )
  142.    (progn
  143.      (setvar 'CLAYER *oldlayer*)
  144.      (setq *oldlayer* nil)
  145.    )
  146. )
  147. (princ)
  148. )
  149. (princ)
  150. (LM:LayerDirector nil)
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 11:10:26 | 显示全部楼层
对不起,我不是想影射你的方法是错误的,也不是试图劝阻你(或任何其他人)使用这种特殊的方法。我只是想展示一些地方,在这种情况下,它可能会导致事情破裂。我的建议是,如果脚本/lisp/其他自定义项发出了命令,那么这个反应器不应该启动,否则它会有效地引入一个额外的提示(最好)或一个对话框(最坏),这会导致错误。一、 e.它至少需要检查CMDACTIVE sysvar的位代码4(脚本)和64(ObjectARX),尽管从AutoLisp检查时未设置位代码32(AutoLisp)。这就是我对多层选择的想法有点怀疑的地方。因此,您需要检查其他内容,或者需要通过其他Lisp/VBA/whatever手动禁用反应堆。
 
如果每个命令只有一个层,那么就不会有这个问题。就像李的密码一样,我也怀疑你的密码。我指的不是从反应堆回调中发出命令(这是由于可能的无限循环而产生的另一个麻烦),正如李的代码所示,你不需要这样做,也不应该这样做。
 
您还可以打开一个非模式对话框(DotNet或OpenDCL)来显示这些层选项。因此,该命令可以继续,而无需任何其他用户/脚本/lisp输入。在这种情况下,最好让对话框的操作修改任何新实体,而不是简单地设置当前层。我能看出人们怎么会真的这么做。
 
实现这一点的唯一其他方法是重新定义可疑命令,正如其他方法所示。尽管这样,您肯定需要其他lisp/script来使用。调用这些命令时使用前缀。您需要重新定义要检查的每个命令-可以通过单步遍历列表,生成未定义调用并将其定义为字符串,然后使用read&eval函数从该字符串重新定义命令来实现自动化。
 
实际上我应该说,没有“最佳”解决方案。他们都有问题,你需要决定哪些问题可以忍受。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 11:13:15 | 显示全部楼层
我在很多方面都同意你的观点,有一天,我可能会消化掉你分享的所有知识。
 
命令电抗器适用于特定序列(给定命令总是设置指定的层电流等)。
 
相反,我可能会考虑编写一组命令(或宏?)表示将绘制线的图层,例如:
 
  1. 4

 
 
键盘快捷键是我的首选方法,但为了完整起见,我加入了“全名”功能。
 
**注-不包括错误检查。
 
编辑:
也许还有更基本的东西:
 
  1. 5
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 11:17:47 | 显示全部楼层
这可能是“最安全”的方法。为了更容易完成:
现在,只需修改每个命令的前2个列表,不幸的是,没有为命令名进行通配符匹配。它为每个命令层组合创建一个命令。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 20:55 , Processed in 0.340443 second(s), 66 queries .

© 2020-2025 乐筑天下

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