Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Geometrie von Polylinien vergleichen

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:  Geometrie von Polylinien vergleichen (1235 mal gelesen)
Maustreiber
Mitglied
Maustreiber

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

Beiträge: 9
Registriert: 05.04.2007

erstellt am: 26. Sep. 2007 13:55    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


MusterOhneDrehung.pdf


MusterMitDrehung.pdf

 
Hallo an alle Lisp-Fachleute,

ich habe in einer Zeichnung mehrere Polylinien die von der
Geometrie her gleich sind. Für die CNC-Bearbeitung müssen
nun alle gleichen zu einer Reihenfolge zusammengefasst
werden. Ganz genial wäre es wenn auch noch gedrehte
Polylinien erkannt werden.
(Grafisch dargestellt ist die Situation im Anhang!)

Da das anpicken auf Dauer ganz schön nervt, suche ich ein
Lisp-Programm (oder allgemeinen Algorithmus) um gleiche
Polylinien zu erkennen.

Für Hinweise, Lösungsansätze, Links, etc... wäre ich dankbar.

Viele Grüße
Maustreiber

------------------
Hier kommt die Maus...

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: 26. Sep. 2007 14: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 Maustreiber 10 Unities + Antwort hilfreich

Hallo Maustreiber,
als Ansatz würde ich evtl. über die Fläche der Polylinie gehen (es sieht so aus, als ob die einmalig ist), Polylinien mit gleicher Fläche zusmmenfassen und über die bounding-box in x- und y-Richtung sortieren.

Grüsse, Henning

(PS: Ah ja, Willkommen im Forum...)

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

      http://www.voxelman.de

[Diese Nachricht wurde von wronzky am 26. Sep. 2007 editiert.]

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

Theodor Schoenwald
Ehrenmitglied



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

Beiträge: 1672
Registriert: 16.04.2002

erstellt am: 26. Sep. 2007 15:58    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 Maustreiber 10 Unities + Antwort hilfreich

Hallo,

das geht so:
- Du wählst ein Objekt, und gibt Dir die Geometriedaten aus,
- danach suchst Du z.B. mit Lisp nach gleichen Konturen.
- Bevor Du die Geometrie zu CNC-Code machst, färbst Du die
  gefundenen Konturen.
- Nun gibst Du die Wegdaten (CNC-Code) in eine Datei.

Diesen Vorgang kannst Du so lange wiederholen bis keine ungefärbten Elemente mehr auf dem Bildschirm sind.

Der Vorteile der ganzen Sache sind:
a) Da CNC-Programm ist sehr schnell erstellt.
b) Es wird nichts vergessen.

Dieser Weg hat jedoch den Nachteil, dass durch die Auswahl mit ssget nicht bestimmt werden kann, welche Kontur aus der Gruppe "nach" der ersten Kontur an der Reihe ist. Deshalb kann (muss nicht) es sein, dass die Maschine ein Teil von oben links und das nächste von unten rechts bearbeitet. Die Maschine somit ein par längere Wege im Eilgang fährt. Das ist aber nur bei großen Platten nicht schön.
Mit einem Satz: Die G0-Wege (Eilgang) sind nicht optimiert.
Axel, hat in seinem Koch-Buch für AutoLisp beschrieben, wie man das nächste und das weiteste Teil bestimmen kann, wenn Du durch diese Anregung eine Lösung findest, ist auch der Nachteil "lange G0-Wege" aufgehoben.

Nun wünsche ich Dir fröhliches Programmieren.

Gruß
Theodor Schönwald


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

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 27. Sep. 2007 13:12    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 Maustreiber 10 Unities + Antwort hilfreich

Hallo Maustreiber,
wenn du auch gedrehte Polylinien vergleichen möchtest, schnappst du dir die Objektdaten und richtest alle Kontrollpunkte neu aus daß z.B. der erste Kontrollpunktauf 0,0 liegt und der zweite auf einer Linie im Winkel von 0°. Dann ein wenig mit "polar" rumgespielt um die anderen Kontrollpunkte um den Startpunkt zu drehen. Damit starten ALLE Polylinien ersmal in Richtung 0°. Das Ganze natürlich nur als Daten, blos nicht entmod verwenden. Diese Datenlisten kann man jetzt gut vergleichen.
Schwierig wirds nur wenn optisch identische Polylinien unterschiedliche Startpunkte in der Geometrie haben.

Gruß
Andreas

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

andi2050
Mitglied



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

Beiträge: 107
Registriert: 11.03.2003

erstellt am: 27. Sep. 2007 22:19    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 Maustreiber 10 Unities + Antwort hilfreich

Hallo !

Vielleicht hilft Dir folgender Code weiter:

Code:
(defun c:test (/ obj1 obj2)
  (setq obj1 (vlax-ename->vla-object (car (entsel "\nKontur 1 wählen:")))
obj2 (vlax-ename->vla-object (car (entsel "\nKontur 2 wählen:")))
  )
  (if (cmp lineobj obj1 obj2 1e-6)
    (alert "identisch")
    (alert "NICHT identisch")
  )
  (princ)
)
;;; Vergleicht zwei PlineObj (Bulges werden NICHT berücksichtigt)
;;; gedrehte Konturen werden als identisch erkannt
;;; Laufrichtung und Startpunkt müssen übereinstimmen, damit identische Konturen erkannt werden.
(defun cmp lineobj (obj1 obj2 fuzzy / pt1 pt-1 ang vek matrix matrixrot ptlist1 ptlist2 endpara1 endpara2 startpara)
  (and (= "AcDbPolyline" (vla-get-objectname obj1))
      (= "AcDbPolyline" (vla-get-objectname obj2))
      (= (setq endpara1 (vlax-curve-getendparam obj1)) (setq endpara2 (vlax-curve-getendparam obj2)))
      (equal (vlax-curve-getdistatparam obj1 endpara1) (vlax-curve-getdistatparam obj2 endpara2) 1e-6)
      (setq startpara (vlax-curve-getstartparam obj1)
    pt1      (vlax-curve-getpointatparam obj1 startpara)
    pt-1      (vlax-curve-getpointatparam obj2 startpara)
    ang      (- (angle pt-1 (vlax-curve-getpointatparam obj2 (1+ startpara)))
  (angle pt1 (vlax-curve-getpointatparam obj1 (1+ startpara)))
      )
    matrixrot (list (list (cos ang) (- (sin ang)) 0.0 0.0)
    (list (sin ang) (cos ang) 0.0 0.0)
    (list 0.0 0.0 1.0 0.0)
    (list 0.0 0.0 0.0 1.0)
      )
    vek      (mapcar '- pt-1 (cmp:trans pt1 matrixrot))
    matrix    (list (list (cos ang) (- (sin ang)) 0.0 (car vek))
    (list (sin ang) (cos ang) 0.0 (cadr vek))
    (list 0.0 0.0 1.0 (caddr vek))
    (list 0.0 0.0 0.0 1.0)
      )
      )
      (apply 'and
      (mapcar '(lambda (p1 p2) (equal p2 (cmp:trans p1 matrix) fuzzy))
      (cmp:get-pointlist obj1)
      (cmp:get-pointlist obj2)
      )
      )
  )
)
;;; Punkte aus Pline auslesen
(defun cmp:get-pointlist (obj / endpara para ptlist)
  (setq endpara (vlax-curve-getendparam obj)
para 0
  )
  (while (< para endpara)
    (setq ptlist (cons (vlax-curve-getpointatparam obj para) ptlist))
    (setq para (1+ para))
  )
  (reverse ptlist)
)
;;;---------------------------------------
;;; Transformiert Punkt durch Matize
;;; Argumente: p - Punkt
;;; m - Transformationsmatrix 4x4
;;; Rückgabe: Transformierter Punkt
;;;---------------------------------------
(defun cmp:trans (p m)
  (if (= (length p) 2)
    (setq p (append p '(0.0 1.0)))
    (setq p (append p '(1.0)))
  )
  (mapcar '(lambda (x) (apply '+ x))
  (list (mapcar '* p (car m)) (mapcar '* p (cadr m)) (mapcar '* p (caddr m)))
  )
)

Grüße

Andi

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

Ralf G
Mitglied
Unternehmer


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

Beiträge: 44
Registriert: 29.10.2004

IV8, SPI
PIV 3000 GK Nvidia Qudro4 380XGL

erstellt am: 27. Sep. 2007 22: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 Nur für Maustreiber 10 Unities + Antwort hilfreich

Hallo Maustreiber,


also die Fläche ist ein guter Tipp  denn es funktioniert auch bei Drehung und und mit Einschränkungen noch bei Spiegelungen - oder:

beim Erzeugen dieser Struktur Blöcke verwenden dann ist es ganz einfach gleiche herauszufinden auch wenn sie gedreht oder gespiegelt sind.

Dann kann man sie sammeln, den nächsten ermitteln, einen kopieren um 0,0, diesen explodieren, CNC code erstellen und alle nicht Block entities löschen und die Zeichnung bleibt wie sie ist.

Vielleicht hilfts, der ralf

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

Maustreiber
Mitglied
Maustreiber

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

Beiträge: 9
Registriert: 05.04.2007

erstellt am: 28. Sep. 2007 09:26    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 an alle Helfer!

erst mal vielen Dank dass sich alle die Köpfe heiß gedacht haben!

Ich habe dadurch wertvolle Hinweise bekommen die mich
in der Summe ein ganzes Stück weiter gebracht haben.

@Andi - Den Quellcode habe ich natürlich gleich ausprobiert.
Funktioniert mit meinen Polylinien leider nur bedingt.
Die Einschränkung, nur wenn die Startpunkte der Polylinie
identisch sind, behindert mich sehr. Gerade das ist bei
meinen nicht immer gegeben. Ich werde hier ansetzten und
versuchen den Code auszubauen und für mich passend zu
bekommen. Jedenfalls vielen Dank !!

Falls es weitere Einfälle gibt, ich bin weiterhin für alle
Tipps und Anregungen dankbar.

Viele Grüße
Maustreiber 

------------------
Hier kommt die Maus...

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