Waarom crashed mijnlisp op een erase, als er niets te wissen valt
(command "erase" (ssget "w" '(220.0 -11.0 0.0) '(287.0 190.0 0.0)) "")
en belangrijker : hoe los ik het op ? :wink:
Het probleem ontstaat doordat (ssget) i.p.v een lege selectie nil retourneert. De oplossing van het probleem ligt nu voor de hand...
Probeer dit eens:
(command "erase" (ssget "w" '(220.0 -11.0 0.0) '(287.0 190.0 0.0)))
@ eddy
dat genereert een foutmelding , het commando wordt foutief afgebroken...
@roy
bedankt dat je me de goed richting wijst,
(setq tbd ((ssget "w" '(220.0 -11.0 0.0) '(287.0 190.0 0.0)))
(if (/= nil tbd)(command "erase" tbd ""))
Ik weet niet of dit de weg was die je me wilde laten inslaan...
ps : er wordt wel eens gezegd dat vrouwen geen kaart kunnen lezen...
@ delangstevandestraat:
Dit is inderdaad de richting die ik gedachten had.
Maar je kunt de oplossing nog wel efficiënter maken:
(if (setq tbd (ssget "w" '(220.0 -11.0 0.0) '(287.0 190.0 0.0)))
(command "erase" tbd "")
)
Zowel op de commandoregel als in de Visual LISP Console geeft het geen foutmelding, alleen maar "nil"
@eddy ja inderdaad ik had waarschijnlijk iets verkeerd getypt
wat is het programmatorisch verschil tussen met "" en zonder "" dan eigenlijk ?
sorry dat ik moet kiezen tussen jullie twee oplossingen hé... :wink:
Dit is het verschil op de commandoregel met een nieuwe tekening:
CiteerCommand: (command "erase" (ssget "w" '(220.0 -11.0 0.0) '(287.0 190.0 0.0)) "")
erase
Select objects:
Command: _HELP
Command: nil
CiteerCommand: (command "erase" (ssget "w" '(220.0 -11.0 0.0) '(287.0 190.0 0.0)))
erase
Select objects:
Command: nil
Blijkbaar herhaald acad het vorige commando met de extra "".
Als je een nieuwe tekening opend en je geeft een enter dan (bij mij) laat acad de help zien.
Bij de oplossing van roy_043 controleer je eerst of er een selectie is gemaakt, en zo ja dan overgaan tot verwijderen.
Citaat van: roy_043 op ma 03 02 2014, 16:16:26
(if (setq tbd (ssget "w" '(220.0 -11.0 0.0) '(287.0 190.0 0.0)))
(command "erase" tbd "")
)
Misschien draaien we niet dezelfde versie (acad 2011 mech)
want het loopt toch fout hoor bij mij
Command:
Command: (command "erase" (ssget "w" '(69.0 -10.0 0.0) '(137.0 190.0 0.0)))
erase
Select objects: nil
Select objects:
dus die "" is de 'enter' om het wis-commando te laten uitvoeren denk ik..
en als ik dat weglaat dan hangt het lisp-programma daar omdat hij nog iets verwacht...
ps: u weet toevallig geen antwoord op mijn andere vraag (stretch dynblocks via lisp)
Het voorstel van Eddy werkt alleen als er niets wordt geselecteerd. De oplossing zal ook moeten werken als er wel een selectie is.