这能做到吗?有点疯狂
目前我有10个lisp例程名P1,P2。。。,他们创建了一条宽度与相应数字匹配的线。P1生成一条1“宽的多段线,P2生成一条2”的多段线,等等。是否可以创建一个通用的“P”命令,该命令将传递用户在“P”之后输入的数值,并创建一条具有该宽度的多段线?例如,在P2.5中输入将创建一条2.5“宽的多段线。可行吗? (defun c:pg nil(if (not width)
(setq width 1.00))
(setq width (cond
((getreal
(strcat "\nEnter Width <"
(rtos width 2 2)
">: ")))
(width)))
(setvar 'Plinewid width)
(command "_pline")
) 这里有一个黑客使用命令反应器和Windows脚本主机(WSH)来演示,是的,这是可能的:
(vl-load-com)
(if (null *command-reactor*)
(setq *command-reactor* (vlr-command-reactor nil '((:vlr-unknowncommand . callback))))
)
(defun callback ( reactor params / pw )
(if
(and
(wcmatch (setq params (strcase (car params))) "P#*")
(setq pw (distof (substr params 2)))
(< 0 (setq pw (fix pw)))
)
(progn
(eval
(list 'defun
(read (strcat "C:P" (itoa pw)))
'( / pw )
'(setq pw (getvar "PLINEWID"))
(list 'setvar "PLINEWID" pw)
'(command "_.pline")
'(while (= 1 (logand 1 (getvar "CMDACTIVE"))) (command pause))
'(setvar "PLINEWID" pw)
'(princ)
)
)
(LM:SendKeys (strcat "P" (itoa pw) "~"))
)
)
(princ)
)
;; Send Keys-Lee Mac
;; A wrapper function for the SendKeys method of the WSH
(defun LM:SendKeys ( keys / wsh )
(setq wsh (vlax-create-object "WScript.Shell"))
(vl-catch-all-apply 'vlax-invoke (list wsh 'sendkeys keys))
(vlax-release-object wsh)
(princ)
)
(princ)
当做
米尔恰
谢谢Mircea这是个好主意 如果只使用一个子例程,而不是为每个P*调用创建一个命令,不是更容易、更省力吗?
如。
(< 0 (setq pw (/ (fix pw) 100.0)))
P35 --> 0.35
P245 --> 2.45 这是另一种选择,但我不希望反应堆点火,“未知命令”消息打印得比需要的多,因此一旦命令被定义,反应堆就停止为该命令点火。 嗯,美学被高估了。
现在我想起来了,有没有一条关于偏移量的类似的长线程?
我有一个类似的想法,但无法快速识别线程,所以我回去工作-我认为这是一个AUGI线程,Irneb测试了这个假设。也许我在想另一条线索。
编辑-此外,我们不应该避免从命令反应器的回调中调用命令吗? 不,它在这里,有很多火焰。
干得好:http://www.cadtutor.net/forum/showthread.php?53630-偏移Lisp
编辑-我最喜欢的新照片之一:
http://t1.gstatic.com/images?q=tbn:ANd9GcQPPHh_z8UEIHqSDTVP0QgfMz2sjG9pTaidMQrIaIeQD-bQoukskA
页:
[1]
2