| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Objekte die sich überschneiden (966 mal gelesen)
|
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 01. Aug. 2008 12:02 <-- editieren / zitieren --> Unities abgeben:
|
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 01. Aug. 2008 12:09 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 01. Aug. 2008 15:01 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
Und wenn dir die Punkte nicht bekannt sind kannst du vielleicht mit: (setq ent_name (car (entsel "Rechteck wählen : "))) (print "Kreise wählen : ") (setq satz (ssget)) (setq n (1- (sslength satz))) (repeat (sslength satz) (setq x (vlax-invoke-method (vlax-ename->vla-object ent_name) 'intersectwith (vlax-ename->vla-object (setq e_name (ssname satz n))) acextendnone ) ) (if (/= -1 (vlax-safearray-get-u-bound (vlax-variant-value x) 1 ) ) (print e_name) ) (setq n (1- n)) ) was machen Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 04. Aug. 2008 10:17 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe das Programm so geschrieben. Der funktioniert aber nicht richtig. Sehe die DWG im Anhang es werden nicht alle Kreise (Blöcke) gelöscht die, die Kontur überschneiden. Was habe ich falsch gemacht? (defun C:SAUGER ( / Auswahl_0 Auswahl_1 Auswahl_2 ) (setq Auswahl_0 (car (entsel))) (if (/= (cdr(assoc 0 (entget Auswahl_0))) "LWPOLYLINE" ) (alert "Schnittkontur ist keine Polylinie. Bitte bearbeiten!!!") (progn (setq Auswahl_1 (vl-remove-if-not '(lambda (ED) (= (car ED) 10) ) (entget Auswahl_0) ) Auswahl_2 (mapcar 'cdr Auswahl_1) );_setq (command "_erase" (ssdel Auswahl_0 (ssget "_F" Auswahl_2)) "") );_end progn );_end if )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 04. Aug. 2008 10:30 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
Also ein Problem entsteht dadurch, dass du Bögen in den PLs verwendest - diese werden aber bei deiner Punkteermittlung nicht mitaufgenommen. Somit entsteht hier schon mal ein Fehler - warum aber manche Punkte (obwohl diese richtig übergebne werden) keine Elemente mitaufnehmen ist mir nicht ganz klar... (an der Präzision liegt es nicht...) ------------------ Grüsse Thomas Korrekturen zum Kochbuch AutoLISP [Diese Nachricht wurde von tunnelbauer am 04. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 04. Aug. 2008 10:46 <-- editieren / zitieren --> Unities abgeben:
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
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: 04. Aug. 2008 11:33 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
Hallo, Du könntest mit der Methode vla-intersectwith testen, ob sich die Elemente (Polylinie + Kreis) schneiden (also mehr als 0 Schnittpunkte im Array). Wenn dem so ist, dann löschen... ABER: vla-intersectwith ist mit Blöcken problematisch. Du müsstest erst den Block auflösen, die erhaltenen Elemente testen, und abhängig vom Ergebnis das Original löschen / behalten. 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 |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 04. Aug. 2008 11:39 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
Guten Morgen zusammen, Code:
(defun draw (#pllst) (command "_line" (car #pllst)) (foreach point (cdr #pllst) (command point)) (command "") )
Aufruf : (draw Auswahl_2) Verwende oben stehenden Code um deine Punkteliste nachzufahren, dann müsstest du erkennen, wo das Problem ist.Nun wandelst du den Code ab und siehst, daß einfach der erste Punkt an die cdr-Liste angehängt wird, es wird also geschlossen ;) Code: (defun draw (#pllst) (command "_line" (car #pllst)) (foreach point (append (cdr #pllst) (list (car #pllst))) (command point) ) (command "") )
Ja und dann hat Tunnelbauer ja schon richtig erkannt, daß in der Polylinie ein Bogen drin ist. ------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |