| |
 | CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min 48 |
| |
 | Dassault PLM Integrationen mit der 3DViewStation, eine Pressemitteilung
|
Autor
|
Thema: Makro unbekannte Anzahl an Intersections (1109 / mal gelesen)
|
malker00 Mitglied
 Beiträge: 4 Registriert: 09.05.2020
|
erstellt am: 09. Mai. 2020 10:17 <-- editieren / zitieren --> Unities abgeben:         
Hallo Community, ich arbeite aktuell an der automatischen Generierung eines CAD-Modells in Catia V5/R28 über VBA in der Excel-Umgebung. Ich hatte gehofft über das Herdenwissen einen kleinen Denkanstoß zu bekommen (Ich arbeite noch nicht lange mit VBA/Markos). Seit einiger Zeit habe ich mich bei nachfolgendem Problem festgefahren: - Ziel ist es eine beliebige Kontur (2D, nicht gekrümmt) mit einer Linie/Ebene variabler Orientierung zu verschneiden und jeden resultierenden Punkt als individuelle Geometrie abzulegen (keine Multi-Selection) - Daraus ergeben sich zwangläufig folgende mögliche Ergebnisse (Exemplarisches Beispiel siehe Anhang 1): 1) Extrempunkt an Unstetigkeitsstelle --> 1 Schnittpunkt 2) Normalfall: Ebene/Linie schneidet die Kontur in 2 Punkten 3) Sonderfall: beliebig viele Schnittpunkte Die Möglichkeit die Punkte über Near/Far zu bestimmen kommt nicht in Frage, da die Anzahl der Elemente aus dem Intersection-Befehl nicht bekannt ist. Besteht die Möglichkeit die Anzahl der Elemente einer Multi-Selection auszugeben? Ich habe daran gedacht über den Befehl "Extrema" die Punkte iterativ zu entfernen. Daran bin ich leider gescheitert. Sehr wahrscheinlich denke ich viel zu kompliziert und die Lösung ist super simpel und nahe liegend. Ich erwarte keinen ausgeführten Code, viel mehr hilft mir ein Vorschlag für eine Zielführende Methodik. Bitte sagt mir, wenn ich das Problem nicht eindeutig oder ausreichend beschrieben habe. Vielen Dank für eure Hilfe!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Mai. 2020 10:47 <-- editieren / zitieren --> Unities abgeben:          Nur für malker00
Servus Willkommen im Forum. Ich habe dazu zwei Ideen: - Punkte per "zerlegen" aus der Verschneidung erzeugen (es entstehen nur isolierte Punkte, AFAIK
nur per StartCommand im Makro realisierbar)
- Verschneidung selektieren -> in Selektion nach Scheitelpunkten (Vertex) suchen -> Selektion per Schleife abarbeiten -> Punkte per AddNewExtract erzeugen
Zur zweiten Idee einen Beispielcode (aus einer Makroaufzeichnung zusammen gebsatelt): Code: Sub CATMain()Dim partDocument1 As Document Dim selection1 As Selection Dim part1 As Part Dim hybridShapeFactory1 As Factory Dim hybridBodies1 As HybridBodies Dim hybridBody1 As HybridBody Dim hybridShapes1 As HybridShapes Dim hybridShapeIntersection1 As HybridShape Dim reference1 As Reference Dim hybridShapeExtract1 As HybridShapeExtract Set partDocument1 = CATIA.ActiveDocument Set selection1 = partDocument1.Selection Set part1 = partDocument1.Part Set hybridShapeFactory1 = part1.HybridShapeFactory Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item("Geometrisches Set.1") Set hybridShapes1 = hybridBody1.HybridShapes Set hybridShapeIntersection1 = hybridShapes1.Item("Verschneiden.1")
selection1.Clear selection1.add hybridShapeIntersection1 selection1.Search "Topology.CGMVertex,sel" if selection1.count <> 0 then for i = 1 to selection1.count Set reference1 = selection1.item2(i).Reference Set hybridShapeExtract1 = hybridShapeFactory1.AddNewExtract(reference1) hybridShapeExtract1.PropagationType = 3 hybridShapeExtract1.ComplementaryExtract = False hybridShapeExtract1.IsFederated = False hybridBody1.AppendHybridShape hybridShapeExtract1 part1.InWorkObject = hybridShapeExtract1 next part1.Update end if End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
malker00 Mitglied
 Beiträge: 4 Registriert: 09.05.2020
|
erstellt am: 09. Mai. 2020 13:51 <-- editieren / zitieren --> Unities abgeben:         
Hallo Bernd, Riesen Dank für deine schnelle Antwort und das Skript. Das ist genau das, was ich erzielen wollten. Damit kann ich viel anfangen und setze mich jetzt daran, es in meine Routine einzubauen. Ich gebe dir dazu noch einmal eine Rückmeldung  Beste Grüße, Christian [Diese Nachricht wurde von malker00 am 09. Mai. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
malker00 Mitglied
 Beiträge: 4 Registriert: 09.05.2020
|
erstellt am: 18. Mai. 2020 16:29 <-- editieren / zitieren --> Unities abgeben:         
Hallo Bernd, beim Selektieren der Scheitelpunkte bin ich auf folgendes Problem gestoßen, welches ich mir nicht erklären kann: Z.B. wird die vorliegende Kontur mehrmals verschnitten und ist Symmetrisch. Die Verschneidungen haben entweder 1,2 oder 4 Schnittpunkte. Bis zu einem bestimmten Zeitpunkt werden alle Scheitelpunkte wie geplant extrahiert und separat abgelegt. Dann läuft die Schleife nicht mehr durch und es werden nicht mehr die richtige Anzahl an Punkten gezählt. Die angehängte Bilder zeigen die letze durchlaufende Verschneidung (4 existierende Punkte --> MsgBox Selection.Count "4") und den Zeitpunkt des Fehlers (4 existierende Punkte ---> MsgBox Selection.Count "3") Hast du noch einen Tipp wo ich hier noch einmal nachhelfen kann?
Den Code habe ich der Vollständigkeit halber nocheinmal angehängt. Die relevante Passage am Ende habe ich aber 1:1 übernehmen können und ist mit dem Kommentar "Multisection Befehl in einzelne Punkte separieren" gekennzeichnet Vielen Dank bereits im Voraus & Beste Grüße Chris [Diese Nachricht wurde von malker00 am 18. Mai. 2020 editiert.] [Diese Nachricht wurde von malker00 am 18. Mai. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 18. Mai. 2020 19:57 <-- editieren / zitieren --> Unities abgeben:          Nur für malker00
Servus Was ist an der Verschneidung anders? Wir die Schleife aufgerufen (zB schrittweise abarbeiten)? Kommt eine Fehlermeldung? Werden die Punkte vielleicht nur nicht im GeoSet abgelegt? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
malker00 Mitglied
 Beiträge: 4 Registriert: 09.05.2020
|
erstellt am: 18. Mai. 2020 21:12 <-- editieren / zitieren --> Unities abgeben:         
Danke für deine erneut schnelle Antwort. Die Verschneidung ist Teil einer Powercopy. Demnach ist jede Verschneidung an sich von gleicher Natur. Eine beliebige geschlossene Kontur wird schrittweise an diskreten Punkten (alle 50 mm) über ihren Querschnitt "abgetastet". Ungewöhnlicherweise laufen einige Intersections mit 4 Schnittpunkten durch bevor das Skript stockt. Offensichtlich sind für die Verschneidung bei der das Skript stockt 4 Scheitelpunkte vorhanden. Über 'Selection.Search "Topology.CGMVertex,sel" ---> MsgBox Selection.Count' wird lediglich der Wert 3 zurückgegeben. Für alle vorangegangenen Verschneidungen, werden die Punkte "von oben nach unten" abgearbeitet. Für die "kritische" wird als erster Punkt der im Anhang markierte extrahiert. Der zweite und dritte Punkt wird zwar als leere Geometrie erstellt, hat jedoch keinen Bezug mehr zur Verschneidung. Dadurch das der der Selection-Zähler nur 3 Punkte findet, wird die Schleife freilich bei i=3 abgebrochen. An der zx-Ebene gespiegelt läuft der Befehl bei mehreren Verschneidungen mit 4 Punkten einwandfrei durch. Die Fehlermeldung im VBA-Editor ist dann letztlich die, dass das CAT-Part nicht upgedated werden kann, da die Extracts keinen Bezug haben. Kann ich irgendeinen Teil detaillierter beschreiben? Tut mir leid, wenn ich das Ganze etwas unpräzise ist. (Code liegt wieder Anhang) VG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Mai. 2020 18:53 <-- editieren / zitieren --> Unities abgeben:          Nur für malker00
Servus Irgendwas scheint an diesen Scheitelpunkten anders zu sein. Vermutlich wird bei diesen die Referenz nicht richtig gebildet. Du kannst ja mal schauen ob die Referenz dieser Scheitelpunkte anders aussieht (Name, DisplayName, ...). Und mal testen wie eine manuell erzeugte Referenz von diesen "besonderen" Punkten aussieht (ggf per Makrorekorder) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |