Autor
|
Thema: Formel von Parameter finden (3172 mal gelesen)
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 19. Jan. 2015 14:41 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, wie finde ich eine zum Parameter zugeordnete Formel um sie löschen zu können? Makroaufzeichnung liefert nur ein
Code:
Set strParam1 = parameters1.Item("Rohmasse_Bestellbez") strParam1.Value = ""
Funktioniert aber leider im Code nicht
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
imation1999 Mitglied dipl.-ing. Maschinenbau
Beiträge: 276 Registriert: 02.08.2011 Dell Precision T3500 Intel® Xeon® Quad Core NVIDIA Quadro® 5000 Win7 x64 Ultimate CATIA V5 R20 SP2
|
erstellt am: 19. Jan. 2015 14:56 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Hallo Uwe, versuch mal so:
Code:
Sub Catmain()Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim parameters1 As Parameters Set parameters1 = part1.Parameters Dim strParam1 Set strParam1 = parameters1.Item("Rohmasse_Bestellbez") Dim relations1 As Relations Set relations1 = part1.Relations Dim formula1 As Formula 'Set formula1 = relations1.Item("Formula.1") Set formula1 = strParam1.OptionalRelation Set selection1 = CATIA.ActiveDocument.Selection selection1.clear selection1.add formula1 selection1.delete End Sub
[Diese Nachricht wurde von imation1999 am 19. Jan. 2015 editiert.] 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: 19. Jan. 2015 21:17 <-- editieren / zitieren --> Unities abgeben:
|
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. Jan. 2015 07:27 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal, momentan weise ich eine Formel einem Gewichtsparameter zu. Zitat: Set oFormula1 = oRelations.CreateFormula("Formula1", "", strParam1, "ToString(smartVolume(PartBody ) *`PartBody\Steel\Steel.1.1\Density` )")
Wie kann ich es Abfangen wenn das Material ein anderes ist als in diesem Fall Stahl? ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! 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: 20. Jan. 2015 12:23 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Servus Um den "Pfad" zum Parameter nicht hart zu coden kannst du den Parameter der Funktion "GetNameToUseInRelation" übergeben. Code: Sub CATMain() Dim oPartDoc As PartDocument Dim oParameters As Parameters Dim oDensity As Parameter Dim oParameterSublist As ParametersSet oPartDoc = CATIA.ActiveDocument Set oParameters = oPartDoc.Product.Parameters Set oDensity = GetParameterByName(oParameters, "Dichte") MsgBox oParameters.GetNameToUseInRelation(oDensity) End Sub Function GetParameterByName(oParameters As Parameters, ParameterName As String) As Parameter Dim I As Integer Set GetParameterByName = Nothing For I = oParameters.Count To 1 Step -1 If Right(oParameters.Item(I).Name, Len(ParameterName)) = ParameterName Then Set GetParameterByName = oParameters.Item(I) Exit Function End If Next End Function
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. 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. Jan. 2015 07:18 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, top. Hab das ganze mal eingearbeitet.Nun habe ich mit dem Syntax der Formel Probleme. Dir sind ja meine Programmierkenntnisse bekannt. Eher Bescheiden. Hier möchte ich die Density einbinden. "MatDensity" Entweder bekomme ich Syntaxfehler oder eine Typedeclaration fehlet. (Fehlermeldung: Type-declaration character does not match declared data Type) Könntest du noch einmal helfen. Zitat: Sub CreateDensity(oActiveDoc, paraToChange As String, FormulaWertFuell As String)Dim strParam1 'As Parameters Dim selection1 As Selection Set selection1 = CATIA.ActiveDocument.Selection Dim ChangeParameter Dim oRelations 'As Relations Set oRelations = oActiveDoc.Part.Relations Dim oFormula1 As Formula Dim oParameters As Parameters Set oParameters = oActiveDoc.Part.Parameters Dim oDensity As Parameter Dim oParameterSublist As Parameters Set oDensity = GetParameterByName(oParameters, "Density") Dim MatDensity MsgBox oParameters.GetNameToUseInRelation(oDensity) MatDensity = oParameters.GetNameToUseInRelation(oDensity) On Error Resume Next 'Laufzeitfehlerbehandlung ausschalten Set strParam1 = oParameters.Item(paraToChange) If strParam1 Is Nothing Then 'Der gewünschte Parameter NICHT ChangeParameter = -1 'Rueckgabewert bestimmen (Fall: Parameter wurde nicht gefunden) MsgBox "Parameter " & paraToChange & " nicht vorhanden" Else Set oFormula1 = strParam1.OptionalRelation selection1.Clear selection1.Add oFormula1 selection1.Delete strParam1.Value = " " Set oFormula1 = oRelations.CreateFormula("Formula1", "", strParam1, "ToString(round((smartVolume(Fertigteil )*" & MatDensity&, "" & """" & "" & """" & ",2))+" & """" & "kg" & """" & " ") ###Original Syntax###'Set oFormula1 = oRelations.CreateFormula("Formula1", "", strParam1, "ToString(round((smartVolume(Fertigteil )*`Fertigteil\Steel\Steel.1.1\Density` )," & """" & "" & """" & ",2))+" & """" & "kg" & """" & " ") End If On Error GoTo 0 '***LAUFZEITFEHLERBEHANDLUNG EINSCHALTEN End Sub
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! 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: 21. Jan. 2015 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Servus Uwe Ich gehe mal davon aus, das du den Parameter dem du die Formel zuweisen willst der Sub übergibst. Du hattest, meiner Ansicht nach, beim "round" die Angabe der Einheit vergessen. Anbei mein Vorschlag des Codes (das Löschen der vorhandenen Formel hab ich mal rausgeschmissen (war zu faul)). Code:
Sub TestSub()Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim parameters1 As Parameters Set parameters1 = part1.Parameters Dim strParam1 As StrParam Set strParam1 = parameters1.Item("Zeichenfolge") CreateDensity partDocument1, strParam1 End Sub Sub CreateDensity(oActiveDoc As Document, paraToChange As Parameter) Dim strParam1 'As Parameters Dim selection1 As Selection Set selection1 = CATIA.ActiveDocument.Selection Dim ChangeParameter Dim oRelations 'As Relations Set oRelations = oActiveDoc.Part.Relations Dim oFormula1 As Formula Dim oParameters As Parameters Set oParameters = oActiveDoc.Part.Parameters Dim oDensity As Parameter Dim oParameterSublist As Parameters Set oDensity = GetParameterByName(oParameters, "Density") Dim MatDensity MsgBox oParameters.GetNameToUseInRelation(oDensity) MatDensity = oParameters.GetNameToUseInRelation(oDensity) Dim StrFormel As String StrFormel = "ToString(round((smartVolume(Fertigteil ) * " & MatDensity & ")," & """kg""" & ",2))" & "+ ""kg""" Set oFormula1 = oRelations.CreateFormula("", "", paraToChange, StrFormel) End Sub Function GetParameterByName(oParameters As Parameters, ParameterName As String) As Parameter Dim I As Integer Set GetParameterByName = Nothing For I = oParameters.Count To 1 Step -1 If Right(oParameters.Item(I).Name, Len(ParameterName)) = ParameterName Then Set GetParameterByName = oParameters.Item(I) Exit Function End If Next End Function
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. 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. Jan. 2015 11:49 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, Zitat: Ich gehe mal davon aus, das du den Parameter dem du die Formel zuweisen willst der Sub übergibst.
Dem ist so. Danke dir, werde das mal einbauen. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! 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: 25. Jan. 2015 12:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, muss dich nochmal belästigen. ich möchte nun mit "OptionalRelation" die ConfigurationRow einer verknüpfte DesignTabelle ändern. Code: Sub ChangeDesignTableRow(oActiveDoc, paraToChange As String, FormulaWertFuell As String)Dim strParam1 'As Parameters Dim selection1 As Selection Set selection1 = CATIA.ActiveDocument.Selection Dim ChangeParameter Dim oRelations 'As Relations Set oRelations = oActiveDoc.Part.Relations Dim oFormula1 As Formula Dim oParameters 'As Parameters Set oParameters = oActiveDoc.Part.Parameters On Error Resume Next 'Laufzeitfehlerbehandlung ausschalten Set strParam1 = oParameters.Item(paraToChange) If strParam1 Is Nothing Then 'Der gewünschte Parameter NICHT ChangeParameter = -1 'Rueckgabewert bestimmen (Fall: Parameter wurde nicht gefunden) MsgBox "Parameter " & paraToChange & " nicht vorhanden" Else Set oFormula1 = strParam1.OptionalRelation 'Verknüpfte Relation zu Parameter suchen MsgBox oFormula1.Name oRelations.Item(oFormula1.Name).Configuration = 1 End If On Error GoTo 0 '***LAUFZEITFEHLERBEHANDLUNG EINSCHALTEN End Sub
] Leider wird oFormula1 nicht gefüllt, wobei "OptionalRelation" von strParam1 die Designtabelle findet? Kannst du mir sagen was ich falsch mache. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! 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: 25. Jan. 2015 13:39 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Servus Hast du mal ein Bild wie deine Struktur aussieht? Gibt es eine extra Formel die die DesignTable steuert? Oder willst du direkt auf die DesignTable zugreifen? Welchen Parameter-Namen willst du deiner Sub übergaben? Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. 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: 25. Jan. 2015 15:55 <-- editieren / zitieren --> Unities abgeben:
Servus, Zitat: Hast du mal ein Bild wie deine Struktur aussieht?
Siehe Anhang. Zitat: Gibt es eine extra Formel die die DesignTable steuert?
Nein Zitat: Oder willst du direkt auf die DesignTable zugreifen?
Ja (wäre sogar schön wenn der Anwender die Reihe auswählen könnte. Muss aber nicht unbedingt sein.) Zitat: Welchen Parameter-Namen willst du deiner Sub übergaben?
Parameter Gewicht wird in Variable "paraToChange" übergeben. Hintergrund ist der, das ich später die Configurationrow der Parts in der Produktstruktur automatisch ändern möchte.
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! 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: 25. Jan. 2015 16:06 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 25. Jan. 2015 16:12 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Jan. 2015 17:23 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Servus Uwe "OptionalRelation " liefert dir direkt die DesignTable (zB):
Code: Dim oTable as Relation Set oTable = strParam1.OptionalRelation 'Verknüpfte Relation/DisignTable zu Parameter suchen oTable.Configuration = 1 'Konfiguration ändern
Ob das so in deiner tiefer verschachtelten Struktur funktioniert weiß ich nicht (gibt es den Parameter öfters? Heißt der nicht zB "Körper.24\Gewinde". Gruß Bernd PS: Schalte die Fehlerbehandlung nur aus wenn du das benötigst (nach dem Abfragen des Parameters wieder einschalten) PS2: Programmierst du in VBA? ------------------ Warum einfach, wenn es auch kompliziert geht. 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: 25. Jan. 2015 22:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, Den Parameter gibt es nur ein mal. Habs getestet und funktioniert. Danke Ich programmiere in VBA. Mit der Fehlerbehebung bin ich noch nicht so eins. Bin froh wenn es dann klappt. Aber warum weiß ich nicht wirklich. Kannst du mir das mal genauer erklären? ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! 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: 26. Jan. 2015 07:24 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 31. Jan. 2015 15:43 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, danke für den Link. Wie kann ich denn die Formeln von "Sheet Metal Parametern" von einer Selektion ausschließen? (siehe Bild) Momentan schließe ich die Formel "DINNormaFormula" mit
Code: For Each aktiRel In oRel If aktiRel.Name <> "DINNormaFormula" Then oSel.Add aktiRel oSel.Delete Next
aus. z.B. mit: Code: If aktiRel.Name <> "DINNormaFormula" Or "Bend Radius" Or "ReliefRadialLength" Then oSel.Add aktiRel
kann ich ja bestimmte Formeln ausschließen. Siehst du eine Möglichkeit alle auf einmal auszuschließen? ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! [Diese Nachricht wurde von moppesle am 31. Jan. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |