Autolisp编程中,如果主函数里面要调用自己编写的指令,格式是什么样的?对于defun c:name(),这里面的参数

Autolisp编程中,如果主函数里面要调用自己编写的指令,格式是什么样的?对于defun c:name(),这里面的参数可以缺省吗?可不可以在自定义指令里面直接使用主函数里面的变量?主函数里面的变量怎样才能被自定义指令调用?有没有参数传递?

调用自己写的指令,用(c:XX)格式,XX为自己定义的指令.
defun c:name() 参数的缺省?是默认值还是?是指指令函数里的变量的值么?
在自定义指令里可以使用主函数的变量,在主函数中的(defun XX (a b / c d)..)中,a b 为调用函数必须的变量,c d为主函数的内部变量,内部变量即只在本函数中使用,其它程序或函数无法取得该变量的值,若是你要用的自定义指令里的变量在c d的位置,则无法直接使用主函数的变量.
最后一个问题同上,只要需调用的变量不是函数的内部变量(即不在c d位置),都可以直接调用.无需传递.追问

可不可以提供一个画立方体的autolisp代码呢?

追答

你的画立方体的问题我已在另一个问题上回答。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-09
的连线为轴会有无数个坐标系可以满足! 三点确定一个平面,同样要确定唯一坐标系也是需要三点的!
代码给你,如果第三点不确定,只能保证给定的两点转换后坐标是对的!
(defun c:ducs()
(setq os (getvar "osmode"))
(setq cm (getvar "cmdecho"))
(setvar "osmode" 9)
(setvar "cmdecho" 0)
(command "ucs" "w")
(setq p1 (getpoint "\n请选取第一点P1:"))
(setq p2 (getpoint "\n请选取第二点P2:"))
(setq p3 (getpoint "\n请选取第三点P3:"))
(setvar "osmode" 0)
(initget 1 )
(setq s1 (getpoint "\n请输入第一点P1实际坐标x1,y1,z1:"))
(initget 1 )
(setq s2 (getpoint "\n请输入第二点P2实际坐标x2,y2,z2:"))
(initget 1 )
(setq s3 (getpoint "\n请输入第三点P3实际坐标x3,y3,z3:"))
(setq l1 (distance p1 p2))
(setq l2 (distance s1 s2))
(setq x "Yes")
(if (> (abs (- l1 l2)) 1);误差控制
(progn
(alert "数据误差较大请点后选择是否继续")
(initget 1 "Yes No")
(setq x (getkword "\n是否继续? (Yes 或 No)"))
)
)
(IF (= "Yes" X)
(progn
(setq ltm (ssadd))
(command "line" "0,0,0" "1,0,0" "")
(ssadd (entlast) ltm)
(command "line" "0,0,0" "0,1,0" "")
(ssadd (entlast) ltm)
(command "align" ltm "" s1 p1 s2 p2 s3 p3)
(setq LINDAT (ssname ltm 0))
(setq LINdate (entget LINDAT))
(setq uc1 (cdr (assoc '10 LINdate)))
(setq uc2 (cdr (assoc '11 LINdate)))
(setq LINDAT (ssname ltm 1))
(setq LINdate (entget LINDAT))
(setq uc3 (cdr (assoc '11 LINdate)))
(command "erase" ltm "")
(command "ucs" "3" uc1 uc2 uc3)
)
)
(setvar "osmode" os)
(setvar "cmdecho" cm)
(princ)
)
相似回答