• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

dcl で lisp 指示を実行

  • Thread starter Thread starter monta
  • Start date Start date

monta

Guest
sono nuovo del linguaggio lisp.
stoancora imparando.
non capisco come fare a fare eseguire un comando con le dcl.
mi spiego meglio:
di dcl ne ho trovate un sacco gia fatte, con anche il loro file lisp,
ma non capisco come fare per (la cosa piu semplice)ad esempio se premo si continua con il programma (mi scrive ciao sulla riga di comando)o mi carica un altro lisp ,se premo no mi ferma il programma lisp.
qualcuno puo scrivere sul forum il lisp e la dcl ,per poterla studiare?

ho preso da : http://web2.airmail.net/terrycad/tutorials/mydialogs.htm

questa dcl, ma come la uso?

//---------------------------------------------------------------------------------------------------------
// myokcancel
// customize ok cancel buttons and group them together and specify their widths
//---------------------------------------------------------------------------------------------------------
myokcancel : dialog {
label = " my ok cancel";
spacer;
: row {
fixed_width = true;
alignment = centered;
: ok_button {
width = 11;
}
: cancel_button {
width = 11;
}
}
}//myokcancel


;----------------------------------------------------------------------------------------------------------
; c:myokcancel - customize ok cancel buttons and then princ the return# you
; choose to associate with the buttons pressed.
; syntax: myokcancel
;----------------------------------------------------------------------------------------------------------
(defun c:myokcancel (/ dcl_id% return#)
(princ "\nmyokcancel")(princ)
; load dialog
(setq dcl_id% (load_dialog "mydialogs.dcl"))
(new_dialog "myokcancel" dcl_id%)
; dialog actions
(action_tile "accept" "(done_dialog 1)");you can change the default return#
(action_tile "cancel" "(done_dialog 0)")
(setq return# (start_dialog))
; unload dialog
(unload_dialog dcl_id%)
(princ "\n")(princ return#);optional
(princ)
);defun c:myokcancel


ho creato il file lisp e il file dcl,
ci ho messo dentro i rispettivi codici, ma poi non so' come fargli caricare il successivo lisp(o metterlo gia dentro al lisp stesso).
grazie per l'aiuto.
 
da salvare come mydialogs.dcl (file di definizione finestra di dialogo)
myokcancel : dialog {
label = " my ok cancel";
spacer;
: row {
fixed_width = true;
alignment = centered;
: ok_button {
width = 11;
}
: cancel_button {
width = 11;
}
}
}//myokcancel


file lisp
(defun c:myokcancel (/ dcl_id% return#)
(princ "\nmyokcancel")(princ)

(setq dcl_id% (load_dialog "mydialogs.dcl")) ;carica il file dcl
(new_dialog "myokcancel" dcl_id%) ; attiva la finestra di dialogo

(action_tile "accept" "(done_dialog 1)") ;azione da valutare se si seleziona la casella
(action_tile "cancel" "(done_dialog 0)") ;azione da valutare se si seleziona la casella
(setq return# (start_dialog)) ; visualizza la finestra e inizia ad eccettare l'input, alla variabile return# viene assegnato il valore derivante da action_tile (in questo caso 1 o 0)

(unload_dialog dcl_id%) ;scarica il file dcl
(princ "\n")(princ return#) ;visualizza il valore assegnato alla variabile (puoi anche eliminare)
(princ) ;idem

;in base alla casella selezionata istruisco le azioni da far compiere al lisp

(if (= return# 0) (exit)) ; se si seleziona la casella cancel stabilisco di uscire

(if (= return# 1)
(progn

(bla bla bla)
; inserisci cosa vuoi che faccia il lisp
)
)


);defun c:myokcancel
 
Last edited:
era la funzione if che non riuscivo a capire dove inserire.
sono riuscito a far funzionare piccole funzioni , ma non capisco come inserire una funzione come questa:


;tip1261.lsp: sholayer.lsp show layer (c)1996, robert a. perruzzi

(defun c:sholayer ()
(setq laname (getstring "layer name to highlight: "))
(terpri
)
(setq ss1a (ssget "x" (list (cons 8 laname))))
(setq
slen (1- (sslength ss1a))
)
(grclear)
(while (/= slen -1)
(redraw (ssname ss1a slen) 1)
(setq slen (1- slen))
) ;;end while
) ;end sholayer.lsp



e fare in modo che funzioni da sola premendo ok
 
1) se il lisp è già caricato (magari inserito nel gruppo di avvio)

........
(if (= return# 1) (c:sholayer))
........


2) oppure inserire direttamente le istruzioni del lisp

........
(if (= return# 1)
(progn
(defun c:sholayer () ; cancellare la riga
(setq laname (getstring "layer name to highlight: "))
(terpri
)
(setq ss1a (ssget "x" (list (cons 8 laname))))
(setq
slen (1- (sslength ss1a))
)
(grclear)
(while (/= slen -1)
(redraw (ssname ss1a slen) 1)
(setq slen (1- slen))
) ;;end while

) ;end sholayer.lsp ; cancellare la riga
)
.........


3) oppure richiamare il lisp come subroutine (da inserire nel lisp)

(defun c:myokcancel (/ dcl_id% return#)
(princ "\nmyokcancel")(princ)
(setq dcl_id% (load_dialog "mydialogs.dcl"))
(new_dialog "myokcancel" dcl_id%)
(action_tile "accept" "(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
(setq return# (start_dialog))
(unload_dialog dcl_id%)
(if (= return# 0) (exit))
(if (= return# 1) (sholayer))
);defun c:myokcancel

(defun sholayer () ;cancellato c:
(setq laname (getstring "layer name to highlight: "))
(terpri
)
(setq ss1a (ssget "x" (list (cons 8 laname))))
(setq
slen (1- (sslength ss1a))
)
(grclear)
(while (/= slen -1)
(redraw (ssname ss1a slen) 1)
(setq slen (1- slen))
) ;;end while
) ;end sholayer.lsp
 
Last edited:

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top