Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Mit ssget alle Linien aus Zeichnung löschen funktioniert nicht

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Mit ssget alle Linien aus Zeichnung löschen funktioniert nicht (2459 mal gelesen)
fewoer
Mitglied



Sehen Sie sich das Profil von fewoer an!   Senden Sie eine Private Message an fewoer  Schreiben Sie einen Gästebucheintrag für fewoer

Beiträge: 28
Registriert: 09.01.2012

AutoCAD Architecture 2011
Graitec Advance Steel 2012
Windows Vista 64 Bit

erstellt am: 17. Jul. 2012 14:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

und wieder einmal ein Problem, bei dem ich schon wieder den ganzen Tag am Brüten bin. Ich will folgendes erreichen: es sollen alle Advance Steel Körper in ACIS-Körper umgewandelt werden, um die Betrachtung unserer AutoCAD Modelle auch ohne Graitec Advance Steel Aufsatz zu ermöglichen.

Kopfbolzen müssen normal explodiert werden, da es sonst Fehler gibt und Schnitte o.ä. plötzlich beim Umwandeln herausgelöscht werden.

Schweißnähte bleiben nach dem Umwandeln in ACIS Körper später als Kreuze aus Linien in der Zeichnung übrig - diese sollen aber ebenfalls gelöscht werden.

Mein Ansatz war, über ssget alle Linien auszuwählen und anschließend zu löschen. Wenn ich nur den Code

Code:

(setq l (ssget "X" '((0 . "LINE"))))
(command "_erase" l ""); ENDE Routine Linien löschen

dazu nutze, dann macht er das auch anständigerweise wie ich das will. Sobald ich aber den Code in das restliche Programm einbaue, bringt er mir einen Fehler, dass es eine ungültige Auswahl wäre und er einen Punkt erwartet.

Wo ist denn da bitte mein Denkfehler? Danke euch schon mal für eure wie immer vermutlich schnelle und kompetente Hilfe  :redface:)

Hier der vollständige Programmcode:

Code:

(defun c:feacis(/)
; BEGINN Routine Kopfbolzen normal explodieren
  (setq ausw (ssget "X"))
  (setq koelae (sslength ausw))
  (while (> koelae 0)
         (setq name (ssname ausw (setq koelae (- koelae 1))))
         (setq art (cdr (assoc 0 (entget name))))
         ;
         ; --- ab hier AST-Elemente, die in ACIS-Körper umgewandelt werden sollen -------------
         (if (or (= art "ASTCONNECTOR") (= art "AstConnector")); Kopfbolzen werden hiermit normal aufgebrochen
               (progn
               (command "_explode" name)
         ))
  (princ)
  ); ENDE Routine Kopfbolzen normal explodieren
;
; BEGINN Routine alle Advanced Steel Objekte markieren, selektieren und in ACIS Objekte umwandeln
  (command "_AstM4CommSelectAllDscObjects" "ALL")
  (command "_AstM4CommExplodeToAcis"); ENDE ACIS-Routine
  (princ)
;
; BEGINN Routine Linien löschen
  (setq l (ssget "X" '((0 . "LINE"))))
  (command "_erase" l ""); ENDE Routine Linien löschen
); end c:feacis

[Diese Nachricht wurde von fewoer am 17. Jul. 2012 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADblue
Mitglied



Sehen Sie sich das Profil von CADblue an!   Senden Sie eine Private Message an CADblue  Schreiben Sie einen Gästebucheintrag für CADblue

Beiträge: 117
Registriert: 20.07.2011

ACAD18,Linear19

erstellt am: 17. Jul. 2012 15:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fewoer 10 Unities + Antwort hilfreich

hey fewoer,

ich hab mir gerade mal testhalber nur dieses codestück reingeladen:

Code:

(princ)
(setq l (ssget "X" '((0 . "LINE"))))
(command "_erase" l "")

ohne "princ" lief es einwandfrei, mit "princ" jedoch hat es mir den letzen befehl wiederholt und mich aufgefordert ebenfalls einen punkt anzugeben.

"princ" mal weglassen?

mfg blue

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fewoer
Mitglied



Sehen Sie sich das Profil von fewoer an!   Senden Sie eine Private Message an fewoer  Schreiben Sie einen Gästebucheintrag für fewoer

Beiträge: 28
Registriert: 09.01.2012

AutoCAD Architecture 2011
Graitec Advance Steel 2012
Windows Vista 64 Bit

erstellt am: 17. Jul. 2012 16:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hey CADblue,

danke für die schnelle Antwort, bei mir läuft es allerdings auch ohne das princ nicht. Das hatte ich nachträglich eingefügt, weil ich dachte es würde helfen.

Ich habe momentan die Vermutung, dass es an der Stelle gegen Ende hängt:

Code:

(command "_AstM4CommExplodeToAcis")
(setq l (ssget "X" '((0 . "LINE"))))
(command "_erase" l "")

Ich glaube, er führt zuerst das Kommando AstM4CommExplodeToAcis aus, sucht sofort nach Linien und versucht die zu löschen. Aber es gibt eben erst Linien in der Zeichnung, wenn alle Advance Steel Körper in ACIS-Körper umgewandelt wurden. Daher vermute ich, findet er keine Linien und will dann eben wissen, was er denn löschen soll.

Ergibt das Sinn? Ich doktore gerade behelfsweise mit einer Pause oder Delay Funktion rum - aber bisher funktioniert es noch nicht und wäre auch nicht meine liebste Lösung. Gut wäre, wenn er irgendwie erst nach Linien sucht, wenn tatsächlich alle Körper umgewandelt wurden. Aber wie kann man das anstellen - da bin ich auch etwas ratlos leider.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 17. Jul. 2012 22:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fewoer 10 Unities + Antwort hilfreich

ne Schleife
while oder repeat
und mit if oder sonstwas den Auswahlsatz prüfen

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."
-Lots of irritating superfluous parentheses!-

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADblue
Mitglied



Sehen Sie sich das Profil von CADblue an!   Senden Sie eine Private Message an CADblue  Schreiben Sie einen Gästebucheintrag für CADblue

Beiträge: 117
Registriert: 20.07.2011

ACAD18,Linear19

erstellt am: 18. Jul. 2012 10:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fewoer 10 Unities + Antwort hilfreich

versuch mal den (if) code einzubauen, einfach mal um zu prüfen ob der befehl "astm4..." übergangen wird...
(command "_AstM4CommExplodeToAcis")
(if (/= nil (setq l (ssget "x" '((0 . "line")))))(command "_erase" l "")(alert "keine linien gefunden"))

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



Sehen Sie sich das Profil von wronzky an!   Senden Sie eine Private Message an wronzky  Schreiben Sie einen Gästebucheintrag für wronzky

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

erstellt am: 18. Jul. 2012 18:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fewoer 10 Unities + Antwort hilfreich

wenn's daran liegt, dass "_AstM4CommExplodeToAcis" noch arbeitet, Dein Program aber schon weiterläuft, solltest Du warten, bis der Befehl beendet ist:
also:
Code:
...
(command "_AstM4CommExplodeToAcis")
(while (> 0 (getvar "cmdactive")) (wait-v2 1))
...
(defun wait-v2 (secs)
  (setq endt (+ (getvar "DATE") (/ secs 86400.0)))
  (while (< (getvar "DATE") endt) T)
)
Vielleicht hilfts.

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fewoer
Mitglied



Sehen Sie sich das Profil von fewoer an!   Senden Sie eine Private Message an fewoer  Schreiben Sie einen Gästebucheintrag für fewoer

Beiträge: 28
Registriert: 09.01.2012

AutoCAD Architecture 2011
Graitec Advance Steel 2012
Windows Vista 64 Bit

erstellt am: 26. Jul. 2012 11:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Tut mir leid für die späte Antwort - geht gerade ein bißchen rund bei uns.

@Dorfy:
Hab's mal mit einer while Schleife probiert, irgendwie sind mir aber keine sinnvollen Kriterien eingefallen wie mit ssget die Anzahl der Auswahlsätze für Linien zu überprüfen. Habe festgestellt, dass die Zeichnung durchaus auch schon von Anfang an Linien enthalten kann - Hilfslinien beispielsweise. Sollen auch herausgelöscht werden.

Ich hab's dann versucht so zu lösen, dass er die Anzahl der Auswahlsätze überprüft, 500ms wartet und dann die Anzahl der Auswahlsätze nochmal überprüft. Sobald dann die Differenz ungleich 0 ist, soll er anfangen Linien zu löschen. Irgendwie kommen aber nie neue Linien hinzu, egal wie lang die Schleife läuft. Daher läuft sie dann endlos. Ich poste mal den Code, vielleicht habe ich auch einen Denkfehler.

Code:

(setq Linie (ssget "X" '((0 . "LINE"))))
(setq AnzahlAuswahlsatz1 (sslength Linie))
(command "_.DELAY" 500); Wartezeit 500ms
(setq Linie (ssget "X" '((0 . "LINE"))))
(setq AnzahlAuswahlsatz2 (sslength Linie))
(setq DifferenzAuswahlsatz (- AnzahlAuwahlsatz2 AnzahlAuswahlsatz1))
(while (= DifferenzAuswahlsatz 0)
  (setq Linie (ssget "X" '((0 . "LINE"))))
  (setq AnzahlAuswahlsatz1 (sslength Linie))
  (command "_.DELAY" 500); Wartezeit 500ms
  (setq Linie (ssget "X" '((0 . "LINE"))))
  (setq AnzahlAuswahlsatz2 (sslength Linie))
  (setq DifferenzAuswahlsatz (- AnzahlAuswahlsatz2 AnzahlAuswahlsatz1))
  (setq Name (ssname Linie (setq AnzahlAuswahlsatz1 (- AnzahlAuswahlsatz1 1))))
  (setq Art (cdr (assoc 0 (entget Name))))
  (if
    (or (= Art "LINE") (= Art "Line"))
    (progn (command "_erase" Name "")
    )
  )
); end while

@CADblue:
Habe den Code mal eingebunden, wieder der gleiche Fehler: ungültige Auswahl, erwartet einen Punkt. Der alert wird garnicht erst ausgegeben.

@wronzky:
Vielen Dank! Der Codeschnipsel hat tatsächlich geholfen  ) - auch wenn mir noch nicht so ganz klar ist, warum es so funktioniert und mit einem einfachen Delay, das lang genug ist zumindest der Fehler unterdrückt wird.

Ein riesengroßes Dankeschön auch an alle, die mitgedacht und versucht haben zu helfen. This made my day! 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz