Autor
|
Thema: Properties im Part erzeugen (2889 mal gelesen)
|
Sven2010 Mitglied
Beiträge: 56 Registriert: 20.04.2010 V5R19SP3 Hotfix 50
|
erstellt am: 29. Apr. 2010 14:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, habe schon wieder ein kleines Problem und hoffe, ihr könnt mir schnell helfen Ich erzeuge im Part unter Properties eigene Parameter (also nicht im Baum sondern in den Properties). Das funktioniert auch recht gut. Mein Problem: Führe ich mein Makro mehrfach aus, erzeugt er die Properties ebenso oft :-( Habe nun im Forum schon ein Script gefunden und folgendermaßen umgebaut: Language="VBSCRIPT"
Sub CATMain() Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument Dim product1 As CATBaseDispatch Set product1 = partDocument1.GetItem("") product1.PartNumber = "XXXXXX-X"
'Sub ParameterErzeugen() Dim parameters1 As Parameters Set parameters1 = product1.UserRefProperties
'***** Routine Parameter_vorhanden = False For i = 1 To parameters1.Count Z = InStr(1, parameters1.Item(i).Name, "CLASSIFICATION_CODE") If Z <> 0 Then Parameter_vorhanden = True End If Next For i = 2 To parameters1.Count Z = InStr(1, parameters1.Item(i).Name, "COMMENT") If Z <> 0 Then Parameter_vorhanden = True End If Next
Dim strParam1 As StrParam If Parameter_vorhanden then Set strParam1 = parameters1.Item("CLASSIFICATION_CODE") Else Set strParam1 = parameters1.CreateString("CLASSIFICATION_CODE", "") strParam1.Rename "CLASSIFICATION_CODE" End If
strParam1.Value = "" Dim strParam2 As StrParam If Parameter_vorhanden then Set strParam2 = parameters1.Item("COMMENT") Else Set strParam2 = parameters1.CreateString("COMMENT", "") End If
strParam2.Value = "" End Sub
Lasse ich das Macro 2 Mal drüber laufen ist alles ok, d.h. die Properties werden nicht noch einmal angelegt. Ist jedoch ein property nicht vorhanden (z.B. CLASSIFICATION_CODE), legt er dieses an aber auch das Property COMMENT ein zweites Mal Lösche ich COMMENT sodass nur noch der CLASSIFICATION_CODE vorhanden ist, stockt das Macro... Irgendwie stimmt meine Schleife oder mein Ablauf nicht! Jedem eine Idee was flasch ist in meinem Script? Ihr würdet mir sehr helfen; eigentlich sollte ich das Script heute fertigstellen... Danke und Gruß Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EngineeredByRobberts Mitglied Ingenieur
Beiträge: 109 Registriert: 27.04.2010 Dell Precision 690 Windows XP V5R19SP3 V5R17SP0
|
erstellt am: 29. Apr. 2010 15:09 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
du benutzt zweimal 'Parameter_vorhanden = True' benutze lieber in deine 1te und 2te Schleife unterschiedliche Variabelen .. 'Parameter_vorhanden1 = True' .. .. 'Parameter_vorhanden2 = True'
------------------ - Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sven2010 Mitglied
Beiträge: 56 Registriert: 20.04.2010 V5R19SP3 Hotfix 50
|
erstellt am: 29. Apr. 2010 15:51 <-- editieren / zitieren --> Unities abgeben:
Hi, danke erst einaml für deine schnell Antwort. Mein Script sieht jetzt so aus: Sub CATMain() Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument
Dim product1 As CATBaseDispatch Set product1 = partDocument1.GetItem("") product1.PartNumber = "XXXXXX-X"
'Sub ParameterErzeugen()
Dim parameters1 As Parameters Set parameters1 = product1.UserRefProperties
'***** Routine Parameter_vorhanden1 = False Parameter_vorhanden2 = False Parameter_vorhanden3 = False For i = 1 To parameters1.Count Z = InStr(1, parameters1.Item(i).Name, "CLASSIFICATION_CODE") If Z <> 0 Then Parameter_vorhanden1 = True End If Next For i = 2 To parameters1.Count Z = InStr(1, parameters1.Item(i).Name, "COMMENT") If Z <> 0 Then Parameter_vorhanden2 = True End If Next For i = 3 To parameters1.Count Z = InStr(1, parameters1.Item(i).Name, "CAD_ENVIRONMENT") If Z <> 0 Then Parameter_vorhanden3 = True End If Next Dim strParam1 As StrParam If Parameter_vorhanden1 then Set strParam1 = parameters1.Item("CLASSIFICATION_CODE") Else Set strParam1 = parameters1.CreateString("CLASSIFICATION_CODE", "") strParam1.Rename "CLASSIFICATION_CODE" End If
strParam1.Value = "" Dim strParam2 As StrParam If Parameter_vorhanden2 then Set strParam2 = parameters1.Item("COMMENT") Else Set strParam2 = parameters1.CreateString("COMMENT", "") End If
strParam2.Value = "" Dim strParam3 As StrParam If Parameter_vorhanden3 then Set strParam3 = parameters1.Item("CAD_ENVIRONMENT") Else Set strParam3 = parameters1.CreateString("CAD_ENVIRONMENT", "") End If
strParam3.Value = "" End Sub Erzeuge 3 Properties. Beim nächsten Ausführen alles i.O., kein property wird erneut erzeugt. Lösche ich aber bspw. das property COMMENT, wird beim nächsten Ausführen leider nicht nur dieses hinzugefügt, sondern auch ein 2. mal das property CAD_ENVIRONMENT... Weiss nicht weiter... Gruß Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EngineeredByRobberts Mitglied Ingenieur
Beiträge: 109 Registriert: 27.04.2010 Dell Precision 690 Windows XP V5R19SP3 V5R17SP0
|
erstellt am: 29. Apr. 2010 16:13 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
|
EngineeredByRobberts Mitglied Ingenieur
Beiträge: 109 Registriert: 27.04.2010 Dell Precision 690 Windows XP V5R19SP3 V5R17SP0
|
erstellt am: 29. Apr. 2010 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
|
Sven2010 Mitglied
Beiträge: 56 Registriert: 20.04.2010 V5R19SP3 Hotfix 50
|
erstellt am: 29. Apr. 2010 19:05 <-- editieren / zitieren --> Unities abgeben:
Hi, vielen vielen Dank, jetzt läuft das Ganze :-) Hab jedoch noch ein Problem: Handelt es sich beim Property um eines mit multiple values, stockt das Script wenn ich das Property lösche an folgender Stelle: Set strParam19 = parameters1.Item("FINISH") Abfrage ob vorhanden sieht so aus: For i = 1 To parameters1.Count Z = InStr(1, parameters1.Item(i).Name, "FINISH") If Z <> 0 Then Parameter_vorhanden19 = True End If Next Erzeugung so: Dim strParam19 As StrParam If Parameter_vorhanden19 then Set strParam19 = parameters1.Item("FINISH") Else Set strParam19 = parameters1.CreateString("FINISH", "") End If Dim arrayOfVariantOfBSTR19(11) arrayOfVariantOfBSTR19(0) = "" arrayOfVariantOfBSTR19(1) = "zinc plated / passivated colourless" arrayOfVariantOfBSTR19(2) = "zinc plated / passivated colourless / sealed colourless" arrayOfVariantOfBSTR19(3) = "mechanical zinc plated / passivated colourless" arrayOfVariantOfBSTR19(4) = "metallic corrosion protection coated, colour silver" arrayOfVariantOfBSTR19(5) = "metallic corrosion protection coated, colour silver, lubricated" arrayOfVariantOfBSTR19(6) = "metallic corrosion protection coated, colour black" arrayOfVariantOfBSTR19(7) = "metallic corrosion protection coated, colour black, lubricated" arrayOfVariantOfBSTR19(8) = "phosphated" arrayOfVariantOfBSTR19(9) = "phosphated / oiled" arrayOfVariantOfBSTR19(10) = "washed" arrayOfVariantOfBSTR19(11) = "oiled" strParam19.SetEnumerateValues arrayOfVariantOfBSTR19 strParam19.Value = "" Bei Properties ohne Multiple Values läuft es einwandfrei. Eine Idee an was dies liegen könnte? Danke und Gruß Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EngineeredByRobberts Mitglied Ingenieur
Beiträge: 109 Registriert: 27.04.2010 Dell Precision 690 Windows XP V5R19SP3 V5R17SP0
|
erstellt am: 29. Apr. 2010 20:21 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
mich wundert es das du es im Makro überhaupt schaffst ein Property mit multiple values zu erstellen, Im 'normalen' Catia geht das meines Wissens nicht. edit: klar geht das, mein fehler ------------------ - Robert [Diese Nachricht wurde von EngineeredByRobberts am 29. Apr. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sven2010 Mitglied
Beiträge: 56 Registriert: 20.04.2010 V5R19SP3 Hotfix 50
|
erstellt am: 29. Apr. 2010 20:43 <-- editieren / zitieren --> Unities abgeben:
|
EngineeredByRobberts Mitglied Ingenieur
Beiträge: 109 Registriert: 27.04.2010 Dell Precision 690 Windows XP V5R19SP3 V5R17SP0
|
erstellt am: 29. Apr. 2010 21:14 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
hast du denn vorher Parameter_vorhanden19 = False gestellt? wenn der Parameter gelöscht ist, dürfte deine If Then Bedingung für Set strParam19 = parameters1.Item("FINISH")gar nicht erfüllt werden, sondern er müsste 'else' durchlaufen ------------------ - Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sven2010 Mitglied
Beiträge: 56 Registriert: 20.04.2010 V5R19SP3 Hotfix 50
|
erstellt am: 29. Apr. 2010 21:23 <-- editieren / zitieren --> Unities abgeben:
|
EngineeredByRobberts Mitglied Ingenieur
Beiträge: 109 Registriert: 27.04.2010 Dell Precision 690 Windows XP V5R19SP3 V5R17SP0
|
erstellt am: 29. Apr. 2010 21:30 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
|
Sven2010 Mitglied
Beiträge: 56 Registriert: 20.04.2010 V5R19SP3 Hotfix 50
|
erstellt am: 29. Apr. 2010 21:33 <-- editieren / zitieren --> Unities abgeben:
|
EngineeredByRobberts Mitglied Ingenieur
Beiträge: 109 Registriert: 27.04.2010 Dell Precision 690 Windows XP V5R19SP3 V5R17SP0
|
erstellt am: 29. Apr. 2010 21:37 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
mach doch einfach: If parameters1.Item(i).Name = "FINISH" Then Parameter_vorhanden19 = True End If Edit: Else entfernt ------------------ - Robert [Diese Nachricht wurde von EngineeredByRobberts am 29. Apr. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sven2010 Mitglied
Beiträge: 56 Registriert: 20.04.2010 V5R19SP3 Hotfix 50
|
erstellt am: 29. Apr. 2010 21:47 <-- editieren / zitieren --> Unities abgeben:
|
Sven2010 Mitglied
Beiträge: 56 Registriert: 20.04.2010 V5R19SP3 Hotfix 50
|
erstellt am: 29. Apr. 2010 21:53 <-- editieren / zitieren --> Unities abgeben:
Ich verstehe einfach nicht warum er überhaupt in den Befehl Set strParam19 = parameters1.Item("FINISH") hineingeht da der strParam19 ja gar nicht vorhanden, sprich False ist. Eigentlich müsste es die Zeile überspringen. Evtl. noch jemand anderes da der so etwas schon mal gemacht hat oder weiss warum das Ganze nicht läuft? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EngineeredByRobberts Mitglied Ingenieur
Beiträge: 109 Registriert: 27.04.2010 Dell Precision 690 Windows XP V5R19SP3 V5R17SP0
|
erstellt am: 29. Apr. 2010 21:56 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
|
Sven2010 Mitglied
Beiträge: 56 Registriert: 20.04.2010 V5R19SP3 Hotfix 50
|
erstellt am: 29. Apr. 2010 22:01 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Apr. 2010 22:26 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
Servus Du könntest es ach über die Fehler Rückgabe ermitteln, ob der Parameter schon existiert ist vielleicht etwas übersichtlicher): Code: Sub 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 IfDim oDocument As Document Set oDocument = CATIA.ActiveDocument 'Part geöffnet? If TypeName(oDocument) <> "PartDocument" Then Box = MsgBox("Dokument ist kein Part!" + Chr(10) + "Macro wurde abgebrochen", vbInformation, "Hinweis") Exit Sub End If 'Start Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument Dim product1 As Product Set product1 = oDocument.Product product1.PartNumber = "XXXXXX-X" on error resume next Dim parameters1 As Parameters Set parameters1 = product1.UserRefProperties 'Abfrage ob Parameter bereits vorhanden sind, wenn nicht erstellen Set strParameter = parameters1.Item("PTC_WM_REVISION") if err.number <> 0 then Set strParameter = parameters1.CreateString("PTC_WM_REVISION", "") err.clear end if Box = MsgBox("Makro erfolgreich", vbInformation, "Hinweis") on error goto 0 End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sven2010 Mitglied
Beiträge: 56 Registriert: 20.04.2010 V5R19SP3 Hotfix 50
|
erstellt am: 30. Apr. 2010 12:49 <-- editieren / zitieren --> Unities abgeben:
Genial, vielen vielen Dank!!! Jetzt läuft das Macro einwandfrei und ist dazu noch sehr übersichtlich und einfach anzupassen. Wenn mir jetzt noch jemand sagen könnte wie ich die erzeugten Properties danach in einem Fenster anzeigen könnte sodass der User darin die Werte festlegen könnte und diese dann entsprechend in die Properties geschrieben werden wäre ich absolut happy Gruß Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
christian.gessner92 Mitglied Student
Beiträge: 4 Registriert: 05.07.2016 Catia V5-R24
|
erstellt am: 11. Jul. 2016 16:01 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
Hallo zusammen, ich bin noch eine richtiger Programmierneuling. Ich brauche ein Makro um einzelne Eigenschaften wie hier zu setzen. Wäre es Möglich hier eine "Inputbox" einzufügen? Also das die Eigenschaft mit einem Wert abgelegt werden kann? Bin schon am ausprobieren und komme nicht weiter.... 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: 11. Jul. 2016 16:51 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
Servus Schau mal hier. Meine generelle Empfehlung: - erst eine Grundlagenschulung/Tutorial zu VBA machen (zB für Excel) - mit einem Buch in die API von Catia einarbeiten - überlegen wie man Probleme erst manuell in Catia löst - prüfen ob sich dies auch mit einem Makro so machen lässt der ob es generell einen einfacheren Weg gibt. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xyon126 Mitglied Ingenieur
Beiträge: 74 Registriert: 07.11.2011
|
erstellt am: 25. Aug. 2016 19:44 <-- editieren / zitieren --> Unities abgeben: Nur für Sven2010
Hallo christian.gessner92! Sorry für mein Deutsch. Ich lege zwei Codes für meine beiden Makros gemacht, mit dem Sie das tun, was ich glaube, anwenden, die zunächst die Eigenschaften auf einem CATPart bearbeitet und die zweite füllt Sie mit vordefinierten Eigenschaften und anderen Wert, werden Sie etwas sagen. Code: Language="VBSCRIPT"'------------------------------------------------------------------------------- ' ============================================================================== ' NOMBRE MACRO: Editpropertis_AIRPES_CATPart.CATScript ' ' Versión: V 1.0 Julio 2016 ' ' PROPUESTA: Editar propiedades especificadas. ' ' RETORNO: Edita o añade las propiedades especificadas en todas las Parts ' habidas en un CATProduct. ' ' MODO DE EMPLEO: Ejecución directa con un click. ' ' Autor: M. de los Heros, DH&D, s.l.© ' ============================================================================== '------------------------------------------------------------------------------- Sub CATMain() ' Obtener documento o CATPart activa. Dim docPart as PartDocument Set docPart = CATIA.ActiveDocument ' Tener acceso al documento o CATPart activa. Dim prdPart as Part Set prdPart = docPart.Product ' recuperar una lista de todas las propiedades definidas por el usuario Dim oUserDefinedProperties as Parameters Set oUserDefinedProperties = prdPart.ReferenceProduct.UserRefProperties '-------------------------------- ' ELIMINAR TODAS LAS PROPIEDADES '-------------------------------- Dim iNbProperties ' as Integer iNbProperties = oUserDefinedProperties.Count Dim iProperty ' as Integer For iProperties = 1 To iNbProperties oUserDefinedProperties.Remove 1 Next Set partDocument1 = CATIA.ActiveDocument 'partDocument1.Save Set partDocument1 = CATIA.ActiveDocument Set product1 = partDocument1.GetItem("Part1") Set parameters1 = product1.UserRefProperties Set strParam1 = parameters1.CreateString("Nº Pieza", "") strParam1.ValuateFromString "" Set product1 = product1.ReferenceProduct Set parameters2 = product1.UserRefProperties Set strParam2 = parameters2.CreateString("DENOMINACION", "") strParam2.ValuateFromString "" Set product1 = product1.ReferenceProduct Set parameters3 = product1.UserRefProperties Set strParam3 = parameters3.CreateString("MATERIAL", "") strParam3.ValuateFromString "" Set product1 = product1.ReferenceProduct Set parameters4 = product1.UserRefProperties Set strParam4 = parameters4.CreateString("MEDIDAS", "") strParam4.ValuateFromString "" Set product1 = product1.ReferenceProduct Set parameters5 = product1.UserRefProperties Set strParam5 = parameters5.CreateString("PESO", "") strParam5.ValuateFromString "" Set product1 = product1.ReferenceProduct strParam1.Value = "" strParam2.Value = "" strParam3.Value = "" strParam4.Value = "" strParam5.Value = "" MsgBox "PROPERTIS EDITADAS" End Sub
Code: Language="VBSCRIPT"'------------------------------------------------------------------------------- ' ============================================================================== ' NOMBRE MACRO: Propertis TUBO RECTANGULAR.CATScript ' ' Versión: V 1.0 Agosto 2016 ' ' PROPUESTA: Editar las propiedades del TUBO RECTANGULAR. ' ' RETORNO: Edita o añade las propiedades especificadas del TUBO RECTANGULAR. ' ' MODO DE EMPLEO: Ejecución directa con un click. ' ' Autor: M. de los Heros, DH&D, s.l.© ' ============================================================================== '------------------------------------------------------------------------------- Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set product1 = partDocument1.GetItem("File") Set product1 = product1.ReferenceProduct Set product1 = product1.ReferenceProduct Set product1 = product1.ReferenceProduct Set product1 = product1.ReferenceProduct Set product1 = product1.ReferenceProduct Set part1 = partDocument1.Part Set parameters1 = part1.Parameters Set strParam1 = parameters1.Item("Properties\DENOMINACION") strParam1.Value = "TUBO ESTRUCTURAL" Set parameters2 = part1.Parameters Set strParam2 = parameters2.Item("Properties\MATERIAL") strParam2.Value = "S355 JR" Set parameters3 = part1.Parameters Set strParam3 = parameters3.Item("Properties\MEDIDAS") 'ABRE VENTANA ENTRADA DATOS MEDIDAS strgDim = InputBox ("INTRODUCIR DIMENSIONES:", "INTRODUCIR DIMENSIONES") strParam3.Value = strgDim Set parameters4 = part1.Parameters Set strParam4 = parameters3.Item("Properties\PESO") 'ABRE VENTANA ENTRADA PESO strgPeso = InputBox ("INTRODUCIR PESO:", "INTRODUCIR PESO") strParam4.Value = strgPeso Set parameters5 = part1.Parameters Set strParam5 = parameters1.Item("`Properties\Nº Pieza`") strParam5.Value = product1.Definition Set product1 = product1.ReferenceProduct Set product1 = product1.ReferenceProduct Set product1 = product1.ReferenceProduct Set product1 = product1.ReferenceProduct Set product1 = product1.ReferenceProduct Set product1 = product1.ReferenceProduct End Sub
M.f.G. Manuel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |