Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Makro unbekannte Anzahl an Intersections

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
Autor Thema:  Makro unbekannte Anzahl an Intersections (784 / mal gelesen)
malker00
Mitglied


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

Beiträge: 4
Registriert: 09.05.2020

erstellt am: 09. Mai. 2020 10:17    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


Intersections_Beispiel.png.png

 
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


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 09. Mai. 2020 10:47    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 malker00 10 Unities + Antwort hilfreich

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


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

Beiträge: 4
Registriert: 09.05.2020

erstellt am: 09. Mai. 2020 13:51    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 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


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

Beiträge: 4
Registriert: 09.05.2020

erstellt am: 18. Mai. 2020 16:29    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


intersect_complete.PNG


intersect_failure.PNG


Code.txt

 
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


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 18. Mai. 2020 19:57    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 malker00 10 Unities + Antwort hilfreich

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


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

Beiträge: 4
Registriert: 09.05.2020

erstellt am: 18. Mai. 2020 21: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


Strukturbaum_CAD.PNG


Code.txt

 
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


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 19. Mai. 2020 18:53    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 malker00 10 Unities + Antwort hilfreich

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

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