Grigs 发表于 2022-7-6 08:21:56

这能做到吗?有点疯狂

目前我有10个lisp例程名P1,P2。。。,他们创建了一条宽度与相应数字匹配的线。P1生成一条1“宽的多段线,P2生成一条2”的多段线,等等。是否可以创建一个通用的“P”命令,该命令将传递用户在“P”之后输入的数值,并创建一条具有该宽度的多段线?例如,在P2.5中输入将创建一条2.5“宽的多段线。可行吗?

pBe 发表于 2022-7-6 08:28:27

(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")
   )

Lee Mac 发表于 2022-7-6 08:35:22

这里有一个黑客使用命令反应器和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)

 
当做
米尔恰

MSasu 发表于 2022-7-6 08:41:58

 
谢谢Mircea这是个好主意

Lee Mac 发表于 2022-7-6 08:48:35

如果只使用一个子例程,而不是为每个P*调用创建一个命令,不是更容易、更省力吗?
 
如。
(< 0 (setq pw (/ (fix pw) 100.0)))

P35    -->   0.35
P245   -->   2.45

alanjt 发表于 2022-7-6 08:52:36

这是另一种选择,但我不希望反应堆点火,“未知命令”消息打印得比需要的多,因此一旦命令被定义,反应堆就停止为该命令点火。

Lee Mac 发表于 2022-7-6 08:55:10

嗯,美学被高估了。
 
 
现在我想起来了,有没有一条关于偏移量的类似的长线程?

alanjt 发表于 2022-7-6 09:01:26

 
我有一个类似的想法,但无法快速识别线程,所以我回去工作-我认为这是一个AUGI线程,Irneb测试了这个假设。也许我在想另一条线索。
 
编辑-此外,我们不应该避免从命令反应器的回调中调用命令吗?

BlackBox 发表于 2022-7-6 09:05:59

不,它在这里,有很多火焰。

alanjt 发表于 2022-7-6 09:12:22

 
 
干得好:http://www.cadtutor.net/forum/showthread.php?53630-偏移Lisp
 
编辑-我最喜欢的新照片之一:
 
http://t1.gstatic.com/images?q=tbn:ANd9GcQPPHh_z8UEIHqSDTVP0QgfMz2sjG9pTaidMQrIaIeQD-bQoukskA
页: [1] 2
查看完整版本: 这能做到吗?有点疯狂