CADsite forum

AutoCAD => Autolisp => Topic gestart door: delangstevandestraat op vr 31 01 2014, 14:09:29

Titel: erase crashed als er niets te wissen is OPGELOST
Bericht door: delangstevandestraat op vr 31 01 2014, 14:09:29
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:
Titel: Re: erase crashed als er niets te wissen is
Bericht door: roy_043 op vr 31 01 2014, 15:34:41
Het probleem ontstaat doordat (ssget) i.p.v een lege selectie nil retourneert. De oplossing van het probleem ligt nu voor de hand...
Titel: Re: erase crashed als er niets te wissen is
Bericht door: EddyBeerke op vr 31 01 2014, 16:29:47
Probeer dit eens:
(command "erase" (ssget "w" '(220.0 -11.0 0.0) '(287.0 190.0 0.0)))
Titel: Re: erase crashed als er niets te wissen is
Bericht door: delangstevandestraat op ma 03 02 2014, 15:17:07
@ 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...
Titel: Re: erase crashed als er niets te wissen is
Bericht door: roy_043 op ma 03 02 2014, 16:16:26
@ 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 "")
)
Titel: Re: erase crashed als er niets te wissen is
Bericht door: EddyBeerke op di 04 02 2014, 08:14:09
Zowel op de commandoregel als in de Visual LISP Console geeft het geen foutmelding, alleen maar "nil"
Titel: Re: erase crashed als er niets te wissen is
Bericht door: delangstevandestraat op di 04 02 2014, 09:07:47
@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:

Titel: Re: erase crashed als er niets te wissen is OPGELOST
Bericht door: EddyBeerke op di 04 02 2014, 10:24:34
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 "")
)

Titel: Re: erase crashed als er niets te wissen is OPGELOST
Bericht door: delangstevandestraat op di 04 02 2014, 12:12:57
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)
Titel: Re: erase crashed als er niets te wissen is OPGELOST
Bericht door: roy_043 op wo 05 02 2014, 09:32:19
Het voorstel van Eddy werkt alleen als er niets wordt geselecteerd. De oplossing zal ook moeten werken als er wel een selectie is.