Autor
|
Thema: Parts eines Products schnell auslesen! (2455 mal gelesen)
|
cscp Mitglied
Beiträge: 48 Registriert: 10.05.2013 Win 10, CATIA V5R20
|
erstellt am: 08. Dez. 2015 17:20 <-- editieren / zitieren --> Unities abgeben:
Hi, per VB lese ich alle Parts eines Products aus (inkl. zugehöriger Daten wie Name, Masse, Schwerpunkt, ...). For i = 1 To CATIA.ActiveDocument.Product.Products.Count ... Dim InstanzenName = CATIA.ActiveDocument.Product.Products.Item(i).Name ... Next Das dauert allerdings so relativ lange... Gibt es eine schnellere Lösung dafür?
Danke im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 08. Dez. 2015 17:32 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
|
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 09. Dez. 2015 11:15 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
Hallo, man könnte auch alle geladenen Dokumente durchgehen. For each oDoc in CATIA.Documents Select Case TypeName(odoc) case "PartDocument": mach irgendwas mit dem Part case "ProductDocument": mach irgendwas mit dem Product case else: mach was anderes End Select Next Allerdings sollte man dann bevor man das Makro auf eine Baugruppe loslässt die CATIA Sitzung neu starten, damit nicht noch andere (nicht zu der Baugruppe gehörenden) Teile mit ausgelesen werden. Bei deiner Vorgehensweise führst du unter Umständen das Auslesen der Parameter mehrfach durch (wenn z.B. ein Part 5 mal in der Baugruppe verbaut ist). Andere Vorgehensweise wäre den Dateinamen der bereits ausgelesenen Parts zwischenzuspeichern und VOR dem Auslesen des nächsten Modells den Dateinamen zu überprüfen (ob dieses bereits ausgelesen/bearbeitet wurde) und ggf. zu überspringen. Gruß Randle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cscp Mitglied
Beiträge: 48 Registriert: 10.05.2013 Win 10, CATIA V5R20
|
erstellt am: 11. Dez. 2015 11:26 <-- editieren / zitieren --> Unities abgeben:
- was ist relativ? Braucht bei 80 Parts schon ca. 15 Sekunden... denke dass muss auch irgendwie schneller gehen. - wieviele Teile sind's denn? Unterschiedlich... in dem Beispiel ca 80 - steht irgendwo ein 'Debug.Print' o.ä.? Nein @Randle: Interessant. Ist das schneller als meine Methode? DANKE für die Hilfe
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 11. Dez. 2015 12:20 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 11. Dez. 2015 12:32 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
|
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 12. Dez. 2015 13:51 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
Hallo, @Randle: Interessant. Ist das schneller als meine Methode? Das wäre nicht unwahrscheinlich. Aber solange du nicht, wie von anderen schon erwähnt, uns deinen Quellcode zeigst ist das nicht mit absoluter Sicherheit zu sagen. 15 Sekunden für 80 Parts finde ich (zu)viel, unabhängig davon welche (also auch eine "schlechte/re") Methode man verwendet. Gruß Randle [Diese Nachricht wurde von Randle am 12. Dez. 2015 editiert.] [Diese Nachricht wurde von Randle am 14. Dez. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cscp Mitglied
Beiträge: 48 Registriert: 10.05.2013 Win 10, CATIA V5R20
|
erstellt am: 15. Dez. 2015 13:40 <-- editieren / zitieren --> Unities abgeben:
Ich lese für jedes Part diese Infos aus: NameInstanznameFilenameMasseüber Analyze.Mass() Schwerpunktslageüber ReferenceProduct.Analyze.GetGravityCenter(...) Trägheitsmatrixüber ReferenceProduct.Analyze.GetInertia(...) Ursprungüber Position.GetComponents(...) Orientierungüber Position.GetComponents(...) FarbeÜber Code: Dim oSel = CATIA.ActiveDocument.Selection oSel.Search("Name=" & obj.Name & ",all") Dim visProp As VisPropertySet visProp = oSel.VisProperties visProp.GetVisibleColor(r, g, b)
Braucht ihr noch mehr Infos? [Diese Nachricht wurde von cscp am 15. Dez. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 15. Dez. 2015 14:21 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
|
cscp Mitglied
Beiträge: 48 Registriert: 10.05.2013 Win 10, CATIA V5R20
|
erstellt am: 15. Dez. 2015 16:20 <-- editieren / zitieren --> Unities abgeben:
War leider nicht im Haus... deswegen erst jetzt... Naja wie gesagt, ich hab diese Schleife Code:
For i = 1 To parentProduct.Products.Count Dim partObj = parentProduct.Products.Item(i) Dim instName= partObj.Name Dim prodName= partObj.ReferenceProduct.Name Dim fileName= partObj.ReferenceProduct.Parent.Name Dim mass = GetMassV2(partObj) Dim cg= GetCGV2(partObj) Dim inertia= GetInertiaV2(partObj) Dim orientation= GetOrientationV2(partObj) Dim origin= GetOriginV2(partObj) Dim custColor= GetColor(partObj) Next
Wie die Funktionen auf die einzelnen Daten kommen, habe ich ja schon im vorhergehenden Beitrag geschrieben. Wird noch etwas gebraucht? Vielen Dank schon Mal! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 15. Dez. 2015 16:34 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 15. Dez. 2015 16:38 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
Servus Meiner Ansicht nach sind die langsamen Sachen in deiner Schleife "GetMass", "GetInertia" und "GetColor". "GetColor" kann vermutlich schneller gehen wenn du die Suche weg lässt und einfach das Product selektierst ("oSel.Add partObj"). Um herauszufinden welcher schritt langsam ist kannst du ja nach jedem Schritt dir ein Timestamp ausgeben (MsgBox, Konsole, Textdatei, ..) lassen. Gruß Bernd PS: ggf kannst du auch den Export der Trägheitsmessung verwenden. Leider wird da AFAIR nur der Exemplarname ausgegeben. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cscp Mitglied
Beiträge: 48 Registriert: 10.05.2013 Win 10, CATIA V5R20
|
erstellt am: 15. Dez. 2015 16:52 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 15. Dez. 2015 17:40 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
Servus Ist das bei allen Products so? Oder nur bei Unterbaugruppen? Du kannst mal testen ob die Messungen über die SPAWorkbench schneller gehen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 15. Dez. 2015 18:50 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
Hallo, die VB-Functionen sind immer in einer DLL, zB vba6.dll, vb6ide.dll. Ein Dim mit gleichzeitiger Zuweisung des Wertes ist in VB6/VBA nicht zulässig. Das
Code:
Dim instName= partObj.Name
geht in VB6/VBA nicht. Nochmal: Womit programmierst Du? Weiterhin: Die Funktionen GetMassV2, GetCGV2, GetInertiaV2, GetOrientationV2, GetOriginV2, GetColor sind nicht Teil von der CAA, also vermutlich Eigengewächse in Deiner Spezial-DLL. Um sagen zu können, wo die Zeit verloren geht, müsste der Quell-Code dieser Funktionen bekannt sein. So ist nix nachvollzieh- oder beurteilbar. Tschau, Joe
------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 15. Dez. 2015 21:24 <-- editieren / zitieren --> Unities abgeben: Nur für cscp
Um mal die Ausgangsfrage zu beantworten: Ja, kann sein. Nachfolgen ein VBA6.5-Skript zur Demo:
Code:
Sub catmain() Dim oProd As Product Dim strInstName As String Dim strRefProdName As String Dim strRefParentNum As String Dim oInertia As AnyObject Dim dblMass As Double Dim dCoord(2) Dim tmStart As Single Dim tmEnd As Single Dim oSel As Selection Dim oVisProps As Object 'VisPropertySet Dim lClr(2) As Long Dim i As Integer Dim n As Integer tmStart = Timer For i = 1 To CATIA.ActiveDocument.Product.Products.Count Set oProd = CATIA.ActiveDocument.Product.Products.Item(i) strInstName = oProd.Name strRefProdName = oProd.ReferenceProduct.Name strRefParentName = oProd.ReferenceProduct.Parent.Name Next tmEnd = Timer Debug.Print "Time First: " & vbTab & tmEnd - tmStart tmStart = Timer For i = 1 To CATIA.ActiveDocument.Product.Products.Count Set oProd = CATIA.ActiveDocument.Product.Products.Item(i) Set oInertia = oProd.GetTechnologicalObject("Inertia") dblMass = oInertia.Mass oInertia.GetCOGPosition dCoord Next tmEnd = Timer Debug.Print "Time Second: " & vbTab & tmEnd - tmStart tmStart = Timer For i = 1 To CATIA.ActiveDocument.Product.Products.Count Set oSel = CATIA.ActiveDocument.Selection oSel.Clear oSel.Add CATIA.ActiveDocument.Product.Products.Item(i) Set oVisProps = oSel.VisProperties oVisProps.GetRealColor lClr(0), lClr(1), lClr(2) Next tmEnd = Timer Debug.Print "Time Third: " & vbTab & tmEnd - tmStart End Sub
Typische Ergebnisse: Time First: 0,0078125 Time Second: 13 Time Third: 0,0703125 Time First: 0,015625 Time Second: 12,95313 Time Third: 0,0625 für einen ZB mit 38 Parts/Products. Ausserdem: Die Auflösung von 'Timer' ist nicht sonderlich gut. Der Zeitfresser ist wohl die 'Inertia'. Tschau, Joe ------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |