| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Suchkriterien: ssget dotted par (920 mal gelesen)
|
EmBe Mitglied Maschinenbaustudent
Beiträge: 5 Registriert: 05.12.2008
|
erstellt am: 05. Dez. 2008 08:39 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen allerseits! Ich bin ein neuer Lisp-Einsteiger, der mal ein paar Fragen äußern möchte. Ich bin mit der Forensuche vertraut, doch möchte ich nicht ausschließen, dass es meine Fragen vllt. in einem anderen Beitrag schon mal gab. Ich habe aber definitiv recherchiert! Ich habe hier in meiner Studienarbeit einige Zeichnungen, in denen ich mit einem ssget-Befehl Polylinien und Bögen herauslöschen möchte. Diese sind durch eine Konvertierung von einem anderen Programm ohne Grund entstanden. Hier mal der problematische Auszug aus meiner Lisp:
Code: (setq kreuze (ssget "_X" '( (-4 . "<OR");folgende Objekte sollen in den Auswahlsatz miteinbezogen werden (-4 . "<AND") (0 . "POLYLINE")(62 . 7)(370 . 35) (-4 . "<NOT") (-4 . "<AND") (210 1.0 0.0 0.0) (210 0.0 1.0 0.0) (-4 . "AND>") (-4 . "NOT>");Bezug hier auf wahrlos angeordnete Linien in Zeichnung: ;wähle sämtliche Polylinien der Farbe weiß und ;und der Strichstärke 0,35mm, außer in horizontaler (x-Richtung) oder vertikaler (y-Richtung) Lage (-4 . "AND>") (-4 . "<AND") (0 . "ARC")(62 . 7)(370 . 35)(40 . 0.0488);Bezug hier auf ungewollte Bögen bei Freischnitten: ;wähle sämtliche Bögen der Farbe weiß, ;der Strichstärke 0,35mm und dem Radius 0,0488mm (-4 . "AND>") (-4 . "OR>") )))
So, folgendes Problem: Bei den Polylinien möchte ich sämtliche laut den Suchkrriteiren löschen. Horizontale und vertikale Linien mit den Eigenschaften sollen erhalten bleiben. Ih habe es mit dieser Extrusionsrichtung und einer Winkelangabe versucht. Nur mit Bogenmaß hat es Lisp anscheinend nicht so. Das wären die Linien im Winkel von 0 und 1.5*pi zur x-Achse. Bei den Bögen besteht das Problem mit den Nachkommastellen. Der Durchmesser ist 0.0975, der Radius wäre dann 0.04875, AutoCad zeigt eben 0.0488 an. Ich habe es da schon mit dem rtos-Befehl versucht, dass Lisp mit mehr Nachkommastellen arbeitet, das klappt aber auch nicht so ganz.. Hoffe die Probleme ist verständlich formuliert. Über Antworten danke ich schon mal im Voraus! ------------------ Gruß Max Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 05. Dez. 2008 08:54 <-- editieren / zitieren --> Unities abgeben: Nur für EmBe
Hallo Max, leg mal eine Beispiel-DWG bei, in der bereits Polylinien mit den Extrusionsrichtungen (210 1.0 0.0 0.0) und (210 0.0 1.0 0.0) enthalten sind. Beim Bogen würde ich (cons 40 (/ 0.0975 2.0)) verwenden, dann darf die Gesamtliste aber nicht mit einem ' beginnen, weil diese dann nicht aussgewertet wird => (list '(-4 . "<OR") '(-4 . "<AND") ... (cons 40 (/ 0.0975 2.0)) '... Andererseits, was spricht dagegen (40 . 0.04875) zu verwenden? ------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EmBe Mitglied Maschinenbaustudent
Beiträge: 5 Registriert: 05.12.2008
|
erstellt am: 05. Dez. 2008 10:02 <-- editieren / zitieren --> Unities abgeben:
Super, das ging ja schnell! Habe mal eine Zeichnung1.dwg mit den beispielhaften Übeltätern angehängt. In dem Fall habe ich eine zu löschende Polylinie, einen zu löschenden Bogen und einen Quader, hier jetzt mit Linien, der nicht gelöscht werden soll. Habe ich das mit der Extrusionsrichtung überhaupt richtig angewendet? Ich habe das jetzt als eine Ausbreitungsrichtung der (Poly-)Linie im vektoriellen Sinn aus der Lisp-Hilfe gedeutet... Bei der Winkellage bin ich mit (50 . 0) und (50 . 4.712) vorgegangen. Habe aber auch schon Ideen wie (setq x (* 1.5 pi)) mit (50 . x) verfolgt. Alles aber auch bisher ohne Erfolg. Was gegen (40 . 0.04875) spricht, ist dass es bei mir leider nicht funktioniert. Bei der Methode mit (cons 40 (/ 0.0975 2.0)) bekomme ich "Fehler: Fehlerhaftes Punktargument" ausgegeben. Das verstehe ich nicht ganz zu deuten.
------------------ Gruß Max Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 05. Dez. 2008 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für EmBe
Hallo Max, mit den Polylinien meinst Du also nicht die Extrusionsrichtung, sondern die horizontale und vertikale Ausrichtung zwischen Anfangs- und Endpunkt in der Zeichenebene? Ich habe Dir mal ein Beispiel gemacht, allerdings nicht mit Polylinien und Bögen, sondern mit Linien und Bögen (bei den Linien kommt man über die GC 10 u. 11 an die Koordinaten der Anfangs- und Endpunkte. Vom Prinzip bin ich ein bißchen anders rangegangen als Du, ich wähle erstmal alle Linien und Bögen mit Farbe weiß und LST 0.35, dann schmeiße ich alles aus dem Auswahlsatz raus, was nicht den Kriterien entspricht. Bei dem Radius habe ich eine größer-und-kleiner Abfrage gemacht, weil der Radius in der Testzeichnung ;;;Befehl: (rtos(cdr(assoc 40 (entget (car(entsel)))))2 10) ;;;Objekt wählen: "0.0487744087" doch ziemlich unrund war. Code:
(defun c:test ( / aws n) (if(setq aws(ssget "_X" '((0 . "LINE,ARC")(62 . 7)(370 . 35)))) (progn (setq n 0) (repeat (sslength aws) (cond ((= (cdr(assoc 0 (entget (ssname aws n))))"ARC") (if (and (>(cdr(assoc 40 (entget(ssname aws n)))) 0.04877) (<(cdr(assoc 40 (entget(ssname aws n)))) 0.04878)) (ssdel (ssname aws n)aws) (setq n (+ n 1)))) ((= (cdr(assoc 0 (entget (ssname aws n))))"LINE") (if (or (=(rtos(car(cdr(assoc 10 (entget(ssname aws n)))))2 8) (rtos(car(cdr(assoc 11 (entget(ssname aws n)))))2 8)) (=(rtos(cadr(cdr(assoc 10 (entget(ssname aws n)))))2 8) (rtos(cadr(cdr(assoc 11 (entget(ssname aws n)))))2 8))) (ssdel (ssname aws n)aws) (setq n (+ n 1)))))) (if (>(sslength aws)0) (command "_.erase" aws "")) )))
------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EmBe Mitglied Maschinenbaustudent
Beiträge: 5 Registriert: 05.12.2008
|
erstellt am: 05. Dez. 2008 12:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Joern, genau um die vertikale und horizontale Ausrichtung ging es mir dabei. Ja an diesen unrunden Werten kann man gut erkennen, mit welchen Problemen ich wegen der Konvertierungen arbeiten muss. Deine Idee einen aws zu erstellen, die unrelevanten Objekte wiederherauszulösche mit einer größer/kleiner-Entscheidung, hatte ich auch schon. Nur habe ich es so nicht hinbekommen. Wenn man die größer und kleiner Operatoren vertauscht, macht die Lisp das, was ich möchte Danke für die schnelle und kompetente Hilfe! Ich finde es super, dass es hier Leute gibt, die einen nicht im (Lisp-)Regen stehen lassen. Und falls ich eine neue Frage habe, werde ich ein neues Thema eröffnen. ------------------ Gruß Max Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|