Autor
|
Thema: Properties mit Parameter verknüpfen (1997 mal gelesen)
|
deyhawaii Mitglied Konstrukteur
Beiträge: 236 Registriert: 17.09.2005 Catia V5 R26 Siemens NX11 Fides 10
|
erstellt am: 05. Dez. 2012 10:29 <-- editieren / zitieren --> Unities abgeben:
Morgen zusammen, stehe gerade irgendwie auf dem Schlauch. Habe einen Geometriesteuernden Parameter. Der Wert den ich da einstelle soll aber auch in meine selbsterstellte Properties erscheinen. Und da ist der springende Punkt. Wie muss die Formel dafür aussehen? Hab ich schon zigmal gemacht. Aber gerade ist bei mir nur vollkommende Leere ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 05. Dez. 2012 11:02 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Hi deyhawaii, deine Frage bezieht sich nicht auf Programmierung, oder? Händisch geht das wie folgt. -Parameter und Property anlegen -unter Formular den Propertyparameter anwählen (am besten Filtern mit "*Proper*") -wähle "Add Formula" -deinen Parameter im Baum anklicken und bestättigen. mfG Mario edit: -achso Parameter und Property müssen vom gleichen Typ sein. (bei dir ist die BestellNr.: vom typ Length! ist das richtig?) - und manchmal wird die Verbindung zwischen Parameter und Property erst nach dem Neuladen des Parts aktualisiert.
[Diese Nachricht wurde von roccat am 05. Dez. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
deyhawaii Mitglied Konstrukteur
Beiträge: 236 Registriert: 17.09.2005 Catia V5 R26 Siemens NX11 Fides 10
|
erstellt am: 05. Dez. 2012 11:14 <-- editieren / zitieren --> Unities abgeben:
|
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 05. Dez. 2012 11:23 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
|
JDH Mitglied
Beiträge: 10 Registriert: 08.09.2022
|
erstellt am: 08. Sep. 2022 08:27 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Hallo deyhawaii, könnte du den Code posten? ich möchte die vorhandene Parameter in die Properties über ein Macro kopieren, leider bekomme ich es nicht hin, die Parameter 1 zu 1 zu übertragen. Macro soll alle Bauteile in einer Baugruppe speisen.
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: 08. Sep. 2022 08:37 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
|
JDH Mitglied
Beiträge: 10 Registriert: 08.09.2022
|
erstellt am: 08. Sep. 2022 12:09 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Danke für die Hilfe. Ich komme jedoch bei einer Sache nicht weiter. Kann mir jemand da mal auf die Sprünge helfen? Wie muß das hier aussehen? da wo jetzt "TEST" sollte die Parameter code sein. Habe bereits einiges ausprobiert, leider komme ich nicht weiter. '--------- if (lfound = true) then 'Aktualisierung des Attributwerts, falls erforderlich if (typAttributes(i) = "String") then Elseif (typAttributes(i) = "Length") then Elseif (typAttributes(i) = "Real") then Elseif (typAttributes(i) = "Integer") then end if else 'Erstellung der Attribute mit Typ "String" if (typAttributes(i) = "String") then set param = userParameters.CreateString(tabAttributes(i),"TEST") end if end if Next '------
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: 08. Sep. 2022 12:24 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Servus Du musst noch eine Formel erzeugen (CreateFormula). Hast du schon zuvor auf den "normalen" Parameter zugegriffen? Was soll der steuernde Parameter sein, der aus den Userproperties oder der "normale"? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JDH Mitglied
Beiträge: 10 Registriert: 08.09.2022
|
erstellt am: 08. Sep. 2022 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
|
JDH Mitglied
Beiträge: 10 Registriert: 08.09.2022
|
erstellt am: 08. Sep. 2022 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Vielleicht ist es besser meinen Code zu veröffentlichen. Hier ist mein ganzer Code: '------------- '// Language="VBSCRIPT" '--------------------------------------------------------------------------- dim workbooks as AnyObject dim workbook as AnyObject dim strWB as Workbench dim strServ as AnyObject '--------------------------------------------------------------------------- dim nbAttributes as integer nbAttributes = 6 dim tabAttributes(6) dim typAttributes(1) tabAttributes(1) = "Nomenclature_DE" tabAttributes(2) = "SAP_No." tabAttributes(3) = "Nomenclature_EN" tabAttributes(4) = "Weight" tabAttributes(5) = "REV_2D" tabAttributes(6) = "REV_3D" typAttributes(1) = "String" typAttributes(2) = "String" typAttributes(3) = "String" typAttributes(4) = "String" typAttributes(5) = "String" typAttributes(6) = "String" '--------------------------------------------------------------------------- 'Parameterwert erstellen '--------------------------------------------------------------------------- Sub CreateParameters(iProduct) On Error Resume Next dim parameters as Parameters dim userParameters as Parameters dim param as Parameter dim paramName as string dim RefProduct as Product set RefProduct = iProduct.ReferenceProduct set parameters = iProduct.ReferenceProduct.Parameters set userParameters = iProduct.ReferenceProduct.UserRefProperties dim nbParameters As Integer nbParameters = RefParameters.Count dim sInstanceName As String dim sPartNumber As String sInstanceName = iProduct.Name sPartNumber = iProduct.ReferenceProduct.Name Err.Clear dim lfound as Boolean dim i As Integer if (nbAttributes > 0) then for i = 1 to nbAttributes Err.Clear paramName = sPartNumber & "\Properties\" & tabAttributes(i) 'finde heraus, ob das Attribut bereits existiert lfound = false for j = 1 To userParameters.Count if (userParameters.Item(j).Name = paramName) then set param = userParameters.Item(j) lfound = true end if next
if (lfound = true) then 'Aktualisierung des Attributwerts, falls erforderlich if (typAttributes(i) = "String") then Elseif (typAttributes(i) = "Length") then Elseif (typAttributes(i) = "Real") then Elseif (typAttributes(i) = "Integer") then end if else 'Erstellung der Attribute mit Typ "String" if (typAttributes(i) = "String") then set param = userParameters.CreateString(tabAttributes(i),"TEST") end if end if Next end if End Sub '--------------------------------------------------------------------------- ' Main '--------------------------------------------------------------------------- Sub CATMain() On Error Resume Next dim ActiveDoc As Document Set ActiveDoc = CATIA.ActiveDocument If (InStr(ActiveDoc.Name,".CATProduct")) <> 0 Then
dim product As Product dim selectedElts As Selection set selectedElts = ActiveDoc.Selection selectedElts.Search("Product,all") dim number, i, ind As Integer 'Anzeigen Anzahl der ausgewählten Produkte number = SelectedElts.Count
msgbox "Nb selected elements: " & Cstr(number) For i=1 To number set product = SelectedElts.FindObject("CATIAProduct") CreateParameters product Next End If msgbox "The End" End Sub 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: 08. Sep. 2022 16:07 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Servus Hier ein Beispiel wie ich das aufbauen würde (nur der Bereich zum anlegen der Parameter und Formeln) Code:
'---------------------------------------------------------------------------dim tabAttributes(2) as String dim typAttributes(2) as String tabAttributes(0) = "Nomenclature_DE" tabAttributes(1) = "SAP_No." tabAttributes(2) = "Nomenclature_EN" typAttributes(0) = "String" typAttributes(1) = "String" typAttributes(2) = "String" '--------------------------------------------------------------------------- 'Parameterwert erstellen '--------------------------------------------------------------------------- Sub CreateParameters(iProduct as Product) Dim RefProduct as Product Dim oDocument as Document Dim oBaseForParameter as Object Dim oUserParameter as Parameter Dim oParameter as Parameter Dim oFormula as Relation Dim sFormula as String Set RefProduct = iProduct.ReferenceProduct Set oDocument = RefProduct.Parent 'oBaseForParameter bestimmt zu welchem Knoten der Pfad des Parameters bestimmt wird, bzw wo die Formel eingehängt wird Select Case TypeName(oDocument) Case "ProductDocument" Set oBaseForParameter = oDocument.Product Case "PartDocument" Set oBaseForParameter = oDocument.Part Case Else Exit Sub End Select for i = LBound(tabAttributes) to UBound(tabAttributes) Set oUserParameter = GetUserRefPropertiesByName(RefProduct, tabAttributes(i)) if oUserParameter is Nothing then if typAttributes(i) = "String" then Set oUserParameter = RefProduct.UserRefProperties.CreateString(tabAttributes(i), "") end if end if Set oParameter = oBaseForParameter.Parameters.Item(tabAttributes(i)) sFormula = "`" & oBaseForParameter.Parameters.GetNameToUseInRelation(oParameter) & "`" Set oFormula = oBaseForParameter.Relations.CreateFormula("","",oUserParameter,sFormula) Set oUserParameter = Nothing next End Sub Function GetUserRefPropertiesByName(oProduct As Product, ParameterName As String) As Parameter Dim UserProperties As Parameters Dim I As Integer Set UserProperties = oProduct.UserRefProperties For I = 1 To UserProperties.Count If Right(UserProperties.Item(I).Name, Len(ParameterName)) = ParameterName Then Set GetUserRefPropertiesByName = UserProperties.Item(I) Exit Function End If Next Set GetUserRefPropertiesByName = Nothing End Function
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JDH Mitglied
Beiträge: 10 Registriert: 08.09.2022
|
erstellt am: 09. Sep. 2022 06:29 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
|
JDH Mitglied
Beiträge: 10 Registriert: 08.09.2022
|
erstellt am: 09. Sep. 2022 08:38 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Hallo Nochmal, ich habe noch zwei Dinge, die ich nicht ganz verstehe. Attribute werden alle gesetzt aber die Werte werden nicht alle übernommen. wodran kann es liegen? Trifft bei Übergeordneter Baugruppe zu und bei Attribut "Weight" generell bei allen Products / Parts siehe Bild im Anhang Gruß Johannes 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: 09. Sep. 2022 08:43 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Servus Wurde eine Formel entsprechende Formel erzeugt? Wurde auch die Routine auf die Rootbaugruppe bzw Unterbaugruppen angewendet? Stimmt die Formel? Willst du wirklich einen Parameter des Typs String für die Gewicht nutzen? Hast du eine Fallunterscheidung zwischen CATProduct und Komponente drinnen? Prüfst du ob es eine Formel schon gibt (falls ein Teil mehrfach verbaut ist)? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JDH Mitglied
Beiträge: 10 Registriert: 08.09.2022
|
erstellt am: 09. Sep. 2022 09:02 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Nun der Parameter "Weight" in Parameters hat eine Formel verpasst bekommen. so dass das Gewicht aus dem Material und Volumen berechnet werden. Welchen Typ könnte ich für den Parameter Gewicht nutzen? Ich dachte, dass über den Typ String würde der mir alle Werte mitnimmt (auch wenn da eine Formel hinterlegt ist) Falluntersuchungen habe ich noch nicht drin. Prüfen ob eine Formel bereits gibt habe ich auch noch nicht drin Gruß Johannes 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: 09. Sep. 2022 09:19 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Servus Wie wäre es mit dem Parametertyp Mass bzw Weight (müsste ich mal testen). Oder du verwendest eine andere Formel: Mass_String = ToString(Mass / 1kg) + " kg" Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JDH Mitglied
Beiträge: 10 Registriert: 08.09.2022
|
erstellt am: 14. Sep. 2022 08:26 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Hallo Zusammen (Bernd) ich bin etwas verwirrt mit meinem Code. Attribute werden überall gesetzt (alle CatProducts so auch CatParts) Die Werte werden aber nur Teilweise übernommen. Bei Parts werden die werte wie gewünscht übernommen. Bei Products ist der Hacken. In der Übergeordnete Baugruppe werden die Parameter gar nicht eingesetzt. bei der Ersten Unter-Baugruppen-Level ist es etwas komisch. --> Baugruppe 1 in Level1 = wird nur ein von 6 Werte eingesetzt --> Baugruppe 2 in Level1 = werden alle 6 Werte eingesetzt.
siehe Bilder Gruß Johannes
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: 14. Sep. 2022 09:04 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Servus Johannes Unterscheiden sich die beiden CATProducts? Hast du schon mal den Code schrittweise (bzw entsprechenden Haltepunkt gesetzt) ausgeführt und geprüft: ob die Formel stimmt, auf den "richtigen" Parameter zugegriffen wurde, sonst irgend ein Object "sonderbar" ist? Wie sieht die Formel aus wenn die Verknüpfung funktioniert/nicht funktioniert? Du kannst man folgende Alternative zum Zugriff auf den Parameter probieren: Code: Set oParameter = oBaseForParameter.Parameters.RootParameterSet.DirectParameters.Item(tabAttributes(i))
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. 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: 14. Sep. 2022 09:12 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Hallo, werden denn die Formeln erzeugt? Beim Zugriff auf die Parameter Collection von Products muss man ein wenig aufpassen, da diese ALLE Parameter (auch die der Parts!) enthalten. Da erwischt man schnell mal den Falschen. Aber ohne den Quellcode wird es wohl schwierig sein den "Fehler" zu finden. Gruß Randle Nachtrag: Da war der Bernd (mal wieder) schneller! ------------------ Wer für nichts steht, fällt für alles! [Diese Nachricht wurde von Randle am 14. Sep. 2022 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JDH Mitglied
Beiträge: 10 Registriert: 08.09.2022
|
erstellt am: 14. Sep. 2022 09:36 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 14. Sep. 2022 09:39 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
|
JDH Mitglied
Beiträge: 10 Registriert: 08.09.2022
|
erstellt am: 14. Sep. 2022 09:53 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 14. Sep. 2022 10:06 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Servus Hast du meine letzte Ergänzung probiert? Bitte schmeiß On Error Resume Next aus dem Code raus und baue eine richtige Fehlerbehandlung ein. (sonst wirst du bei der Fehlersuche noch verrückt) Deine Suche nach den Products sieht auch sonderbar aus: nicht eindeutiger Filter? Schleife über i, das nie verwendet wird, .... Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. 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: 14. Sep. 2022 10:35 <-- editieren / zitieren --> Unities abgeben: Nur für deyhawaii
Hallo, ich würde mir die Parts und Products auch nicht über die Selection "holen" (Performance), sondern eine rekursive Schleife über die Produktstruktur laufen lassen und an die Funktion "CreateParameters" dann gleich das Dokument übergeben. Bin mir bei dem Code auch nicht sicher ob Komponenten sicher rausgefiltert werden. Außerdem fehlt (mir) noch die Überprüfung ob der Parameter und die Formel schon existiert, so wie du es ja auch bei der UserProperty machst. Du läufst so Gefahr Parameter/Formeln mehrfach zu erzeugen. Aber ansonsten, abgesehen von dem pauschalen setzen von "On Error Resume Next", muss ich sagen ist der Code gut strukturiert und somit auch gut lesbar. Sieht man (leider) auch nicht so oft. Abgesehen davon bleibe ich bei meiner Aussage von oben: Ich gehe davon aus das du ungewollt die falschen Parameter erwischt und dann mittels Formel verknüpfst. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! [Diese Nachricht wurde von Randle am 14. Sep. 2022 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |