azbk00 发表于 2015-11-9 11:24:06

关于pause的关键字请教

本帖最后由 azbk00 于 2015-11-9 11:27 编辑

我有这样一句代码(vl-cmdf "copy" ss "" "non" pt pause),其中pause是要求用户输入一个点。
我本来想在这句代码之前插入“关键字D”,即如果我输入的不是点,而是输入字母D的话,程序就会执行我的另一端代码。
于是我就写成了
(initget "D")
(vl-cmdf "copy" ss "" "non" pt pause)
(if(= pause "D")(vl-cmdf "copy" ss "" "non" pt (HH:RectangCen (car (entsel)))))
其中(HH:RectangCen (car (entsel)))论坛找来的是获取矩形中心点的子函数。
但好像这个“pause”是不能被D给赋值的,代码在执行到pause要我输入点的时候,我输入D,程序还是会提示我“需要点或选项关键字”。
后来我又无奈改成了
(initget "D")
(setq p1(getpoint))
(if(= p1 "D")
(vl-cmdf "copy" ss "" "non" pt (HH:RectangCen (car (entsel))))
(vl-cmdf "copy" ss "" "non" pt p1)
)
但是这样有个不好的地方,就是在命令中选定p1点时不会有实时拖动复制对象的轨迹,这个好像牵扯到反应器,我还是新手,暂时没学到这块。
所以还是想从之前的思路进行改写
(initget "D")
(vl-cmdf "copy" ss "" "non" pt pause)
(if(= pause "D")(vl-cmdf "copy" ss "" "non" pt (HH:RectangCen (car (entsel)))))
不知道这种错误的写法要怎么改才行呢?


masterlong 发表于 2015-11-9 20:11:55

仅靠lisp是不可能的
高飞鸟的动态函数库可以解决你的问题
自己搜一下

他的函数在2004下有些小问题
其它版本没试过
可以搜一下我最近1年内的帖子

guosheyang 发表于 2023-11-9 16:24:41

复制时 动态移动中捕捉矩形的几何中心 不行吗?为何要弄那么复杂?

llsheng_73 发表于 2015-11-9 22:08:17

(setq ss(ssget)p(getpoint))
(while(and(not(equal'(2 68)(setq a(grread 2))))(/=(car a)3)));;(chr 68)=="D"
(vl-cmdf"copy"ss"""non"p(if(equal'(2 68)a)(getpoint"目标点")pause))

应该还是不能达到你的要求,你可以试下,如果觉得差不太多可以自己改下,如果差太多不用这样研究了

namezg 发表于 2015-11-10 00:21:02

本帖最后由 namezg 于 2015-11-10 00:22 编辑

变通一下
(defun c:test (\ en ss pt)
      (print "\n请选择要复制的对象: ")
      (setq ss (ssget))
      (setq pt (getpoint "\n请指定第一点: "))
      (if (setq en (car (entsel "\n选择对象以其中心点作为第二点<指定第二点>: ")))
                (vl-cmdf "copy" ss "" "non" pt (HH:RectangCen en))
                (vl-cmdf "copy" ss "" "non" pt (getpoint "\n请指定第二点: "))
      )
)

masterlong 发表于 2015-11-10 01:29:08

楼上两位没看明白吗
楼主需要的是在拖动的过程中
可以接受鼠标取点或自定义参数
取点不是问题
自定义参数也不是问题
问题在于必须是拖动
除了高飞鸟的动态函数外
还可以试试express工具里提供的动态函数
这个功能弱一点但是兼容性好

ll_j 发表于 2015-11-10 10:21:18

看看联机帮助怎样说(AutoLisp R14帮助中关于command函数):

azbk00 发表于 2015-11-10 11:07:11

辛苦楼上几位了,虽然llsheng_73和namezg都热心地给了代码,但说实话效果还是不理想。看到ll_j的贴图我算是死心了,我回头好好研究下masterlong的建议,学习下高飞鸟的动态函数库,在此对如此热心的各位一并表示感谢了!

masterlong 发表于 2015-11-10 12:00:28

如果你只需要在平移拖动中使用到自定义参数
那还是优先试试express的函数

azbk00 发表于 2015-11-10 12:53:02

masterlong 发表于 2015-11-10 12:00 static/image/common/back.gif
如果你只需要在平移拖动中使用到自定义参数
那还是优先试试express的函数

express函数我之前也尝试用过,不过好像会提示未知命令,而且我用vlax-add-cmd添加命令好像也无效,比如说(command "flatten")
不知道该怎么引用啊?

ll_j 发表于 2015-11-10 15:51:14

azbk00 发表于 2015-11-10 12:53 static/image/common/back.gif
express函数我之前也尝试用过,不过好像会提示未知命令,而且我用vlax-add-cmd添加命令好像也无效,比如说 ...

ET的函数详解也没见过,论坛里也有人零零星星贴过一些,也都不全,多数也是自己“试验”出来的,所以想用也基本靠自己。
ET的函数部分是在Lisp文件,多数是在arx和编译的fas中定义的,在Lsp文件中定义的还可以打开文件看看,比如你提到的faltten,就是在flatten.lsp和flattensup.lsp这两个文件中定义的(需要说一下,ET中的函数基本都不是使用command加载的,而是使用函数调用的方法加载的)。如果对这个有兴趣,不妨经常有选择地打开ET目录下的Lsp文件看看,多少是会有点收获的(首先建议好读书不求甚解,目的明确再单独仔细研究)。
arx和fas文件定义的函数是无法打开看的,不过在acetauto.lsp中有部分函数的加载文件和加载方法,谁没有明确注解,但也能为研究提供点捷径。一部分函数会出现在其他的lsp文件中,遇到也可留意其用法。
好久不写程序了,只能为你提这些建议,希望有用。
页: [1] 2
查看完整版本: 关于pause的关键字请教