非常感谢大家帮助我们解决这个问题。
我们发现有效的方法是在break命令中添加if语句:
- (action_tile "Slide12"
- "(progn
- (setq Return$ Slide12$)(setq doAction 'T)
- (done_dialog)
- )"
- )
- (action_tile
- "cancel"
- "(done_dialog) (setq doAction nil)")
- (start_dialog)
- (unload_dialog Dcl_Id%)
- (if doAction (SmallVLVInsert))
- (princ)
- );defun c:Smallvalves
- ;---------------------------------------------------------------------------------
- (done_dialog)
- (defun SmallVLVInsert ( / ss p2 p3)
- (done_dialog)
- (command "attreq" "0")
- (if (eq 16384 (logand 16384 (getvar "osmode")))
- (setvar "OSMODE" (boole 6 (getvar "OSMODE") 16384)))
- (command "snap" "0.0625")
- (setq insertpt1 (getpoint "\nPick Insertion Point on line: "))
- (if (not (tblsearch "layer" "pid"))
- (entmake
- (list
- (cons 0 "Layer")
- (cons 100 "AcDbSymbolTableRecord")
- (cons 100 "AcDbLayerTableRecord")
- (cons 2 "pid")
- (cons 70 0)
- (cons 62 3)
- (cons 6 "Continuous")
- )))
- (setq Snap (getvar "osmode"))
- (setvar "clayer" "pid")
- (command "_insert" Return$ insertpt1 "" "" "")
- (while (not ss)
- (setq ss (entsel "\nSelect line to break: "))
- );while
- (setvar 'osmode 613)
- (setq p3 (getpoint "\nPick valve center:")
- p2 (angle p3 (cadr ss)))
- (if ( = slide1$ slide2$ slide3$ slide4$ slide5$ slide6$)
- (progn
- (command "break" ss "f" (polar p3 p2 0.09375)
- (polar p3 p2 -0.09375))
- )
- (progn
- (command "break" ss "f" (polar p3 p2 0.1172)
- (polar p3 p2 -0.1172))
- )
- )
- (setvar "cmdecho" 1)
- (princ)
- (setvar "osmode" Snap)
- );if
这允许我们只保留一个可变doAction,但如果选择了幻灯片1到6,则允许例程中断较短的长度,并中断另一个较长的长度“ELSE”(在我们的情况下,是幻灯片7到幻灯片12)
我将尝试Henrique的第二个变量,以防需要传递两个以上的函数,即this或this,因为它在这里。lsp,但有时我们可能需要让lisp做这个、这个、这个、这个或那个。
在后一种情况下,我认为设置更多的变量会很有用。
我会附上lsp和dcl文件,这样如果你们中有人想让我知道如何改进我们的代码,因为这都是自学的,已经让我和其他人的眼睛检查过了。也许更多的人会提供建议。
再次感谢。
*附件对我不起作用,我将用代码括号括起来*
|