FastFiber

erase crashed als er niets te wissen is OPGELOST

Gestart door delangstevandestraat, vr 31 01 2014, 14:09:29

Vorige topic - Volgende topic

delangstevandestraat

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:
Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)

roy_043

Het probleem ontstaat doordat (ssget) i.p.v een lege selectie nil retourneert. De oplossing van het probleem ligt nu voor de hand...

EddyBeerke

Probeer dit eens:
(command "erase" (ssget "w" '(220.0 -11.0 0.0) '(287.0 190.0 0.0)))
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

delangstevandestraat

@ 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...
Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)

roy_043

@ 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 "")
)

EddyBeerke

Zowel op de commandoregel als in de Visual LISP Console geeft het geen foutmelding, alleen maar "nil"
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

delangstevandestraat

@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:

Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)

EddyBeerke

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 "")
)

Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

delangstevandestraat

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)
Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)

roy_043

Het voorstel van Eddy werkt alleen als er niets wordt geselecteerd. De oplossing zal ook moeten werken als er wel een selectie is.

yoin