| | |
 | CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min 48 |
| | |
 | Qualität sichtbar gemacht, dank leistungsfähiger 3DViewStation Grafik, eine Pressemitteilung
|
|
Autor
|
Thema: User defined properties in allen Parts/Unterproducts schreiben (1133 / mal gelesen)
|
wsapala Mitglied
 Beiträge: 5 Registriert: 07.03.2017
|
erstellt am: 07. Mrz. 2017 17:03 <-- editieren / zitieren --> Unities abgeben:         
Hallo hier! Ich habe mir gerade die Finger Wund gesucht aber meine Programmierkenntnisse sind dermaßen eingerostet, dass ich quasi wieder am Anfang stehe. Ich möchte bestimmte User-Defined Properties bei allen Parts/Products eines geöffneten Hauptproducts schreiben. Bisher habe ich mir einen Code definiert, der das bei einem geöffneten Part soweit ganz gut macht. Würde das jetzt gerne per Stapelverarbeitung bei allen durchlaufen lassen mit einer For-Schleife, aber da hänge ich auch schon. Hier der Code: ub CATMain() 'Dokument geöffnet? If CATIA.Documents.Count = 0 Then Box = MsgBox("Es wurde kein aktives Dokument identifiziert" + Chr(10) + "Bitte oeffnen Sie zuerst ein Dokument und starten Sie dann das Makro erneut", vbInformation, "Hinweis") Exit Sub End If Dim oDocument As Document Set oDocument = CATIA.ActiveDocument 'Part geöffnet? 'Start Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument Dim product1 As Product Set product1 = oDocument.Product on error resume next Dim parameters1 As Parameters Set parameters1 = product1.UserRefProperties
Set strParameter = parameters1.Item("THICKNESS/DIAMETER") if err.number <> 0 then Set strParameter = parameters1.CreateString("THICKNESS/DIAMETER", "") err.clear end if
Set strParameter = parameters1.Item("LENGHT") if err.number <> 0 then Set strParameter = parameters1.CreateString("LENGHT", "") err.clear end if Set strParameter = parameters1.Item("WIDTH") if err.number <> 0 then Set strParameter = parameters1.CreateString("WIDTH", "") err.clear end if Set strParameter = parameters1.Item("MASS") if err.number <> 0 then Set strParameter = parameters1.CreateString("MASS", "") err.clear end if Set strParameter = parameters1.Item("PROGRAMM") if err.number <> 0 then Set strParameter = parameters1.CreateString("PROGRAMM", "") err.clear end if Set strParameter = parameters1.Item("PROJEKT") if err.number <> 0 then Set strParameter = parameters1.CreateString("PROJEKT", "") err.clear end if Set strParameter = parameters1.Item("KONSTRUKTEUR") if err.number <> 0 then Set strParameter = parameters1.CreateString("KONSTRUKTEUR", "") err.clear end if Box = MsgBox("Makro erfolgreich", vbInformation, "Hinweis") on error goto 0 End Sub
Könnt ihr mir einen Tipp gehen, wie ich weiter arbeiten muss oder beim Code helfen? Danke! Viele Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Mitglied 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: 07. Mrz. 2017 18:57 <-- editieren / zitieren --> Unities abgeben:          Nur für wsapala
Hi wsapala, - Schleife über alle geladenen Docs - bearbeitet werden zZt ausschliesslich Products Code:
Sub CATMain() Dim oDoc As Document Dim partDocument1 As Document Dim product1 As Product Dim parameters1 As Parameters 'Dokument geöffnet? If CATIA.Documents.Count = 0 Then MsgBox "Es wurde kein aktives Dokument identifiziert" & vbCrLf & _ "Bitte oeffnen Sie zuerst ein Dokument und starten Sie dann das Makro erneut", _ vbInformation, "Hinweis" Exit Sub End If For Each oDoc In CATIA.Documents Select Case TypeName(oDoc) Case "ProductDocument" Set product1 = oDoc.Product On Error Resume Next Set parameters1 = product1.UserRefProperties Set strParameter = parameters1.Item("THICKNESS/DIAMETER") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("THICKNESS/DIAMETER", "") Err.Clear End If Set strParameter = parameters1.Item("LENGHT") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("LENGHT", "") Err.Clear End If Set strParameter = parameters1.Item("WIDTH") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("WIDTH", "") Err.Clear End If Set strParameter = parameters1.Item("MASS") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("MASS", "") Err.Clear End If Set strParameter = parameters1.Item("PROGRAMM") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("PROGRAMM", "") Err.Clear End If Set strParameter = parameters1.Item("PROJEKT") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("PROJEKT", "") Err.Clear End If Set strParameter = parameters1.Item("KONSTRUKTEUR") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("KONSTRUKTEUR", "") Err.Clear End If Case "PartDocument" 'do nothing Case "DrawingDocument" 'do nothing End Select Next MsgBox "Makro beendet", vbInformation, "Hinweis" 'On Error GoTo 0 'unnötig, da makro zuende End Sub
An Catparts darfst Dich selbst versuchen. :-) Tschau, Joe PS: Unter 'Stapelverarbeitung' verstehe ich was anderes(Batch; '.bat') ------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wsapala Mitglied
 Beiträge: 5 Registriert: 07.03.2017
|
erstellt am: 08. Mrz. 2017 11:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo, vielen lieben Dank schonmal es funktioniert bei BG wunderpar. Mit den Parts hänge ich noch. Habe im Dezember überhaupt erst mit CATIA angefangen und vor 8 Jahren mal Matlab gemacht daher muss ich mich da jetzt noch reinfinden, habe aber eben auch direkt Projektdruck. Sub CATMain() Dim oDoc As Document Dim product1 As Product Dim parameters1 As Parameters 'Dokument geöffnet? If CATIA.Documents.Count = 0 Then MsgBox "Es wurde kein aktives Dokument identifiziert" & vbCrLf & _ "Bitte oeffnen Sie zuerst ein Dokument und starten Sie dann das Makro erneut", _ vbInformation, "Hinweis" Exit Sub End If For Each oDoc In CATIA.Documents Select Case TypeName(oDoc) Case "ProductDocument" Set product1 = oDoc.Product On Error Resume Next Set parameters1 = product1.UserRefProperties Set product1 = oDoc.Product On Error Resume Next Set parameters1 = product1.UserRefProperties Set strParameter = parameters1.Item("THICKNESS/DIAMETER") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("THICKNESS/DIAMETER", "") Err.Clear End If Set strParameter = parameters1.Item("LENGHT") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("LENGHT", "") Err.Clear End If Set strParameter = parameters1.Item("WIDTH") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("WIDTH", "") Err.Clear End If Set strParameter = parameters1.Item("MASS") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("MASS", "") Err.Clear End If Set strParameter = parameters1.Item("PROGRAMM") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("PROGRAMM", "") Err.Clear End If Set strParameter = parameters1.Item("PROJEKT") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("PROJEKT", "") Err.Clear End If Set strParameter = parameters1.Item("KONSTRUKTEUR") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("KONSTRUKTEUR", "") Err.Clear End If Select Case TypeName(oDoc) Case "PartDocument" Dim partDocument1 As Document Set partDocument1 = oDoc.Product On Error Resume Next Set parameters1 = product1.UserRefProperties Set product1 = oDoc.Part On Error Resume Next Set parameters1 = product1.UserRefProperties Set strParameter = parameters1.Item("THICKNESS/DIAMETER") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("THICKNESS/DIAMETER", "") Err.Clear End If Set strParameter = parameters1.Item("LENGHT") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("LENGHT", "") Err.Clear End If Set strParameter = parameters1.Item("WIDTH") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("WIDTH", "") Err.Clear End If Set strParameter = parameters1.Item("MASS") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("MASS", "") Err.Clear End If Set strParameter = parameters1.Item("PROGRAMM") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("PROGRAMM", "") Err.Clear End If Set strParameter = parameters1.Item("PROJEKT") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("PROJEKT", "") Err.Clear End If Set strParameter = parameters1.Item("KONSTRUKTEUR") If Err.Number <> 0 Then Set strParameter = parameters1.CreateString("KONSTRUKTEUR", "") Err.Clear End If Case "DrawingDocument" 'do nothing End Select 'Next MsgBox "Makro beendet", vbInformation, "Hinweis" End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wsapala Mitglied
 Beiträge: 5 Registriert: 07.03.2017
|
erstellt am: 08. Mrz. 2017 11:32 <-- editieren / zitieren --> Unities abgeben:         
|
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12117 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Mrz. 2017 11:40 <-- editieren / zitieren --> Unities abgeben:          Nur für wsapala
Servus Dass das Makro nur bei CATProducts funktioniert liegt wohl daran, dass bei CATParts beim Namen der Parameter auch die PartNumber mit drinnen ist (zB "Part6/MeinParameter). Hier findest du ein Lösung wie du das angehen könntest. Wenn du über eine Schleife der Documents-Collection arbeitest werden alle geöffneten Dokumente (auch parallel geöffnete CATProducts/CATParts) abgearbeitet. (ggf nicht gewünscht) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wsapala Mitglied
 Beiträge: 5 Registriert: 07.03.2017
|
erstellt am: 08. Mrz. 2017 12:52 <-- editieren / zitieren --> Unities abgeben:         
Danke, ich schaue mich durch. Gibt es die Möglichkeit die Dokumente nacheinander aktiv zu setzen und anschließend die Eigenschaften des aktiven Dokuments abzufragen? Ich muss mal nach der Collection suchen. Das wäre auch kein Problem, kann man ja steuern was offen ist  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12117 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Mrz. 2017 13:05 <-- editieren / zitieren --> Unities abgeben:          Nur für wsapala
Servus In deinem Code werden schon alle geöffneten Dokumente (auch die in deiner Baugruppe vorhanden sind) abgearbeitet. Dokumente aktiv zu setzen ist in den wenigsten fällen notwendig (eher langsam). Gruß Bernd PS: Bitte mal Systeminfo ausfüllen und in Zukunft den Code in den entsprechenden Tags posten. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Mitglied 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. Mrz. 2017 14:25 <-- editieren / zitieren --> Unities abgeben:          Nur für wsapala
Hi, gefordert war, dass Du Dich mit der Syntax von SeelctCase-Entscheidungsstrukturen befasst. War:
Code:
For Each oDoc In CATIA.Documents Select Case TypeName(oDoc) Case "ProductDocument" . . . Case "PartDocument" 'do nothing Case "DrawingDocument" 'do nothing End Select Next
Soll: Code:
For Each oDoc In CATIA.Documents Select Case TypeName(oDoc) Case "ProductDocument","PartDocument" . . . Case "DrawingDocument" 'do nothing Case Else 'do nothing End Select Next
oder die Zeilen Code:
Select Case TypeName(oDoc) Case "ProductDocument"
und Code:
Case "PartDocument" 'do nothing Case "DrawingDocument" 'do nothing End Select
einfach rauswerfen/auskommentieren. Das Ergebnis ist in beiden Fällen gleich. Products und Parts werden bearbeitet, Drawings nicht. Eingerostet oder Nicht vorhanden? Tschau, Joe ---edit--- Eines hab ich noch vergessen: Die Teile müssen in Representations/Design Mode gesetzt sein. ------------------ Inoffizielle Catia Hilfeseite
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
wsapala Mitglied
 Beiträge: 5 Registriert: 07.03.2017
|
erstellt am: 13. Mrz. 2017 12:50 <-- editieren / zitieren --> Unities abgeben:         
Hallo, super es klappt einwandfrei jetzt. Dachte erst dass ich mehr übertragen kann von Matlab aber habe dann doch ziemlich ratlos dagewesenen als die Fehler kamen. Werde mal mach Lektüre schauen. Danke! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |