Autor
|
Thema: Instanzname mit Partname im gesamten Produkt abgleichen (1845 / mal gelesen)
|
Norman Schulz Mitglied Konstrukteur Catia V4/V5
Beiträge: 300 Registriert: 18.03.2002 V5R19SP9 // V5R20SP7 //V5R24SP5 Lizenz MD2 Lenovo ThinkPad W540 WIN 7 64bit 16GB Intel i7-4800MQ 2.7GHz
|
erstellt am: 18. Mrz. 2016 04:44 <-- editieren / zitieren --> Unities abgeben:
Hallo, wenn ich schon mal am Schreiben bin ;-) Bei dem Makro kann ich leider nur die erste Produktebene "abgleichen". Hat jemand eine Idee, wie es erweitert werden muss, damit alle Unterprodukte/Parts mit dem Teilename aktualisiert werden? Danke für jeden Tip. 'Renames items in the tree, keeping track of the quantity of each part in a dictionary object. Sub CATMain()
Dim oTopProductDoc As ProductDocument Dim oTopProduct As Product Dim ItemToRename As Product Dim ItemToRenamePartNumber As String Dim oDict1 'Dictionary Object Dim lNumberOfItems As Long Dim i As Integer Set oTopProductDoc = CATIA.ActiveDocument Set oTopProduct = oTopProductDoc.Product 'The top product containing the items to rename Set oDict1 = CreateObject("Scripting.Dictionary") lNumberOfItems = oTopProduct.Products.Count For i = 1 to lNumberOfItems Set ItemToRename = oTopProduct.Products.Item(i) ItemToRenamePartNumber = ItemToRename.PartNumber 'See if the item is already in list, in that case increment the suffix number by 1 before renaming If oDict1.Exists(ItemToRenamePartNumber) Then oDict1.Item(ItemToRenamePartNumber) = oDict1.Item(ItemToRenamePartNumber)+1 Else oDict1.Add (ItemToRenamePartNumber) ,"1" End If 'Rename the items instance name like this: Part Number + "." + suffix number ItemToRename.Name = ItemToRenamePartNumber & "." & oDict1.Item(ItemToRenamePartNumber) Next Set oDict1 = Nothing End Sub Gruß Norman ------------------ WTL Engineering GmbH n.schulz@wtl-group.de http://www.wtl-group.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 18. Mrz. 2016 07:59 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
Hallo Norman, das Makro funzt bei mir ohne Probleme. Ist hier aus dem Forum.
Code: Sub Instance_equal Dim oMainProduct Set oMainProduct = CATIA.ActiveDocument.productDim oMainProducts 'As Products Set oMainproducts = oMainProduct.Products Umbenennen oMainProducts End Sub Sub Umbenennen(oProducts )
Dim oNumber 'As String Dim oName 'As String Dim i 'As Long Dim x For x = 1 to oProducts.Count Dim oinstance Set oInstance = oProducts.Item(x) oNumber = oInstance.PartNumber oName = oInstance.Name
i=0 Do
On Error Resume Next i = i+1 If i>5000 Then ' Zahl soll angepasst werden Exit Do End If oInstance.Name = oNumber & "." & i If Err.Number = 0 Then Umbenennen oProducts.Item(x).ReferenceProduct.Products Exit Do ElseIf Err.Number = -2147467259 Then Err.Clear Err.Number = 0 Else Exit Do End If Loop If oInstance.Products.Count > 0 Then Umbenennen oInstance.Products End If Next End Sub
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Norman Schulz Mitglied Konstrukteur Catia V4/V5
Beiträge: 300 Registriert: 18.03.2002 V5R19SP9 // V5R20SP7 //V5R24SP5 Lizenz MD2 Lenovo ThinkPad W540 WIN 7 64bit 16GB Intel i7-4800MQ 2.7GHz
|
erstellt am: 18. Mrz. 2016 09:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Uwe, habe es in ein CATScript eingefügt, aber da tut sich gar nichts. Was mache ich denn falsch? Gruß Norman
------------------ WTL Engineering GmbH n.schulz@wtl-group.de http://www.wtl-group.de 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: 18. Mrz. 2016 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
|
Norman Schulz Mitglied Konstrukteur Catia V4/V5
Beiträge: 300 Registriert: 18.03.2002 V5R19SP9 // V5R20SP7 //V5R24SP5 Lizenz MD2 Lenovo ThinkPad W540 WIN 7 64bit 16GB Intel i7-4800MQ 2.7GHz
|
erstellt am: 18. Mrz. 2016 11:48 <-- editieren / zitieren --> Unities abgeben:
|
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: 18. Mrz. 2016 14:21 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
Kleiner Alternativ-Vorschlag: Ich hab obiges Makro leicht umgebaut. Die vielen 'Error'-Anweisungen machen mich ganz wirr im Kopf :-). Ausserdem hab ich noch eine Sortierung eingebaut. - Beim ersten Durchlauf werden die Positionen 1 - Count freigemacht. - Beim zweiten Durchlauf werden die Positionen 1 - Count belegt(aufsteigend!). Enjoy! Joe
Code:
Sub CatMain() Dim oMainProducts As Products Dim oADP As Product Set oADP = CATIA.ActiveDocument.Product oADP.ApplyWorkMode (DEFAULT_MODE) 'set work mode Set oMainProducts = CATIA.ActiveDocument.Product.Products Umbenennen oMainProducts, True Umbenennen oMainProducts, False 'second pass End Sub Sub Umbenennen(oProducts, bFirstPass As Boolean) Dim strPNum As String Dim strPName As String Dim i As Integer Dim x As Integer Dim oinstance As Product On Error GoTo Umbenennen_Error
For x = 1 To oProducts.Count Set oinstance = oProducts.Item(x) strPNum = oinstance.PartNumber ' strPName = oinstance.Name If bFirstPass = True Then i = oProducts.Count + 1 'first pass clear 'count' positions Else i = 1 'second pass assign instances End If
Do oinstance.Name = strPNum & "." & i Umbenennen oProducts.Item(x).ReferenceProduct.Products, bFirstPass Exit Do Loop If oinstance.Products.Count > 0 Then Umbenennen oinstance.Products, bFirstPass End If Next Exit Sub '--------------------------------------------------------------------------------------- Umbenennen_Error: Dim errMsg As String Dim errRet As VbMsgBoxResult Select Case Err.Number Case -2147467259 i = i + 1 Resume Case Else errMsg = Err.Number & ": " & Err.Description & " in procedure Umbenennen" errRet = MsgBox(errMsg, vbOKOnly, "Umbenennen") End Select 'Resume Next 'fall thru to quit sub '--------------------------------------------------------------------------------------- End Sub
------------------ 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: 18. Mrz. 2016 17:57 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 20. Mrz. 2016 21:38 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
Hi Joe, wie würde der Code in CATScript oder catvba aussehen? Wollte ihn gerne in einen bestehenden Code von mir einbauen, bekomme aber eine Fehlermeldung bei Code: On Error GoTo Umbenennen_Error
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! 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: 20. Mrz. 2016 22:02 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
Hi Uwe, als CATScript kommt der Fehler bei mir auch. Als VBA geht's. Noch ein Gedanke zum Thema: Anstatt alles in einem Makro auszuführen, was hältst von der Unix-Methode: Ein Skript für eine Aufgabe; das Ergebnis wird an die nächste Routine weiter gereicht. Tschau, Joe PS: Ich hab die Routine noch 'n bisschen aufgebohrt. Alle geöffneten Produkte werden abgearbeitet. Ich stell's die Tage online.
------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 21. Mrz. 2016 07:14 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
Moin Joe, die Unix-Methode ist ja grundsätzlich OK, ändert aber die Situation mit dem Fehler in CATScript nicht wirklich. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! [Diese Nachricht wurde von moppesle am 21. Mrz. 2016 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: 21. Mrz. 2016 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
Hi Uwe, CatScript/VBScript kann 'On Error' mit Sprungmarke nicht; versteht auch den 'Resume' nicht. Siehe https://msdn.microsoft.com/en-us/library/aa227413%28v=vs.60%29.aspx Zitat:
NOTE: VBScript is not Visual Basic for Applications. It is important not to confuse VBScript and Visual Basic for Applications (VBA). VBA is included with products like Microsoft Word and Microsoft Excel, and it is a much richer language than VBScript. VBA has a more sophisticated development environment than VBScript. It is possible to develop complete applications using VBA. VBScript, on the other hand, is designed primarily as a macro language and is not very suitable for developing applications.
Anders ausgedrückt: CatScript is' 'ne Krücke. Tschau, Joe ------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 21. Mrz. 2016 12:09 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
Hallo, naja als Krücke würde ich das nun nicht (generell) bezeichnen. Kommt halt auf den Anwendungsfall an. Abgesehen davon sind CATScripts nicht selten schneller als das gleiche Makro in VBA (meine persönliche Erfahrung). Abgesehen davon hat man hier weniger Probleme mit fehlenden/falschen Verweisen/DLLS usw. Auch die verschiedenen VBA Versionen, ab R24 auch in 64 Bit, machen hier weniger bis keine Probleme. Gruß Randle 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: 21. Mrz. 2016 13:14 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
@Randle: CatScript: - Debugger: Fehlanzeige - Intellisense: Fehlanzeige - Dialoge/Formen: Fehlanzeige - Sprachumfang VB: Nur ein abgespeckktes VB. - Typ-Deklarierung: Verboten; sind alles Variants Für Kurz-Makros mag's OK sein, wenn's mehr sein soll, nicht. Zitat:
weniger Probleme mit fehlenden/falschen Verweisen/DLLS usw.
Hab ich keine. Welche meinst Du? Tschau, Joe ------------------ Inoffizielle Catia Hilfeseite
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 21. Mrz. 2016 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für Norman Schulz
Hallo, ich stimme deinen Anmerkungen ja zu, Programmierkomfort ist bei CATScript Mangelware. Aber man kann ja im VBA Editor programmieren, das Makro selber aber dann als CATScript bereitstellen. Zu den DLLs und Verweisen: Wenn man z.B. Steuerelemente nutzen will die im CATIA VBA (wie es von der CD installiert wird) nicht vorhanden sind, braucht man weitere DLLs oder OCXe. Diese müssen dann natürlich auf den CLientrechnern (möglichst in der richtigen Version) verfügbar sein. Windowsupdates können einem hier schon mal in die Suppe spucken. Auch für Datenbankverbindungen braucht man teilw. die richtigen Verweise.Auch nicht vollständig installierte CATIA Installationen auf den Clients können hier Probleme verursachen (ebenso wenn man zu großzügig Verweise erstellt, bzw. unnötige nicht rausnimmt. Das alles hast du bei CATScript nicht (natürlich teilw. mit Einschränkungen). Gruß Randle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |