Hallo forumleden,
Ik probeer een lisp te start via een andere lisp met dcl, maar ik krijg het niet werkend.
Zal wel iets stoms over het hoofd zien.
(action_tile "tabel" "(do_act $key)")
((= op "tabel")
(command "_load" "_table.lsp" "tab")
en de dcl
: button {
key = "tabel";
label = "Tabel menu";
Volgens mij zou het zo moeten werken.
Je laat weinig code zien. Maar misschien bedoel je dit:
(action_tile "tabel" "(setq op $key)")
(if (= op "tabel")
(progn
(load "table.lsp")
(command "tab")
)
)
Hallo Roy,
Dit werkt hellaas ook niet.
Hier de hele code
(defun c:tsm ()
(defun do_act (key_pr)
(setq op key_pr)
(if (= key_pr "cancel")
(setq loop 0)
)
(setq dlg_pt (done_dialog loop))
)
(setq id (load_dialog "start")
loop 1
)
(if (< id 0)
(exit)
)
(if (not dlg_pt)
(setq dlg_pt (list -1 -1))
)
(while (/= loop 0)
(if (not (new_dialog "start" id "" dlg_pt))
(exit)
)
(action_tile "tabel" "(do_act $key)")
(action_tile "cancel" "(do_act $key)")
(start_dialog)
(cond
(if (= op "tabel")
(load "table.lsp")
(command "tab")
)
))
)
(princ "\n Start menu\n")
(prin1) ; end start.LSP
De lisp start wel de table.lisp, maar gaat niet verder.
"Command: tab Unknown command "TAB". Press F1 for help."
Atwist je moet jouw kennis over (cond) en (if) nog eens goed opfrissen...
Misschien zo dan:
(defun c:tsm ( / id op)
(defun do_act (key_pr)
(setq op key_pr)
(setq dlg_pt (done_dialog))
)
(setq id (load_dialog "start"))
(if (< id 0)
(exit)
)
(if (not dlg_pt)
(setq dlg_pt (list -1 -1))
)
(if (not (new_dialog "start" id "" dlg_pt))
(exit)
)
(action_tile "tabel" "(do_act $key)")
(action_tile "cancel" "(do_act $key)")
(start_dialog)
(unload_dialog id)
(if (= op "tabel")
(progn
(load "table.lsp")
(command "tab")
)
)
)
(princ "\n Start menu\n")
(prin1)
Als dit niet werkt post dan a.u.b. alle bestanden.
EDIT (n.a.v edit van Atwist):
Als table.lsp geen commando tab bevat waarom schrijf jij dan (command "tab")?
Als er bij de lisp die geladen het volgende staan "(defun tab ..." dan kun je de lisp starten met "(tab)".
Staat er "(defun c:tab ..." dan "(c:tab)"
Roy,
Er staat duidelijk
(defun C:tab(/ layerList)
;;;--- Turn off the command echo
(setvar "cmdecho" 0)
;;;--- Preset an exit string
(setq alertStr "\n Table is gemaakt")
;;;--- Get the table names
(setq layerList(getLayerInfo))
Eddy dank voor het mee denken.
Als ik "tab" in "c:tab" wijzigt
Command: c:tab Unknown command "C:TAB". Press F1 for help.
dus werkt ook niet :?
Eddy heeft gelijk. Blijkbaar kun je lisp-commando's niet starten met (command "MijnCommando").
Het moet dus zijn:
(defun c:tsm ( / id op)
(defun do_act (key_pr)
(setq op key_pr)
(setq dlg_pt (done_dialog))
)
(setq id (load_dialog "start"))
(if (< id 0)
(exit)
)
(if (not dlg_pt)
(setq dlg_pt (list -1 -1))
)
(if (not (new_dialog "start" id "" dlg_pt))
(exit)
)
(action_tile "tabel" "(do_act $key)")
(action_tile "cancel" "(do_act $key)")
(start_dialog)
(unload_dialog id)
(if (= op "tabel")
(progn
(load "table.lsp")
(c:tab)
)
)
)
(princ "\n Start menu\n")
(prin1)
Roy,
Dit werk goed :vreegoe: :vreegoe:
Mijn dank is groot
Heb nu alleen het probleem dat ik geen 2e opdracht kan toevoegen
;;; (if (= op "tabel")
(progn
(load "table.lsp")
(c:tab)
(if (= op "steal")
(progn
(load "steal.lsp")
(c:Steal)
Dan krijg ik deze melding
; error: quit / exit abort
Wat zijn jullie toch een steeltje diehards om zo buiten werktijd nog druk bezig te zijn :pintje:
:D Eddy
Eigen bedrijf dus nooit rust.
Je kunt een stoppunt (knopje "toggle breakpoint") zetten in Visual LISP for AutoCAD (commando: VLIDE).
Hiermee kun je nadat je je lisp geladen hebt naar acad, het commando gestart hebt, met F8 dor de code heen lopen terwijl deze wordt uitgevoerd. Hiermee kun je ontdekken waar dat het mis gaat.
Lees eens hoofdstuk 4 (engels) over debugging:
http://ubuntuone.com/p/uUb/
Citaat van: roy_043 op do 19 05 2011, 20:36:40
Atwist je moet jouw kennis over (cond) en (if) nog eens goed opfrissen...
(defun c:tsm ( / id op)
(defun do_act (key_pr)
(setq op key_pr)
(setq dlg_pt (done_dialog))
)
(setq id (load_dialog "start"))
(if (< id 0)
(exit)
)
(if (not dlg_pt)
(setq dlg_pt (list -1 -1))
)
(if (not (new_dialog "start" id "" dlg_pt))
(exit)
)
(action_tile "steel" "(do_act $key)") ; steal?
(action_tile "tabel" "(do_act $key)")
(action_tile "cancel" "(do_act $key)")
(start_dialog)
(unload_dialog id)
(cond
((= op "tabel")
(load "table.lsp")
(c:tab)
)
((= op "steel") ; steal?
(load "steel.lsp") ; steal.lsp?
(c:steel) ; c:steal?
)
)
)
(princ "\n Start menu\n")
(prin1)
EDIT: (action_tile "steel" "(do_act $key)") ; steal? toegevoegd.
@Eddy
Ik heb net Vlide ontdekt (nou ja ik kende het wel maar had er nooit meegewerkt) dus ik probeer dit mij nu eigen te maken.
@Roy
Ik zag nu wat ik fout had.
Ik koppelde de opdrachten aan elkaar vast ipv per opdracht af te sluiten door haakjes.
Mijn dank is wederom groot