caocaosasd 发表于 2021-6-14 11:55:45

新手求教,请问如何做到按一下a就直接执行某命令,不需要回车

比如我有个操作是按一下a就让刚才画的直线偏移50,再按a回到原位置,应该怎么操作呀……
我自己写出来的是,按一下a还要回车一下,才执行,用起来很不流畅

start4444 发表于 2021-6-14 13:39:51

码发上来看看

caocaosasd 发表于 2021-6-14 14:15:03

start4444 发表于 2021-6-14 13:39
码发上来看看

       
前面的操作是画线。顺便我还没有想好再按a就移动回初始位置该怎么弄
(setq shuru (getstring "\n输入左中右 a左/b中/c右"))
        (cond
          ((= shuru "a")
          
           (command "move" ENT13 ENT24 ZX "" PT1Pz2 )

          )

paulpipi 发表于 2021-6-14 15:22:40

start4444 发表于 2021-6-14 15:54:43

grread函数可以实现,论坛有很多相关搜索看看

(defun c:tt5 (/ code d loop ss)
(setq ss (ssget) loop T D 50)       
(prompt "\n 偏移(A)/退出(空格)]:")
(while loop
(setq code (grread T 8))
(cond
       ((equal code '(2 97)) (command "move" ss "" "non" '(0 0) "non" (list (setq D (* D -1)) 0)))               
                   ((equal code '(2 32)) (setq loop nil))
        )               
        )
(princ)
)

caocaosasd 发表于 2021-6-14 17:01:15

本帖最后由 caocaosasd 于 2021-6-14 17:31 编辑

start4444 发表于 2021-6-14 15:54
grread函数可以实现,论坛有很多相关搜索看看

(defun c:tt5 (/ code d loop ss)

非常感谢大佬的指点!其实我想做一个把刚画出来的两条平行线,按A就偏一下,再按A偏回来这样~这就学习一下!

caocaosasd 发表于 2021-6-14 19:58:07

本帖最后由 caocaosasd 于 2021-6-14 20:01 编辑

start4444 发表于 2021-6-14 15:54
grread函数可以实现,论坛有很多相关搜索看看

(defun c:tt5 (/ code d loop ss)

大佬可否再帮忙看一下……
我想让新画的三线达到这种效果,自己改了一下发现并不能正常运作,因为确实没有看明白代码里的一些内容,比如'(2 97)   '(2 32)这种,还有grread T 8 的返回值是啥也没明白……
;;;
(defun C:cxz1 (/ code d loop ss)
(setq OLD_CMDECHO (getvar "CMDECHO"))
(setq CL (getvar "clayer"))
(setq plwidth (getvar "PLINEWID"))
(setvar "CMDECHO" 0)
(setvar "EDGEMODE" 1)
(setvar "PLINEWID" 30)
(command "-layer" "m" "fjgj" "C" "1" "" "")

(setq L1 (getpoint))
(setq L2 (getpoint L1))
(setq KU (angle L1 L2))
(setq PT1 (polar L1 (+ KU (* 0.5 pi)) 75))
(setq PT2 (polar L1 (+ KU (* 1.5 pi)) 75))
(setq PT3 (polar L2 (+ KU (* 0.5 pi)) 75))
(setq PT4 (polar L2 (+ KU (* 1.5 pi)) 75))

(command "_.Pline" "non" L1 "non" L2 "")
(setq ZX (entlast))
(command "_.Pline" "non" PT1 "non" PT3 "")
(setq ENT13 (entlast))
(command "_.Pline" "non" PT2 "non" PT4 "")
(setq ENT24 (entlast))

(setqloop T
D 50
)
(prompt "\n 偏移(A)/退出(空格)]:")
(while loop
    (setq code (grread T 8))
    (cond
      ((equal code '(2 97))
       (command"move"
    ZX
    ENT13
    ENT24
    ""
    "non"
    '(0 0)
    "non"
    (list (setq D (* D -1)) 0)
       )
      )
      ((equal code '(2 32))
       (setq loop nil)
      )
    )
)

(setvar "clayer" CL)
(setvar "CMDECHO" OLD_CMDECHO)
(setvar "PLINEWID" plwidth)
(princ)
)
;;;


caocaosasd 发表于 2021-6-14 21:11:26

caocaosasd 发表于 2021-6-14 19:58
大佬可否再帮忙看一下……
我想让新画的三线达到这种效果,自己改了一下发现并不能正常运作,因为确实没 ...

就是刚把线画出来(点完L1,L2两个点以后),然后询问用户是否要偏移,要就按A,按一下就偏移一下,再按一下A又偏移回来,这样的……但是我不知道怎么才能对刚画出来的线进行操作

start4444 发表于 2021-6-14 21:25:30

caocaosasd 发表于 2021-6-14 21:11
就是刚把线画出来(点完L1,L2两个点以后),然后询问用户是否要偏移,要就按A,按一下就偏移一下,再按一 ...

你那个代码已经实现啦,只是不知道偏移方向是怎么定的

caocaosasd 发表于 2021-6-14 23:26:32

本帖最后由 caocaosasd 于 2021-6-14 23:31 编辑

start4444 发表于 2021-6-14 21:25
你那个代码已经实现啦,只是不知道偏移方向是怎么定的
其实我抄也没抄明白偏移方向是怎么定的

确实不理解为啥code和 '(2 97)一相等了,就移动;和 '(2 32)相等为啥loop就为nil了
这种也不太明白要怎么查,因为我刚开始学嘛,就只知道vlisp函数说明里,括号括起来的俩数表示一个表,但是这里为啥这么用就不理解了

我希望的偏移方向是垂直于直线的方向,

是不是我command move 的格式有问题呀……command命令常用,但是操作不同的cad命令花样太多了,还没有掌握好

页: [1] 2
查看完整版本: 新手求教,请问如何做到按一下a就直接执行某命令,不需要回车