Cylis0509 发表于 2022-7-5 20:12:21

是否运行seper对话框

 
 
如何在同一个lisp中“调用/转到”另一个defun。当我尝试它时,它告诉我;错误:没有函数定义:
 

(vl-load-com)
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(SETQ reply1 (ACET-UI-MESSAGE (strcat"Some Text")
                  "Some Header" 36))
(IF (= reply1 6) (c:mos2nsc))
(IF (= reply1 7) (c:runlater))
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(defun c:mos2nsc ( / )
(SETQ reply2 (ACET-UI-MESSAGE (strcat"Some Text")
                               "Some Header" 20))
(IF (= reply2 6) (c:replyyes))
(IF (= reply2 7) (c:runlater))
)
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(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:runlater ( / )
(acet-ui-message "To run later, type 'MOS2NSC' anytime to begin to conversion process." "Some Header" 64)
)

Cylis0509 发表于 2022-7-5 20:17:19

你好
 
 
我正在处理一个当前的Lisp程序问题。我在这个网站上找到了一些“是/否”对话框/警报框的代码。我正在尝试修改它,使每个按钮都能跳转到同一lisp中的不同部分/不同定义。当我运行它时,它表示函数不存在。我已将其设置为在加载时启动“是/否”框。单击“是”立即运行,单击“否”稍后运行。当我点击否时,我得到:;错误:没有函数定义:C:RUNLATER。我希望有人能帮我。
 
 
非常感谢。
 
 

(vl-load-com)
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(SETQ reply1 (ACET-UI-MESSAGE (strcat"Some Text")
                  "Some Header" 36))
(IF (= reply1 6) (c:mos2nsc))
(IF (= reply1 7) (c:runlater))
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(defun c:mos2nsc ( / )
(SETQ reply2 (ACET-UI-MESSAGE (strcat"Some Text")
                               "Some Header" 20))
(IF (= reply2 6) (c:replyyes))
(IF (= reply2 7) (c:runlater))
)
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(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:runlater ( / )
(acet-ui-message "To run later, type 'MOS2NSC' anytime to begin to conversion process." "Some Header" 64)
)

Tharwat 发表于 2022-7-5 20:19:56

修改您的回复以包含代码的代码标记。
 
您收到该错误消息是因为当代码的第一部分加载时,所需的函数或例程尚未加载,因此如果您再次尝试,它应该会正常运行。
 
将代码的第一部分替换到底部,然后重试。

Cylis0509 发表于 2022-7-5 20:24:49

 
 
 
谢谢你的回复!我试着用“#”按钮,但什么也没用。我想知道如何像你们一样做代码框。我为此道歉。
 
 
至于代码,你是对的。当我把“开始”的消息放在代码末尾时,它就像一个梦。非常感谢。
 
 
我的下一个问题是;由于我的强迫症,我真的很想在我的代码开始的“开放”信息。有没有办法在开始时预加载其他函数?

Lee Mac 发表于 2022-7-5 20:25:15

如Tharwat所示,加载程序时计算以下表达式:
然而,由于defun表达式出现在加载时正在评估的表达式之后,因此您试图根据用户的响应来评估的函数[(c:mos2nsc)&(c:runlater)]尚未评估。

Cylis0509 发表于 2022-7-5 20:29:35

谢谢大家,这很有帮助!!我真的很感激。
 
 
我的下一个问题是;由于我的强迫症,我真的很想在我的代码开始的“开放”信息。有没有办法在开始时预加载/预计算defun表达式?

Lee Mac 发表于 2022-7-5 20:31:37

(vl-load-com)
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(defun onloadexpressions ( / reply1 )
   (SETQ reply1 (ACET-UI-MESSAGE (strcat "Some Text") "Some Header" 36))
   (cond
       (   (= 6 reply1) (c:mos2nsc))
       (   (= 7 reply1) (c:runlater))
   )
   (princ)
)
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(defun c:mos2nsc ( / reply2 )
   (SETQ reply2 (ACET-UI-MESSAGE (strcat "Some Text") "Some Header" 20))
   (cond
       (   (= 6 reply1) (c:replyyes))
       (   (= 7 reply1) (c:runlater))
   )
   (princ)
)
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(defun c:replyyes ( / of_dist of_elev of_epk of_pt )
   (setvar "cmdecho" 0)
   (if (null of_distx) (setq of_distx 1.0))
   (initget 6)
   (if (setq of_dist (getdist (strcat "\nPlease Enter the Offset Distance <" (rtos of_distx) ">: ")))
       (setq of_distx of_dist)
   )
   (if (null of_elevx) (setq of_elevx 0.0))
   (if (setq of_elev (getreal (strcat "\nPlease Enter the Elevation Difference - For a Negative Use a '-' <" (rtos of_elevx) ">: ")))
       (setq of_elevx of_elev)
   )
   (while (or (setq of_epk (entsel)) (= 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_distx of_epk "_non" of_pt "" "_.move" (entlast) "" "_non" (list 0.0 0.0 of_elevx) "")
       )
   )
   (princ)
)
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------
(defun c:runlater ( / )
   (acet-ui-message "To run later, type 'MOS2NSC' anytime to begin to conversion process." "Some Header" 64)
   (princ)
)
(onloadexpressions)

Cylis0509 发表于 2022-7-5 20:36:04

李,你就是那个男人!!非常感谢,效果很好。我在你的网站上给你发了一封电子邮件,你现在可以无视了。
 
 
塔瓦,也谢谢你。我真的很感谢你的帮助。

Tharwat 发表于 2022-7-5 20:40:31

 
你这么说真是太好了,我只是给了你方向,李做了所有的事情。
 
我建议你修改你的第一篇帖子,以避免版主提出警告。这很简单,请阅读本文

Cylis0509 发表于 2022-7-5 20:43:50

好吧,冒着听起来像个白痴的风险;太晚了;我什么都做不了。我读了你发给我的文章Tharwat和什么都没有发生,当我试图编辑后。
页: [1] 2
查看完整版本: 是否运行seper对话框