Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Aus geöffnetem CatProduct einzelne CatParts öffnen

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
  
Dassault PLM Integrationen mit der 3DViewStation
Autor Thema:  Aus geöffnetem CatProduct einzelne CatParts öffnen (144 / mal gelesen)
JoFa97
Mitglied
Student


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

Beiträge: 20
Registriert: 24.10.2023

CATIA V5

erstellt am: 22. Apr. 2024 13:40    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 zusammen,
ich habe folgende Situation:
mein aktives Dokument ist ein CATProduct eines Getriebes. Ich iteriere davon durch den Strukturbaum durch alle Parts und greife verschiedene Daten ab über Vb.net.
Die Iteration durch den Strukturbaum ist eine separate Funktion und hier nicht dargestellt. Wenn ich beim jeweiligen Part angekommen bin, sieht meine Funktion zur Datenextraktion so aus:

Code:

Private Shared Sub WritePartParameters(part As Product, sw As StreamWriter, Part_Name_Count As Integer)
            Dim Name = part.Name
            Dim Mass = Create_Inertia_mass(part)
            Dim Volume = Create_Volume(part)
            Dim Surface = Create_Area(part)
            Dim Gravity = Create_Gravity(part)
            Dim Inertia_Matrix = Create_Inertia_Matrix(part)
            Dim Inertia_Principal_Axes = Create_Principal_Axes(part)
            Dim Inertia_Principal_Moments = Create_Principal_Moments(part)
            sw.WriteLine(Name + ";" + Mass + ";" + Volume + ";" + Surface + ";" + Gravity + ";" + Inertia_Matrix + ";" + Inertia_Principal_Axes + ";" + Inertia_Principal_Moments + ";")
        End Sub

So weit alles gut.

Nun soll dem eine Funktion hinzugefügt werden, nämlich zum Erstellen einer Bounding Box. Diese Funktion funktioniert auch fehlerfrei, aber bis jetzt nur auf manuell geöffnete Parts, die dann das Active Document sind. Der Anfang der Funktion sieht so aus:

Code:

        Public Shared Sub Bounding_Box(part)
            Dim CATIA As Object
            CATIA = GetObject(, "CATIA.Application")

            Dim partDocument1 = CATIA.ActiveDocument

            Dim part1 = partDocument1.Part

            ...


Jetzt ist es so, dass diese Funktion halt den geöffnete Part als ActiveDocument benötigt.
Ich weiß, dass es Möglichkeiten gibt über Documents.Open(Filepath) oder Systems.IO....(Filepath) diese Parts zu öffnen, allerdings ist das relativ umständlich (viele Parts enthalten Leerzeichen, diese werden von dem Befehl nicht angenommen. Ich müsste als vorher eine Funktion schreiben diese alle umzubenennen), und außerdem nicht sehr robust.

Gibt es eine Möglichkeit, da ihr ja mein Vorgehen jetzt seht, das ganze so wie bei den anderen Funktionen auch, über den Übergabeparameter "part" zu lösen?
Wie kann ich die Parts, da ich ja eh durch den Strukturbaum iteriere, zu gegebener Zeit möglichst leicht öffnen um meinen Bounding Box Code darauf anzuwenden?

Es wäre SUPER, wenn mir da jemand weiterhelfen kann.

Danke und Liebe Grüße

------------------
Joshua

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: 11948
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 22. Apr. 2024 13:49    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 JoFa97 10 Unities + Antwort hilfreich

Servus Joshua

Wenn du schon über den Baum einer Baugruppe iterierst kommst du von der Instanz zB:

Code:
Set PartProduct = MyInstance.ReferenceProduct
Set PartDocument = MyInstance.ReferenceProduct.Parent
auf das jeweilige Product/Document des PartDocuments.
Dann benötigst du das Part als ActiveDocument nicht unbedingt.
Warum willst du nochmal per GetObject auf Catia zugreifen? Einmal am Anfang deines Programms sollte ja reichen, und dann nur die Variable/das Object übergeben oder als globales Object nutzen.

Gruß
Bernd

PS: Warum Leerzeichen bei Dateinamen solche Probleme bei dir verursachen erschließest sich mir nicht.

PS2: Wie wird es bei zB Create_Inertia_mass gemacht? Da wird ja auch das Part (Product des Parts) übergeben.

------------------
Warum einfach, wenn es auch kompliziert geht.

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

JoFa97
Mitglied
Student


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

Beiträge: 20
Registriert: 24.10.2023

CATIA V5

erstellt am: 23. Apr. 2024 09:37    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, ich probiere jetzt also erstmal aus:
- Übergabe von part als Parameter
- Dim PartDocument = part.ReferenceProduct.Parent
- CATIA.Documents.Open(PartDocument)

Ich weiß nicht, ob das das ist, was du meinst.
Ich habe mal im Forum geschaut, im Prinzip ist mein Problem ja ein ähnliches wie das hier:
https://ww3.cad.de/foren/ubb/Forum137/HTML/006872.shtml, nur dass ich kein SubProduct, sondern einen Part öffnen möchte.


Bzgl "Dann benötigst du das Part als ActiveDocument nicht unbedingt.", bin ich mir halt unsicher, mein Skript bezogen auf einen in Catia geöffneten CatPart erstellt ein Achsensystem, fügt eine Powercopy ein etc., und mit dem Übergabeparameter, wie ich es zb. bei Inertia mache, hat es nicht funktioniert. Deshalb bin ich davon ausgegangen, der Part muss tatsächlich geöffnet sein als ActiveDocument.

Zum PS: Leerzeichen und Ausrufezeichen werden vom .Open Befehl über den Path tatsächlich nicht erkannt

Zum PPS:
Als Übergabeparameter für diese Funktionen kriegen sie den Part, das ActiveDocument ist aber das Product.

Hier ist mein Code, ich markiere die Zeile, welche im Strukturbaum des Products die Parts sucht, und diesen dann als Return wiedergibt für meine Funktionen:

Code:

        Public Shared Sub ProcessProduct(product As Product, sw As StreamWriter, ByRef Part_Name_Count As Integer)
            For Each component As AnyObject In product.Products
                If component.Products.Count > 0 Then
                    ProcessProduct(component, sw, Part_Name_Count)
                Else
                    Dim part = component ''Diese Zeile gibt den Part wieder, die nächste wendet die Funktionen an''
                    WritePartParameters(part, sw, Part_Name_Count)
                    Part_Name_Count += 1
                End If
            Next
        End Sub


------------------
Joshua

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 733
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 23. Apr. 2024 09:59    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 JoFa97 10 Unities + Antwort hilfreich

Hallo,
bei deiner Funktion Create_Inertia_mass übergibst du das Product (lediglich der Name der Variablen lautet "Part").
Für deine BoundingBox (vermute ich) brauchst du aber den Typ "PartDocument" (und davon "abgeleitet" sicher auch das Part).

Gruß Randle

------------------
Planung ersetzt Fehler durch Irrtum!

[Diese Nachricht wurde von Randle am 23. Apr. 2024 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: 11948
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 23. Apr. 2024 12:04    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 JoFa97 10 Unities + Antwort hilfreich

Servus Joschua

Schau dir mal die anderen Funktionen/Routinen (zB Inertia_Matrix) an, was die aus dem übergebenen Product (vermutlich eine Instanz) machen.
ggf kannst du da was abkupfern.
Und nur dass dein Beispiel-Makro mit dem ActiveDocument arbeitet heißt nicht dass du das auch so machen muss.

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)2024 CAD.de | Impressum | Datenschutz