bigd632 发表于 2022-7-5 20:12:07

第一个代码(获取错误,共个)

今天上班的时候,我第一次开始接触AutoLISP,所以请容忍我,因为我确信我的代码很难看
 
我的第一个程序涉及选择一系列点,该程序将围绕相交区域绘制周长矩形。这部分代码工作得很好(因此无需发布)。
 
我现在尝试向代码中添加另一个功能,它会询问是否有竖梃或横框,如果有,请在竖梃/横框上选择两个点,程序会在之前绘制的周长矩形内绘制一个额外的矩形。
 
我遇到的问题是,一旦输入“m”或“t”,程序就会跳过第一个getpoint问题,因此我无法获得变量pt9或pt11。相反,它只询问第二个getpoint问题,并在试图找到交点时崩溃,因为它缺少变量。有没有解决这个问题的建议?
 

(defun c:test (/ oldosmode pt5 pt6 pt7 pt8 pt9 pt10 pt11 pt12 mutr TLpt TRpt MTpt MBpt)
       
(setq pt5 (getpoint "Choose Head Leftmost Stud:    "))
(setq pt6 (getpoint "Choose Head Rightmost Stud:    "))
        (setq pt7 (getpoint "Choose Sill Leftmost Stud:    "))
(setq pt8 (getpoint "Choose Sill Rightmost Stud:    "))

(setq mutr (getstring "Mullion(m)/Transom(t)/None(n)"))


(cond ((= mutr "t") (
(setq pt9 (getpoint "Select Leftmost Stud on Transom:    "))
(setq pt10 (getpoint "Select Rightmost Stud on Transom:    "))

(setq TLpt (inters pt1 pt2 pt9 pt10 ))
(setq TRpt (inters pt3 pt4 pt9 pt10 ))

(setq oldosmode (getvar "osmode"))
        (setvar "osmode" 0)

(command "_rectangle" "_from" TLpt "@5,-5" "_from" TRpt "@-5,5" "")

(setvar "osmode" oldosmode)
                ))



      ((= mt "m") (
(setq pt11 (getpoint "Select Upper Stud on Mullion:    "))
(setq pt12 (getpoint "Select Lower Stud on Mullion:    "))

(setq MTpt (inters pt5 pt6 pt11 pt12 ))
(setq MBpt (inters pt7 pt8 pt11 pt12 ))

(setq oldosmode (getvar "osmode"))
        (setvar "osmode" 0)

(command "_rectangle" "_from" MTpt "@5,-5" "_from" MBpt "@-5,5" "")

(setvar "osmode" oldosmode)
                ))
)

(princ) ; Exit Cleanly
)

BIGAL 发表于 2022-7-5 20:31:34

试试看,每秒钟只删除两个括号。不确定它是否工作正常。不确定没有图像或dwg它在做什么。

(cond ((= mutr "t")
(setq pt9 (getpoint "Select Leftmost Stud on Transom:    "))
(setq pt10 (getpoint "Select Rightmost Stud on Transom:    "))
(setq TLpt (inters pt1 pt2 pt9 pt10 ))
(setq TRpt (inters pt3 pt4 pt9 pt10 ))
(setq oldosmode (getvar "osmode"))
   (setvar "osmode" 0)
(command "_rectangle" "_from" TLpt "@5,-5" "_from" TRpt "@-5,5" "")

(setvar "osmode" oldosmode)
)

      ((= mt "m")
(setq pt11 (getpoint "Select Upper Stud on Mullion:    "))
(setq pt12 (getpoint "Select Lower Stud on Mullion:    "))
(setq MTpt (inters pt5 pt6 pt11 pt12 ))
(setq MBpt (inters pt7 pt8 pt11 pt12 ))
(setq oldosmode (getvar "osmode"))
   (setvar "osmode" 0)
(command "_rectangle" "_from" MTpt "@5,-5" "_from" MBpt "@-5,5" "")

(setvar "osmode" oldosmode)
)
)

rkmcswain 发表于 2022-7-5 20:45:02

我没有看每一行,但最初我看到:
 
(=mt“m”)可能应该是(=mutr“m”)
您应该允许用户输入大写或小写
你的(cond)语句有太多的括号(在(=)语句之后的括号,它对应的结束语应该删除)

bigd632 发表于 2022-7-5 21:00:22

谢谢大家,我把这些建议拼凑在一起,我想我现在已经完成了。

BIGAL 发表于 2022-7-5 21:14:10

看看initget,你可以强制回答你想要的。(setq mutr(getstring“Mullion(m)/Transom(t)/None(n)”)我会设置一个检查并使用一段时间,因此必须回答正确的按None或n
页: [1]
查看完整版本: 第一个代码(获取错误,共个)