您必须将lisp视为一种脚本语言(因为它是),并且在代码中,在加载到环境中之前调用函数/命令。
将正在调用的函数移到调用函数上方。
例如我按以下顺序移动了您的函数,然后它就可以工作了:
c: 稍后运行
c: 回复
c: mos2nsc
--最后,您将放置未封装的代码setq reply1。。。等
- (vl-load-com)
- ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
- (defun c:runlater ( / )
- (acet-ui-message "To run later, type 'MOS2NSC' anytime to begin to conversion process." "Some Header" 64)
- )
- ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
- (defun c:replyyes ( / of_epk of_pt)
- (setvar "cmdecho" 0)
- (if (null of_dist) (setq of_distx 1.0))
- (initget 6)
- (if (null (setq of_dist (getdist (strcat "\nPlease Enter the Offset Distance <>: "))))
- (setq of_dist of_distx)
- )
- (setq of_distx of_dist)
- (if (null of_elev) (setq of_elevx 0.0))
- (if (null (setq of_elev (getreal (strcat "\nPlease Enter the Elevation Difference - For a Negative Use a '-' <>: "))))
- (setq of_elev of_elevx)
- )
- (setq of_elevx of_elev)
- (while (or (setq of_epk (entsel)) (eq 7 (getvar "errno")))
- (if (and of_epk
- (member (cdr (assoc 100 (reverse (entget (car of_epk)))))
- '("AcDbPolyline" "AcDb2dPolyline"))
- (setq of_pt (getpoint "\nPlease Select the Side to offset: "))
- )
- (command "_.offset" of_dist of_epk of_pt "" "_.move" (entlast) ""
- (list 0.0 0.0 of_elev) "")
- )
- )
- (princ)
- )
- ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
- (defun c:mos2nsc ( / )
- (SETQ reply2 (ACET-UI-MESSAGE (strcat "Some Text") "Some Header" 20))
- (IF (= reply2 6) (c:replyyes))
- (IF (= reply2 7) (c:runlater))
- )
- ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
- (SETQ reply1 (ACET-UI-MESSAGE (strcat "Some Text") "Some Header" 36))
- (IF (= reply1 6) (c:mos2nsc))
- (IF (= reply1 7) (c:runlater))
另请注意:
您还将所有函数定义为命令。这对于c:mos2nsc是有意义的,但对于任何其他的。
其次,有几个例子表明,您在var上使用setq,但不为其赋值。我想知道的是,这样做是否会清除该值(它没有),或者您是否正在使用此方法返回var的当前值。
如果是第一个变量,则可以通过将其设置为nil、“”或0来清除var。
如果是第二个,那么您可以通过简单键入var的名称(不带括号)来返回var的值。
当然,如果你的目的不是我有限的洞察力,那么请原谅我。
最后,这真的值得它自己的线程,以便它得到应有的关注,因为你面临的问题与原来的帖子没有太多关系。并将代码封装在代码哈希中 |