uuoo10levi 发表于 2022-7-6 07:06:29

条件语句

我在试着弄明白什么是简单的事情。我想创建一个lisp,我可以告诉它画3条线,然后我可以指定它是向左还是向右。这是我目前掌握的基本知识。
 
(defun c:ju()

(setq oldosmode (getvar "osmode"))
(setq oldlayer (getvar "clayer"))

(setq        p1(getpoint "\nPick Top Point:")
p2(getpoint "\nPick Bottom Point:")
lvl (getint "\nJumper Level: (1,2,3,4...)")
)

(setq        p3 (list (+ (car p1) (* lvl 0.09375))
       (- (cadr p1) (* lvl 0.03125))
   )
)
(setq        p4 (list (+ (car p2) (* lvl 0.09375))
       (+ (cadr p2) (* lvl 0.03125))
   )
)
(setvar "clayer" "text0")

(command "line" p1 p3 "")
(command "line" p2 p4 "")
(command "line" p3 p4 "")

(setvar "clayer" oldlayer)
(setvar "osmode" oldosmode)
)
 
这就是它所创造的
 

 
现在,这很好,我需要指定我希望跳投到两条白线的右边或左边。我需要一些帮助。

kraz 发表于 2022-7-6 07:30:01

你想链接这个吗??
 
(defun c:ju()

(setq oldosmode (getvar "osmode"))
(setq oldlayer (getvar "clayer"))

(setq        p1(getpoint "\nPick Top Point:")
           p2(getpoint "\nPick Bottom Point:")
      lvl (getint "\nJumper Level: (1,2,3,4...)")
)
(setq q (strcase (getstring "\nLeft/Right:")))
(if (eq "" q) (setq q "R"))
(cond
((eq q "R") (setq opt "+"))
((eq q "L") (setq opt "-"))
)
(setq        p3 (list ((eval (read opt)) (car p1) (* lvl 0.09375))
       (- (cadr p1) (* lvl 0.03125))
   )
)
(setq        p4 (list ((eval (read opt)) (car p2) (* lvl 0.09375))
       (+ (cadr p2) (* lvl 0.03125))
   )
)
(setvar "clayer" "text0")

(command "line" p1 p3 "")
(command "line" p2 p4 "")
(command "line" p3 p4 "")

(setvar "clayer" oldlayer)
(setvar "osmode" oldosmode)
)
 
 

BIGAL 发表于 2022-7-6 07:32:27

最简单的方法是不必键入答案添加选择左或右,因为使用鼠标的第三个getpoint更快,然后执行一个例程,只需要对左或右进行交换端点测试。
 
(setq pt1 (getpoint "\npick 1st point to place pit : "))
(setq pt2 (getpoint "\nPick 2nd point for orientation"))
(setvar "osmode" 0)
(setq pt7 (getpoint "\Pick pt on pit side : "))
(setq ang (angle pt1 pt2))
(setq ang5 (angle pt2 pt7))
(setq diffang (- ang ang5))
(if (> diffang 1.5707)
(setq ang2 (- ang 1.570796))
(setq ang2 (+ ang 1.570796))
)
 
ps不要打扰版主把代码放在标签里

kraz 发表于 2022-7-6 07:43:05

你想要比键入“L”或“R”更快吗?
然后,指向p1的左侧或右侧

(defun c:ju()

(setq oldosmode (getvar "osmode"))
(setq oldlayer (getvar "clayer"))

(setq        p1 (getpoint "\nPick Top Point:")
p2 (getpoint "\nPick Bottom Point:")
lvl (getint "\nJumper Level: (1,2,3,4...)")
)
(setq q (getpoint p1 "\nDirection:"))
(if (>= (car q) (car p1))
(setq opt "+")
(setq opt "-")
)

(setq        p3 (list ((eval (read opt)) (car p1) (* lvl 0.09375))
(- (cadr p1) (* lvl 0.03125))
)
)
(setq        p4 (list ((eval (read opt)) (car p2) (* lvl 0.09375))
(+ (cadr p2) (* lvl 0.03125))
)
)
(setvar "clayer" "text0")

(command "line" p1 p3 "")
(command "line" p2 p4 "")
(command "line" p3 p4 "")

(setvar "clayer" oldlayer)
(setvar "osmode" oldosmode)
)

SLW210 发表于 2022-7-6 08:06:21

克拉兹,
 
请阅读代码发布指南,并编辑您的帖子以包含代码标签。

kraz 发表于 2022-7-6 08:16:42

谢谢SLW210。
我不知道那件事。
我所有的回复都是固定的。
再次感谢
页: [1]
查看完整版本: 条件语句