Hutter7405 发表于 2022-7-6 06:56:20

救命啊!我真的很接近XL码

因此,在互联网的帮助下,我创建了一个XLine函数,当我键入XV或XH时,它会在Defpoints层上放置一条垂直或水平XLine,然后自动切换回XH/XV函数之前的层。
 
问题是,当我放置第一条XLine时,当我放置第二条XLine时,函数完成了它的工作,并返回到我之前所在的层。如何使函数保持在Defpoints上,直到你点击ESC,然后它返回到原始层?
 
谢谢
 
到目前为止我拥有的
 
(defun c: xv()(command "._xline" "_v")(princ))
(defun c: xh()(command "._xline" "_h")(princ))


(defun c: xh (/ p1 p2)
(setq cl (getvar "clayer"))
(command "-layer" "s" "defpoints" "")
(command "xline""_h")(princ)
(setvar "clayer" cl)
);defun


(defun c: xv (/ p1 p2)
(setq cl (getvar "clayer"))
(command "-layer" "s" "defpoints" "")
(command "xline""_v")(princ)
(setvar "clayer" cl)
);defun

SLW210 发表于 2022-7-6 07:32:36

请阅读代码发布指南并编辑您的帖子,将您的代码包含在代码标签中。

Lee Mac 发表于 2022-7-6 07:53:44

这是一个正确的方向:
 
(defun c:xh ( / cl )
   (setq cl (getvar 'clayer))
   (command "_.-layer" "_M" "defpoints" "" "_.xline" "_H")
   (while (< 0 (getvar 'cmdactive)) (vl-cmdf "\\"))
   (setvar 'clayer cl)
   (princ)
)

togores 发表于 2022-7-6 08:00:04

如果您创建XLINE而不是编写命令脚本,那么您的问题就不会存在。使用entmake创建实体,只需将组码8指定为“defpoints”,这就是创建层并将实体放置在该层中所需的全部内容。
我引用了我的书AutoCAD专家的Visual LISP:
使用entmake,您可以编写如下命令:
考虑到XLINE的组码10应该在WCS中,应该修改我之前发布的这个函数。
如果UCS与WCS不一致,则应考虑这一点。
此外,为了再现实际的连接线行为,方向向量还应取决于当前UCS,可以从UCSXDIR和UCSYDIR系统变量中获得。
代码应该是这样的:
更多信息请访问我的博客:lispexpert。blogspot。通用域名格式
页: [1]
查看完整版本: 救命啊!我真的很接近XL码