关联列表
你好我的代码执行以下操作
[列表=1]
[*]向用户询问a、b点
[*]向用户询问a b c d行
[*]返回包含所有用户输入的关联列表
[/列表]
我看了veritable userData,我得到了20个条目,而我希望有7个。
有人能解释为什么吗?
(defun main()
(setq userData (wl:getUserData))
)
(defun wl:getUserData (/ strpt endpt)
(if (setq strpt (getpoint "\nStart point of path: "))
(if (setq endpt (getpoint strpt "\nEndpoint of path: "))
(progn
(setq wall (getPoly wall "\nSelect Wall eleveation line"))
(setq front (getPoly front "\nSelect Front eleveation line"))
(setq back (getPoly back "\nSelect Back eleveation line"))
(setq exist (getPoly exist "\nSelect Exist eleveation line"))
(list
cons 10 strpt
cons 11 endpt
cons 41 (distance strpt endpt)
cons 51 wall
cons 52 front
cons 53 back
cons 54 exist
) ;_list
);_progn
) ;_if endpt
) ;_if strp
) ;_defun
(defun getPoly (ent msg)
(if (setq ent (car (entsel msg)))
(if (eq (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
(princ)
) ;_if
) ;_if
ent
)
谢谢
谢伊
您的wl:getUserData函数将返回一个包含21项的列表,因为您为list函数提供了21个参数,可以从中构造列表:
似乎缺少几个表达式:
还要注意,无论用户是否选择LWPolyline或任何其他对象,getPoly函数都将返回实体名称:
该函数的ent参数也是冗余的,因为它立即被重新定义为局部变量。
此外,请注意,如果用户未能选择对象,则各种“getPoly”表达式将返回nil,从而导致变量wall、front、back、exist包含null值。
4 我懂了
是否需要在函数中包含参数(定义fun(/v1 v2)并在函数中再次定义(setq v1 2)(setq v2 2)?
谢谢
谢伊
defun表达式中正斜杠后面的符号是变量,其范围是所定义函数的局部范围,不是函数所需的参数或参数。在函数中定义但在defun表达式中未声明为局部变量的符号将是全局的(除非声明为调用函数的局部变量)。 我认为使变量全局或局部的是它们在代码中的位置(函数外部或内部)。
所以你说defun变量是局部的,
函数内外的setq变量是全局变量
如果两者都存在,那么defun中的变量会覆盖setq定义的变量?
谢谢
谢伊
否-如上所述,defun表达式中正斜杠后面列出的定义符号将是该函数的局部符号。
考虑以下演示变量范围的示例:
5结果:
我建议您阅读围绕defun函数和符号与函数处理的Visual LISP IDE(VLIDE)帮助文档主题。
我怎样才能善待用户,而不是退出该程序,我会告诉他:“这不是一个多边形,请选择一个多边形”
谢谢
谢伊
使用while循环不断提示用户,直到满足选择标准,或者用户已取消提示。 如果您拾取的4个柱脚是墙,则尝试此方法“pick pt inside”“pick pt outside”使用围栏“F”选项,如果只有3个,则可以一次找到所有4个对象,然后显示程序无法工作的消息
7
页:
[1]