Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Path von Part in Product herausfinden

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:  Path von Part in Product herausfinden (1390 mal gelesen)
mm-home
Mitglied
Referent Qualität

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

Beiträge: 9
Registriert: 17.03.2011

Catia V5-6 R24 SP01
HP Z220
32GB RAM

erstellt am: 04. Sep. 2015 14: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 zusammen,

ich bin derzeit am entwickeln einer Methode um den Speicherort von Elementen eines Products (Parts und andere Products)

per Marco herauszufinden und später in eine Datei zu schreiben. Hierbei habe ich dank Google (bin neu auf dem Gebiet)

schon einige Funktionen abbilden können. Wenn ich z.B. ein vorhandenes Unterproduct selektiere, dann funktioniert

das auflösen des Speicherpfades schon recht gut, egal wie "verschachtelt" die Struktur ist.

Bei der Benutzung des Macros in Verbindung mit einem Part sieht die Sache schon deutlich schlechter aus.

Hintergrund ist, dass wir die Strukturen immer zuerst im Visualization Mode laden, um performant zu bleiben.

Jedoch hab ich noch keine Methode gefunden, welche mir in diesem Fall den Speicherpfad des CatParts ausgibt.

Ein erster Ansatz war, dass ich die Fehlermeldung, welche in diesem Fall entsteht abfange und das Part nachträglich

in den Design Mode lade. Dies funktioniert bei mir jedoch nur, wenn das Part direkt unterhalb des Root-Products

hängt...

Kennt einer von euch eine Methode den Speicherpfad (gern auch den FullName) eines CatParts zu bestimmen, welches

sich im Visualization Mode befindet? Alternativ würde mir auch eine Logik helfen, welche das jeweilige Catpart in

den Design Mode stellt. Hier müsste die Lösung jedoch so allgemein sein, dass es egal ist, in welcher Tiefe das CatPart

liegt.

Anbei noch der Auszug, welcher den Selektor sowie das abfangen der Fehlermeldung etc. steutert.

Code:
Sub CATMain()

Dim E As Object

Dim MySelection As Object

Dim MyDoc

Dim Was(1)

Dim ZSB 'as integer

'Beginn der Routine

'Hier wollen wir herausfinden, ob ich mich in einer Part, GSD oder sonsigen "bearbeitenden" Workbench befinde

ZSB = 1

If Catia.GetWorkbenchID = "PrtCfg" or Catia.GetWorkbenchID = "CATShapeDesignWorkbench" Then

ZSB=0

End If

'Ab hier arbeiten geht es mit der Selektion sowie der Bearbeitung der selektierten Elemente weiter.
 
Set MyDoc = CATIA.ActiveDocument

Set MySelection = MyDoc.Selection
   
MySelection.Clear
   
Was(0) = "Product"

Was(1) = "Part"

'Wenn Selektion in einer Part-Workbench stattfindet wird in die folgende Unterroutine (if) gewechselt ansonsten (else)

if ZSB = 0 then

Was(0) = "Part"

Was(1) = "Part"

E = MySelection.SelectElement3(Was, "Bitte Part selektieren", False, CATMultiSelTriggWhenUserValidatesSelection, True)

else

Was(0) = "Product"

Was(1) = "Part"

E = MySelection.SelectElement3(Was, "Bitte Product oder Part selektieren selektieren", False, CATMultiSelTriggWhenUserValidatesSelection, True)

end if
   
If E = "Normal" Then

Pfad = ""

For I = 1 to MySelection.Count

If ZSB = 0 Then

Temp=MySelection.Parent.fullname 'Ausgabe des kompletten Pfades in den Parameter Truename

else

On Error Resume Next

set Truename = MySelection.Item(I).value

Temp = Truename.ReferenceProduct.Parent.FullName

'MsgBox("Felhermeldung " & Err.Description) 'Detektion, ob Selektion ein nicht geladenes Part geladen ist. Dies wird über die Auswertung der Fehlermeldung relaisiert.

If Err.Description = "Typenkonflikt" or Err.Description = "The method ReferenceProduct failed" then 'Detektion das ein Part selektiert wurde

'Ab hier haben wir erkannt, dass ein nicht geladenes Part in der Schleife ist.

MsgBox ("In Routine")

MsgBox MySelection.Item(I).value.source

Dim productDocument1 'As Document
Set productDocument1 = CATIA.ActiveDocument

Dim product1 'As Product
Set product1 = productDocument1.Product

Dim products1 'As Products
Set products1 = product1.Products

Dim product2 'As Product
Set product2 = products1.item(MySelection.Item(I).Value.Name)

product2.ApplyWorkMode DESIGN_MODE

Temp = Truename.ReferenceProduct.Parent.FullName

End If

End If

MsgBox("Speicherpfad kpl: " & Temp)

Next

'MsgBox (MySelection.Item(1).Value.Name)
       
Else
   
MsgBox "Abbruch"
       
End If

End Sub


Bei Rückfragen stehe ich gern zur Verfügung.

Vielen Dank.

Gruß mm-home


[Diese Nachricht wurde von mm-home am 04. Sep. 2015 editiert.]

[Diese Nachricht wurde von mm-home am 04. Sep. 2015 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: 04. Sep. 2015 15:00    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 mm-home 10 Unities + Antwort hilfreich

Servus
Kannst du dir von der Performance her erlauben die ganze Baugruppe in den DEFAULT_MODE zu schalten (siehe hier)

Gruß
Bernd

PS: Bitte den Code zwischen die vorgesehenen [Code]-Tags setzen.

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

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

mm-home
Mitglied
Referent Qualität

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

Beiträge: 9
Registriert: 17.03.2011

Catia V5-6 R24 SP01
HP Z220
32GB RAM

erstellt am: 04. Sep. 2015 15:09    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,

das muss ich mir anschauen, ob das mit dem DEFAULT_MODE so funktioniert.

Im Worst Case haben wir fast ein ganzes Auto (vom Blechumfang) her im Catia geladen.

Und da kann ich mir vorstellen, das dass Laden in den Default_Mode für den typischen

Endanwender zu lange dauert...

Werd ich nächste Woche aber auf jeden fall mal probieren.

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

mm-home
Mitglied
Referent Qualität

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

Beiträge: 9
Registriert: 17.03.2011

Catia V5-6 R24 SP01
HP Z220
32GB RAM

erstellt am: 07. Sep. 2015 11:00    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 habe jetzt den DEFAULT_MODE ausprobiert, jedoch lädt mir da Catia zuviel nach...

Bei meinem aktuellen Worst Case Szenario dautert das Laden in den DEFAULT_MODE 15 Minuten

und es werden 15GB an Daten nachgeladen.

Ich hab auch wie in deinem Hinweis zuerst den VISUALIZATION_MODE "geladen", was bei mir scheinbar

jedoch nichts bringt.

Übers Wochenende kam mir noch eine Idee, jedoch hab ich noch keine Methode "GetParent" gefunden

(oder ich stell mich gerade nur etwas an...)

Hintergrund ist, dass ich versuchen will die Struktur vom Part zum Root-Product aufzulösen,

um anschließend das Part geziehlt in den Design Mode stellen zu können.

Gruß Markus

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: 07. Sep. 2015 11: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 Nur für mm-home 10 Unities + Antwort hilfreich

Servus
Was ist beim Starten des Makros gegeben/bekannt? (Rootproduct und PartNumber des Parts)
Kommt im Exemplarnamen nicht die PartNumber vor, dass du einfach nach dieser suchen kannst?

Gruß
Bernd

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

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

mm-home
Mitglied
Referent Qualität

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

Beiträge: 9
Registriert: 17.03.2011

Catia V5-6 R24 SP01
HP Z220
32GB RAM

erstellt am: 07. Sep. 2015 18:15    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

Dere,

Was ist bei Starten Bekannt:

Bekannt ist auf jeden Fall der Name des Root-Products, da es ja vorab schon geöffnet sein muss.

Weiter ist nach der Selektion (mit dem Macro) auch der jeweilige Part-Name bekannt.

Was ist vorerst nicht bekannt:

In welcher Tiefe des Products liegt das selektierte Part.

Die PartNumber bzw. den Instance Name kann ich von dem selektierten Elemente bestimmen.

Gibt es eine Möglichkeit diesen anschließend zu suchen, zu selektieren und

in den DESIGN_MODE zu stellen?

Ich hab dies schon versucht, jedoch ohne Erfolg.

Für Ansätze und fertige Programmschnipsel bin ich offen.

Gruß Markus

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: 07. Sep. 2015 19:07    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 mm-home 10 Unities + Antwort hilfreich

Servus
Versuch es mal so.
Code:
Option Explicit

Sub CATMain()

Dim oRootDoc As Document
Dim osel As Object 'Selection
Dim oSelFilter(0)
Dim E As String
Dim oSelectedProduct As Product
Dim oParentProduct As Product
Dim sPartNumber As String

Set oRootDoc = CATIA.ActiveDocument
Set osel = oRootDoc.Selection

oSelFilter(0) = "Product"

E = osel.SelectElement2(oSelFilter, "Bitte Product wählen", True)
   
If E = "Normal" Then
    Set oSelectedProduct = osel.Item(1).Value
    Set oParentProduct = osel.Item(1).LeafProduct
    oParentProduct.ApplyWorkMode DEFAULT_MODE
    sPartNumber = oSelectedProduct.PartNumber

    MsgBox sPartNumber

End If

End Sub


(erkennen ob es sich um ein Part handelt bzw PartNumber und Pfad auslesbar sind fehlt)
Gruß
Bernd

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

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

mm-home
Mitglied
Referent Qualität

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

Beiträge: 9
Registriert: 17.03.2011

Catia V5-6 R24 SP01
HP Z220
32GB RAM

erstellt am: 08. Sep. 2015 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

Hallo Bernd,

vielen Dank für die Unterstützung.

Mit Hilfe deines letzten Beitrags konnte ich mir eine funktionierende Lösung zusammenstricken.

Ich vermute, dass dies an ".LeafProduct" liegt, dass es funktioniert.

Die Umsetzung ist Programmiertechnisch wohl nicht die eleganteste, erfüllt aber ihren Zweck.


Code:
Sub CATMain()

Dim E 'As Object

Dim MySelection 'As Object

Dim MyDoc

Dim Was(1)

Dim ZSB 'as integer

'Beginn der Routine

'Hier wollen wir herausfinden, ob ich mich in einer Part, GSD oder sonsigen "bearbeitenden" Workbench befinde

ZSB = 1

If Catia.GetWorkbenchID = "PrtCfg" or Catia.GetWorkbenchID = "CATShapeDesignWorkbench" Then

ZSB=0

End If

'Ab hier arbeiten geht es mit der Selektion sowie der Bearbeitung der selektierten Elemente weiter.
 
Set MyDoc = CATIA.ActiveDocument

Set MySelection = MyDoc.Selection
   
MySelection.Clear
   
Was(0) = "Product"

Was(1) = "Part"

'Wenn Selektion in einer Part-Workbench stattfindet wird in die folgende Unterroutine (if) gewechselt ansonsten (else)

if ZSB = 0 then

Was(0) = "Part"

Was(1) = "Part"

E = MySelection.SelectElement3(Was, "Bitte Part selektieren", False, CATMultiSelTriggWhenUserValidatesSelection, True)

else

Was(0) = "Product"

Was(1) = "Part"

'Hier erfolgt die Eigentliche Selektion durch einen User innerhalb des geöffneten Products.
'Die Selektion kann sowohl Parts als auch Products umfassen.

E = MySelection.SelectElement3(Was, "Bitte Product oder Part selektieren selektieren", False, CATMultiSelTriggWhenUserValidatesSelection, True)

end if
   
If E = "Normal" Then

Pfad = ""

For I = 1 to MySelection.Count

If ZSB = 0 Then

Temp=MySelection.Parent.fullname 'Ausgabe des kompletten Pfades in den Parameter Truename

else

On Error Resume Next

set Truename = MySelection.Item(I).value

Temp = Truename.ReferenceProduct.Parent.FullName

'MsgBox("Felhermeldung " & Err.Description) 'Detektion, ob Selektion ein nicht geladenes Part geladen ist. Dies wird über die Auswertung der Fehlermeldung relaisiert.

If Err.Description = "Typenkonflikt" or Err.Description = "The method ReferenceProduct failed" then 'Detektion das ein Part selektiert wurde

'Ab hier haben wir erkannt, dass ein nicht geladenes Part in der Schleife ist.


'Ab Hier ist ein Teil deines letzten Eintrages "verbaut".
'Die eigentliche Selektion der Elemente aus der Struktur erfolgt 15 zeilen weiter oben.


Dim oRootDoc 'As Document

Dim osel 'As Object Selection

Dim oSelFilter(1)

Dim AB 'As String

Dim oSelectedProduct 'As Product

Dim oParentProduct 'As Product

Set oRootDoc = CATIA.ActiveDocument

Set osel = oRootDoc.Selection

oSelFilter(0) = "Product"

oSelFilter(1) = "Part"

AB = osel.SelectElement2(oSelFilter, "Bitte nichts selektieren, da die Selektion schon eher erfolgt ist.", True)
 
If AB = "Normal" Then

    Set oSelectedProduct = osel.Item(I).Value

    Set oParentProduct = osel.Item(I).LeafProduct

    oParentProduct.ApplyWorkMode DEFAULT_MODE

End If

Temp = Truename.ReferenceProduct.Parent.FullName

End If

End If

MsgBox("Speicherpfad kpl: " & Temp)

Next
     
Else
   
MsgBox "Abbruch"
       
End If

End Sub


Gruß Markus

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