Autor
|
Thema: Properties auslesen (5424 mal gelesen)
|
linuxer Mitglied PDM Project Manager
Beiträge: 22 Registriert: 14.04.2006 Hp z400 Xeon 2,6GHz; WinXP32; Catia in den OEM-Versionen; PDM = OpenEDM
|
erstellt am: 31. Aug. 2010 12:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, unser PDM-System bügelt die CATIA - Properties über (Part Number, Revision, etc.). Jetzt dachte ich man könnte ein Makro schreiben um die Properties auszulesen und als UserDefProperties reinschreiben (diese werden nicht überschrieben). Aber wie? Habe momentan keinen Ansatz. Gruß Linuxer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 31. Aug. 2010 12:56 <-- editieren / zitieren --> Unities abgeben: Nur für linuxer
Servus Hier (und in der Doku) findest du wie UserDefinedproperties erstellt werden. Und mit: Code: set oProduct = CATIA.activedocument.product msgBox oProduct.PartNumber msgBox oProduct.Revision msgBox oProduct.Nomenclature ...
Kommst du an die "alten" (noch nicht überschriebenen) Wert ran.Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
linuxer Mitglied PDM Project Manager
Beiträge: 22 Registriert: 14.04.2006 Hp z400 Xeon 2,6GHz; WinXP32; Catia in den OEM-Versionen; PDM = OpenEDM
|
erstellt am: 31. Aug. 2010 13:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, so lange die Daten nicht im PDM gespeichert komme ich an die Porperties ran. Ich dachte das ich nach eine neuen PDM - Property frage und wenn die nicht vorhanden ist, die Properties auslesen und als UserDefine Properties reinschreibe. Gruß Linuxer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
linuxer Mitglied PDM Project Manager
Beiträge: 22 Registriert: 14.04.2006 Hp z400 Xeon 2,6GHz; WinXP32; Catia in den OEM-Versionen; PDM = OpenEDM
|
erstellt am: 02. Sep. 2010 08:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich habe jetzt zwei Scripte (eins für die Products und eins für die Part) um die Properties auszulesen und als UserRefProperties reinzuschreiben. Leider fehlt mir immer noch die Property "Description", an die komme ich einfach nicht ran! Bis jetzt laufen die beiden Scripte als Standalone, d.h. ich muss jedes einzelne Product oder Part einzeln machen. Wie verbinde ich jetzt die Scripte zu das ich es beim RootProduct starte und es alle Products und Parts innerhalb des Rootproducts bearbeitet. Gruß linuxer [Diese Nachricht wurde von linuxer am 02. Sep. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 02. Sep. 2010 08:33 <-- editieren / zitieren --> Unities abgeben: Nur für linuxer
Servus Um eine komplette Baugruppe zu bearbeiten, musst du diese rekursiv abarbeiten (siehe hier). gemäß Doku solltest du an die Description mit: oProduct.DescriptionRef kommen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
linuxer Mitglied PDM Project Manager
Beiträge: 22 Registriert: 14.04.2006 Hp z400 Xeon 2,6GHz; WinXP32; Catia in den OEM-Versionen; PDM = OpenEDM
|
erstellt am: 06. Sep. 2010 09:51 <-- editieren / zitieren --> Unities abgeben:
peinlich, peinlich Ich bekomme es einfach nicht hin diese beiden Scripte zu verbinden, so das die aus dem Root-Produkt laufen. Properties für CATPart gruß linuxer ich habe hier die einzelnen Scripte angehängt. [Diese Nachricht wurde von linuxer am 06. Sep. 2010 editiert.] [Diese Nachricht wurde von linuxer am 27. Nov. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 06. Sep. 2010 19:23 <-- editieren / zitieren --> Unities abgeben: Nur für linuxer
Hallo linuxer, ich würde dich auf folgende Beiträge hinweisen: Rekursiv durch das Baum Parameter im Parameterset (inkl. weiteres über rekursive Sachen) In letzteres habe ich auch versucht zu erklären, wie die ganze Objektstruktur von CATIA Products aufgebaut ist. Von den beiden Scripts sind die Zeilen ab 12 bis 41 redundant. Die kannst du mit einer klugen Funktion ersetzen, wenn du die Sachen aus den zweiten Beitrag begriffen hast. Dein Skript würde etwa folgender Struktur haben: -Hauptroutine *ActiveDocument prüfen und greifen *Objekt Product und Collection UserRefProperties an eine Funktion übergeben, der die Daten füllt *Rekursiv durch den Products laufen, Objekt und Collection an die Funktion übergeben -Funktion *Bekommt Objekt Product (hier stammen ja die Daten, die du übertragen willst *und Collecion UserProperties (hier werden ja die Parameter erzeugt, es ist x-mal in dein er Code drin). In etwa so (nicht getestet): Code:
Sub CATMain() dim oRoot as Document Set oRoot = Catia.ActiveDocument dim oProduct as Product Set oProduct = oRoot.Product dim oProducts as Products Set oProducts = oProduct.Products dim oRefProduct as product set oRefProduct = oProduct.ReferenceProduct Dim oUserRefProps As Parameters Set oUserRefProps = oRefProduct.UserRefProperties ChangeParameters oRefProduct, oUserRefProps SUB_ProdScan oProducts End Sub Sub ChangeParameters(oRefProduct as Product, oUserRefProps As Parameters) Dim strParam2 As StrParam Set strParam2 = oUserRefProps.CreateString("Cust PartNumber", "") strParam2.ValuateFromString oRefProduct.PartNumber 'usw. end Sub Sub SUB_ProdScan(oProducts as Products) For i = 1 to oProducts.Count dim oProduct as Product Set oProduct = oProducts.Item(i) dim oRefProduct as product set oRefProduct = oProduct.ReferenceProduct Dim oUserRefProps As Parameters Set oUserRefProps = oRefProduct.UserRefProperties ChangeParameters oRefProduct, oUserRefProps If oProduct.Products.Count > 0 Then Set oProductsUebergabe = oProduct.Products SUB_ProdScan oProductsUebergabe End If Next End Sub
Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
linuxer Mitglied PDM Project Manager
Beiträge: 22 Registriert: 14.04.2006 Hp z400 Xeon 2,6GHz; WinXP32; Catia in den OEM-Versionen; PDM = OpenEDM
|
erstellt am: 07. Sep. 2010 07:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, danke für deine Hilfe. Ich habe das Script ausprobiert und es stoppt bei SUB_ProdScan oProductsUebergabe mit der Meldung Fehler beim Kompilieren - Argumenttyp ByRef unverträglich Jetzt werde ich mich an die von dir aufgegebenen "Hausaufgaben" machen. gruß Linuxer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
linuxer Mitglied PDM Project Manager
Beiträge: 22 Registriert: 14.04.2006 Hp z400 Xeon 2,6GHz; WinXP32; Catia in den OEM-Versionen; PDM = OpenEDM
|
erstellt am: 07. Sep. 2010 09:27 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe jetzt den Code im Sub SUB_ProdScan(oProducts As Products) mit DIM oProductsUebergabe As Product erweitert und es funzt. Jetzt muss ich nur noch die InstanceName rüber bekommen. Gruß Linuxer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
linuxer Mitglied PDM Project Manager
Beiträge: 22 Registriert: 14.04.2006 Hp z400 Xeon 2,6GHz; WinXP32; Catia in den OEM-Versionen; PDM = OpenEDM
|
erstellt am: 07. Sep. 2010 11:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, hier der fertige Code (vielen danke an Zoltan). Code ----------------------------------------------- Dim version, makroname Sub CATMain() version = "1.0" makroname = "Properties kopieren" Dim oRoot As Document Set oRoot = CATIA.ActiveDocument Dim oProduct As Product Set oProduct = oRoot.Product Dim oProducts As Products Set oProducts = oProduct.Products Dim oRefProduct As Product Set oRefProduct = oProduct.ReferenceProduct Dim oUserRefProps As Parameters Set oUserRefProps = oRefProduct.UserRefProperties ChangeParameters oRefProduct, oUserRefProps SUB_ProdScan oProducts MsgBox "Makro ist beendet", vbInformation, makroname + " " + version End Sub Sub ChangeParameters(oRefProduct As Product, oUserRefProps As Parameters) Set oInstance = CATIA.ActiveDocument.Product.Products Dim strParam1 As StrParam Set strParam1 = oUserRefProps.CreateString("Cust Instance Name", "") strParam1.ValuateFromString oInstance.Item(1).Name Dim strParam2 As StrParam Set strParam2 = oUserRefProps.CreateString("Cust PartNumber", "") strParam2.ValuateFromString oRefProduct.PartNumber Dim strParam3 As StrParam Set strParam3 = oUserRefProps.CreateString("Cust Revision", "") strParam3.ValuateFromString oRefProduct.Revision Dim strParam4 As StrParam Set strParam4 = oUserRefProps.CreateString("Cust Definition", "") strParam4.ValuateFromString oRefProduct.Definition Dim strParam5 As StrParam Set strParam5 = oUserRefProps.CreateString("Cust Nomenclature", "") strParam5.ValuateFromString oRefProduct.Nomenclature Dim strParam6 As StrParam Set strParam6 = oUserRefProps.CreateString("Cust Description", "") strParam6.ValuateFromString oRefProduct.DescriptionRef End Sub Sub SUB_ProdScan(oProducts As Products) For i = 1 To oProducts.Count Dim oProduct As Product Set oProduct = oProducts.Item(i) Dim oRefProduct As Product Set oRefProduct = oProduct.ReferenceProduct Dim oUserRefProps As Parameters Set oUserRefProps = oRefProduct.UserRefProperties Dim oProductsUebergabe As Product ChangeParameters oRefProduct, oUserRefProps If oProduct.Products.Count > 0 Then Set oProductsUebergabe = oProduct.Products SUB_ProdScan oProductsUebergabe End If Next End Sub ---------------------------------------------------- Gruß Linuxer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 07. Sep. 2010 19:24 <-- editieren / zitieren --> Unities abgeben: Nur für linuxer
|