使用修改X、Y、X点
嘿伙计们,我已经有一段时间没有做任何Autolisp编程了,我被卡住了。。。
我使用条件语句生成一个数字,即1.625,然后我想将其添加到一个点的Z高程,但它在这条线上一直出错。我花了大约一个半小时通过参考资料进行回顾,但没有找到正确的语法。
这是线路错误:
(setq NEWPT1 (APPEND (LIST (CAR USRP1) (CADR USRP1)) (+ (CDDR USRP3) TRAP_Z_OFF))) ; ERRORS OUT HERE
这是完整的代码。
(defun C:droptrap()
(command "UNDO" "BEGIN")
(initerr)
(setvar "lunits" 2)
(setvar "luprec" 4)
(setvar "attreq" 0)
(command "UNDO" "BEGIN")
(setq OLDCMD (GETVAR "CMDECHO"))
(setvar "CMDECHO" 0)
(setq OLDOSMODE (GETVAR "OSMODE"))
(setvar "OSMODE" 0)
(setq OLDORTHOMODE (GETVAR "ORTHOMODE"))
(vl-load-com)
(setq thisdrawing (vla-get-activedocument (vlax-get-acad-object)))
(initget "1 2 3 4")
(setq TRAP_TYPE (getkword "\n Select trapeze type: (:1-5/8x1-5/8, :1-5/8x1-5/8 B2B, 1-5/8x13/16, 1-5/8x13/16 B2B):"))
(if (or (= TRAP_TYPE "1")(= TRAP_TYPE "3"))
(progn
(initget "1 2")
(setq FACE_DIR (getkword "\n Trapeze opening up or down?: (:UP :Down):"))
)
(setq FACE_DIR "1")
)
(cond
((and (= TRAP_TYPE "1")(= FACE_DIR "2"))
(setq TRAP_Z_OFF 1.625))
((and (= TRAP_TYPE "3")(= FACE_DIR "2"))
(setq TRAP_Z_OFF 0.8125))
(T (setq TRAP_Z_OFF 0.0))
)
(setq blockname "TRAP-XDATA-T1_1.625")
(setq USRP1 (GETPOINT "\n Select center point of rod 1: "))
(setq USRP2 (GETPOINT "\n Select center point of rod 2: "))
(setq USRP3 (getpoint "\n Select elevation of attachment point: "))
(setq NEWPT1 (APPEND (LIST (CAR USRP1) (CADR USRP1)) (+ (CDDR USRP3) TRAP_Z_OFF))) ; ERRORS OUT HERE
(setq NEWPT2 (APPEND (LIST (CAR USRP2) (CADR USRP2)) (+ (CDDR USRP3) TRAP_Z_OFF))) ; ERRORS OUT HERE TOO
(setq MIDPT (POLAR NEWPT1 (ANGLE NEWPT1 NEWPT2) (* (DISTANCE NEWPT1 NEWPT2) 0.5)))
(setvar "ORTHOMODE" 1)
(COMMAND "-INSERT" BLOCKNAME MIDPT "1" "1" NEWPT2)
(command "rotate3d" (entlast) "" 2 NEWPT1 NEWPT2 90)
(setvar "OSMODE" OLDOSMODE)
(setvar "CMDECHO" OLDCMD)
(setvar "CLAYER" LAYNAME)
(COMMAND "UNDO" "END")
(PRINC)
)
代码还没有完成,所以我在构建它的过程中努力保持它的工作状态。 无需查看所有代码:
(setq NEWPT1 (LIST (CAR USRP1) (CADR USRP1) (+ (CADDR USRP3) TRAP_Z_OFF))) 就像李很快发现了缺失的“A”一样,另一种方法是你可以使用
(nth 0 pt); X
(nth 1 pt); Y
(nth 2 pt); Z
页:
[1]