Vytisknout stránku | Zavřít okno

PŘIDÁNÍ PARAMETRŮ A UŽ.IVL.

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: iLogic a ETO
Popis fóra: Funkce a makra iLogic, Inventor Engineering to Order (ETO), automatizace a konfigurace výrobků
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=28335
Datum vytištění: 16.kvě.2025 v 16:42


Téma: PŘIDÁNÍ PARAMETRŮ A UŽ.IVL.
Odeslal: Lukáš Záruba
Předmět: PŘIDÁNÍ PARAMETRŮ A UŽ.IVL.
Datum odeslání: 29.led.2019 v 12:46
Zdravím mám vzorec viz.: níže který funguje dobře v .ipt ale v .iam mi to hlásí chybu. Vzorec hromadně přidává parmetry a uživatelské ivlastnosti které následně využívá jiný vzorec. 

Nevím proč mi to funguje v dílu ale ne v sestavě. Napadá někoho jak to upravit tak aby to fungovalo i v sestavě?

Předem děkuji

Dim part As PartDocument = ThisDoc.Document
Dim userParams = part.ComponentDefinition.Parameters.UserParameters
Dim p As Inventor.Parameter

Try
 p = userParams("R1")
Catch
 p = userParams.AddByValue("R1", 0, "mm")
End Try
p.Comment = "NADPIS - ROZMĚR"
Try
 p = userParams("R2")
Catch
 p = userParams.AddByValue("R2", 0, "mm")
End Try
p.Comment = "NADPIS - ROZMĚR"
Try
 p = userParams("R3")
Catch
 p = userParams.AddByValue("R3", 0, "mm")
End Try
p.Comment = "NADPIS - ROZMĚR"
Try
 p = userParams("R4")
Catch
 p = userParams.AddByValue("R4", 0, "mm")
End Try
p.Comment = "NADPIS - ROZMĚR"
Try
 p = userParams("PR1")
Catch
 p = userParams.AddByValue("PR1", 0, "mm")
End Try
p.Comment = "POPIS - ROZMĚR"
Try
 p = userParams("PR2")
Catch
 p = userParams.AddByValue("PR2", 0, "mm")
End Try
p.Comment = "POPIS - ROZMĚR"
Try
 p = userParams("PR3")
Catch
 p = userParams.AddByValue("PR3", 0, "mm")
End Try
p.Comment = "POPIS - ROZMĚR"
Try
 p = userParams("PR4")
Catch
 p = userParams.AddByValue("PR4", 0, "mm")
End Try
p.Comment = "POPIS - ROZMĚR"

Dim propertyName As String = "N1"
Dim propertyValue As String = ""

customPropertySet = ThisDoc.Document.PropertySets.Item("Inventor User Defined Properties")
Try
      prop = customPropertySet.Item(propertyName)
Catch
      customPropertySet.Add("", propertyName)
End Try

Try
 prop = customPropertySet.Item("N1-M")
Catch
 customPropertySet.Add("","N1-M")
End Try

Try
 prop = customPropertySet.Item("N2")
Catch
 customPropertySet.Add("","N2")
End Try
Try
 prop = customPropertySet.Item("N2-M")
Catch
 customPropertySet.Add("","N2-M")
End Try

Try
 prop = customPropertySet.Item("N3")
Catch
 customPropertySet.Add("","N3")
End Try
Try
 prop = customPropertySet.Item("N3-M")
Catch
 customPropertySet.Add("","N3-M")
End Try

Try
 prop = customPropertySet.Item("P1")
Catch
 customPropertySet.Add("","P1")
End Try
Try
 prop = customPropertySet.Item("P1-M")
Catch
 customPropertySet.Add("","P1-M")
End Try

Try
 prop = customPropertySet.Item("P2")
Catch
 customPropertySet.Add("","P2")
End Try
Try
 prop = customPropertySet.Item("P2-M")
Catch
 customPropertySet.Add("","P2-M")
End Try

Try
 prop = customPropertySet.Item("P3")
Catch
 customPropertySet.Add("","P3")
End Try
Try
 prop = customPropertySet.Item("P3-M")
Catch
 customPropertySet.Add("","P3-M")
End Try

Try
 prop = customPropertySet.Item("PR1")
Catch
 customPropertySet.Add("","PR1")
End Try
Try
 prop = customPropertySet.Item("PR1-M")
Catch
 customPropertySet.Add("","PR1-M")
End Try

Try
 prop = customPropertySet.Item("PR2")
Catch
 customPropertySet.Add("","PR2")
End Try
Try
 prop = customPropertySet.Item("PR2-M")
Catch
 customPropertySet.Add("","PR2-M")
End Try

Try
 prop = customPropertySet.Item("PR3")
Catch
 customPropertySet.Add("","PR3")
End Try
Try
 prop = customPropertySet.Item("PR3-M")
Catch
 customPropertySet.Add("","PR3-M")
End Try

Try
 prop = customPropertySet.Item("PR4")
Catch
 customPropertySet.Add("","PR4")
End Try
Try
 prop = customPropertySet.Item("PR4-M")
Catch
 customPropertySet.Add("","PR4-M")
End Try

Try
 prop = customPropertySet.Item("R1")
Catch
 customPropertySet.Add("","R1")
End Try
Try
 prop = customPropertySet.Item("R1-M")
Catch
 customPropertySet.Add("","R1-M")
End Try

Try
 prop = customPropertySet.Item("R2")
Catch
 customPropertySet.Add("","R2")
End Try
Try
 prop = customPropertySet.Item("R2-M")
Catch
 customPropertySet.Add("","R2-M")
End Try

Try
 prop = customPropertySet.Item("R3")
Catch
 customPropertySet.Add("","R3")
End Try
Try
 prop = customPropertySet.Item("R3-M")
Catch
 customPropertySet.Add("","R3-M")
End Try

Try
 prop = customPropertySet.Item("R4")
Catch
 customPropertySet.Add("","R4")
End Try
Try
 prop = customPropertySet.Item("R4-M")
Catch
 customPropertySet.Add("","R4-M")
End Try



-------------
Budu rád za radu i případně všelijaké postřehy.



Odpovědi:
Odeslal: Navara
Datum odeslání: 29.led.2019 v 14:12
Tohle je dost děsivé :)
Pravilo selže, protože hned na prvním řádku je
Dim part As PartDocument = ThisDoc.Document
a to v sestavě prostě neprojde.
 
Níže je ten kód přepsaný do trochu lepšího tvaru včetně úpravy pro sestavu
Sub Main()
    Dim userParams As UserParameters = GetUserParams(ThisDoc.Document)
 
    EnsureParameter(userParams, "R1", comment:="NADPIS - ROZMĚR")
    EnsureParameter(userParams, "R2", comment:="NADPIS - ROZMĚR")
    EnsureParameter(userParams, "R3", comment:="NADPIS - ROZMĚR")
    EnsureParameter(userParams, "R4", comment:="NADPIS - ROZMĚR")
    EnsureParameter(userParams, "PR1", comment:="POPIS - ROZMĚR")
    EnsureParameter(userParams, "PR2", comment:="POPIS - ROZMĚR")
    EnsureParameter(userParams, "PR3", comment:="POPIS - ROZMĚR")
    EnsureParameter(userParams, "PR4", comment:="POPIS - ROZMĚR")
 
    Dim customPropertySet = ThisDoc.Document.PropertySets.Item("Inventor User Defined Properties")
 
    EnsureProperty(customPropertySet, "N1")
    EnsureProperty(customPropertySet, "N1-M")
    EnsureProperty(customPropertySet, "N2")
    EnsureProperty(customPropertySet, "N2-M")
    EnsureProperty(customPropertySet, "N3")
    EnsureProperty(customPropertySet, "N3-M")
    EnsureProperty(customPropertySet, "P1")
    EnsureProperty(customPropertySet, "P1-M")
    EnsureProperty(customPropertySet, "P2")
    EnsureProperty(customPropertySet, "P2-M")
    EnsureProperty(customPropertySet, "P3")
    EnsureProperty(customPropertySet, "P3-M")
    EnsureProperty(customPropertySet, "PR1")
    EnsureProperty(customPropertySet, "PR1-M")
    EnsureProperty(customPropertySet, "PR2")
    EnsureProperty(customPropertySet, "PR2-M")
    EnsureProperty(customPropertySet, "PR3")
    EnsureProperty(customPropertySet, "PR3-M")
    EnsureProperty(customPropertySet, "PR4")
    EnsureProperty(customPropertySet, "PR4-M")
    EnsureProperty(customPropertySet, "R1")
    EnsureProperty(customPropertySet, "R1-M")
    EnsureProperty(customPropertySet, "R2")
    EnsureProperty(customPropertySet, "R2-M")
    EnsureProperty(customPropertySet, "R3")
    EnsureProperty(customPropertySet, "R3-M")
    EnsureProperty(customPropertySet, "R4")
    EnsureProperty(customPropertySet, "R4-M")
 
End Sub

Function GetUserParams(doc As Document) As UserParameters
    If (doc.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject) Then
        Dim asm As AssemblyDocument = doc
        Return asm.ComponentDefinition.Parameters.UserParameters
    ElseIf (doc.DocumentType = DocumentTypeEnum.kPartDocumentObject) Then
        Dim prt As PartDocument = doc
        Return prt.ComponentDefinition.Parameters.UserParameters
    Else
        Throw New ArgumentOutOfRangeException("Document can be AssemblyDocument or PartDocument")
    End If
End Function
 
Function EnsureParameter(
                userParams As UserParameters,
                paramName As String,
                Optional defaultValue As Double = 0,
                Optional units As String = "mm",
                Optional comment As String = "") As Parameter
    Dim p As Parameter
    Try
        p = userParams(paramName)
    Catch ex As Exception
        p = userParams.AddByValue(paramName, defaultValue, units)
        p.Comment = comment
    End Try
    Return p
End Function
 
Function EnsureProperty(propertySet As PropertySet, propName As String, optional defaultValue As String  = "") As [Property]
    dim p as [Property]
    Try
        p = propertySet(propName)
    Catch ex As Exception
        p = propertySet.Add(defaultValue,propName)
    End Try
    Return p
End Function


Odeslal: Lukáš Záruba
Datum odeslání: 29.led.2019 v 16:27
díky, už mi to funguje. Thumbs Up

-------------
Budu rád za radu i případně všelijaké postřehy.


Odeslal: Lukáš Záruba
Datum odeslání: 29.led.2019 v 18:19
Je možné do tohoto ilogicu dopsat i část která by stejně vkládala textové parametry jako teď číselné parametry ?

-------------
Budu rád za radu i případně všelijaké postřehy.


Odeslal: Navara
Datum odeslání: 31.led.2019 v 08:39
třeba takhle
 
Function EnsureParameter(
                userParams As UserParameters,
                paramName As String,
                Optional defaultValue As String= "",
                Optional comment As String = "") As Parameter
    Dim p As Parameter
    Try
        p = userParams(paramName)
    Catch ex As Exception
        p = userParams.AddByValue(paramName, defaultValue, "TEXT")
        p.Comment = comment
    End Try
    Return p
End Function


Odeslal: Lukáš Záruba
Datum odeslání: 31.led.2019 v 11:08
OK, díky to je ono. Již to funguje a vypadá to takto:

Sub Main()
    Dim userParams As UserParameters = GetUserParams(ThisDoc.Document)
 
    EnsureParameter(userParams, "R1", comment:="NADPIS - ROZM�R")
    EnsureParameter(userParams, "R2", comment:="NADPIS - ROZM�R")
    EnsureParameter(userParams, "R3", comment:="NADPIS - ROZM�R")
    EnsureParameter(userParams, "R4", comment:="NADPIS - ROZM�R")
    EnsureParameter(userParams, "R5", comment:="NADPIS - ROZM�R")
    EnsureParameter(userParams, "PR1", comment:="POPIS - ROZM�R")
    EnsureParameter(userParams, "PR2", comment:="POPIS - ROZM�R")
    EnsureParameter(userParams, "PR3", comment:="POPIS - ROZM�R")
    EnsureParameter(userParams, "PR4", comment:="POPIS - ROZM�R")
    EnsureParameter(userParams, "PR5", comment:="POPIS - ROZM�R")
    EnsureParameterTEXT(userParams, "TEST", comment:="TESTOVAC� PARAMETR")
    
 
    Dim customPropertySet = ThisDoc.Document.PropertySets.Item("Inventor User Defined Properties")
 
    EnsureProperty(customPropertySet, "N1")
    EnsureProperty(customPropertySet, "N1-M")
    EnsureProperty(customPropertySet, "N2")
    EnsureProperty(customPropertySet, "N2-M")
    EnsureProperty(customPropertySet, "N3")
    EnsureProperty(customPropertySet, "N3-M")
    EnsureProperty(customPropertySet, "N4")
    EnsureProperty(customPropertySet, "N4-M")
    EnsureProperty(customPropertySet, "N5")
    EnsureProperty(customPropertySet, "N5-M")
    EnsureProperty(customPropertySet, "P1")
    EnsureProperty(customPropertySet, "P1-M")
    EnsureProperty(customPropertySet, "P2")
    EnsureProperty(customPropertySet, "P2-M")
    EnsureProperty(customPropertySet, "P3")
    EnsureProperty(customPropertySet, "P3-M")
    EnsureProperty(customPropertySet, "P4")
    EnsureProperty(customPropertySet, "P4-M")
    EnsureProperty(customPropertySet, "P5")
    EnsureProperty(customPropertySet, "P5-M")
    EnsureProperty(customPropertySet, "PR1")
    EnsureProperty(customPropertySet, "PR1-M")
    EnsureProperty(customPropertySet, "PR2")
    EnsureProperty(customPropertySet, "PR2-M")
    EnsureProperty(customPropertySet, "PR3")
    EnsureProperty(customPropertySet, "PR3-M")
    EnsureProperty(customPropertySet, "PR4")
    EnsureProperty(customPropertySet, "PR4-M")
    EnsureProperty(customPropertySet, "PR5")
    EnsureProperty(customPropertySet, "PR5-M")
    EnsureProperty(customPropertySet, "R1")
    EnsureProperty(customPropertySet, "R1-M")
    EnsureProperty(customPropertySet, "R2")
    EnsureProperty(customPropertySet, "R2-M")
    EnsureProperty(customPropertySet, "R3")
    EnsureProperty(customPropertySet, "R3-M")
    EnsureProperty(customPropertySet, "R4")
    EnsureProperty(customPropertySet, "R4-M")
    EnsureProperty(customPropertySet, "R5")
    EnsureProperty(customPropertySet, "R5-M")
    EnsureProperty(customPropertySet, "MAT")
    EnsureProperty(customPropertySet, "MAT-M")
    EnsureProperty(customPropertySet, "MAT2")
    EnsureProperty(customPropertySet, "MAT2-M")
    EnsureProperty(customPropertySet, "TYP1")
    EnsureProperty(customPropertySet, "TYP1-M")
    EnsureProperty(customPropertySet, "TYP2")
    EnsureProperty(customPropertySet, "TYP2-M")
 
End Sub

Function GetUserParams(doc As Document) As UserParameters
    If (doc.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject) Then
        Dim asm As AssemblyDocument = doc
        Return asm.ComponentDefinition.Parameters.UserParameters
    ElseIf (doc.DocumentType = DocumentTypeEnum.kPartDocumentObject) Then
        Dim prt As PartDocument = doc
        Return prt.ComponentDefinition.Parameters.UserParameters
    Else
        Throw New ArgumentOutOfRangeException("Document can be AssemblyDocument or PartDocument")
    End If
End Function
 
Function EnsureParameter(
                userParams As UserParameters,
                paramName As String,
                Optional defaultValue As Double = 0,
                Optional units As String = "mm",
                Optional comment As String = "") As Parameter
    Dim p As Parameter
    Try
        p = userParams(paramName)
    Catch ex As Exception
        p = userParams.AddByValue(paramName, defaultValue, units)
        p.Comment = comment
    End Try
    Return p
End Function

Function EnsureParameterTEXT(
                userParams As UserParameters,
                paramName As String,
                Optional defaultValue As String= "",
                Optional comment As String = "") As Parameter
    Dim p As Parameter
    Try
        p = userParams(paramName)
    Catch ex As Exception
        p = userParams.AddByValue(paramName, defaultValue, "TEXT")
        p.Comment = comment
    End Try
    Return p
End Function

Function EnsureProperty(propertySet As PropertySet, propName As String, Optional defaultValue As String  = "") As [Property]
    Dim p As [Property]
    Try
        p = propertySet(propName)
    Catch ex As Exception
        p = propertySet.Add(defaultValue,propName)
    End Try
    Return p
End Function


-------------
Budu rád za radu i případně všelijaké postřehy.


Odeslal: Lukáš Záruba
Datum odeslání: 31.led.2019 v 11:29
Napadá mě, že když už mám pravidlo které mi vytvoří všechny potřebné parametry a vlastnosti aby z nich jiné pravidlo mohlo poskládat texty. Nedalo by se na konec tohoto pravidla napsat příkaz?

Něco takového - 

Vlož do tohoto dokumentu externí pravidlo :

1) NADPIS
2) POPIS
3) MAT 


-------------
Budu rád za radu i případně všelijaké postřehy.


Odeslal: Navara
Datum odeslání: 31.led.2019 v 11:42
Zkuste se podívat na RunExternalRule


Odeslal: Lukáš Záruba
Datum odeslání: 31.led.2019 v 12:01
Ano to funguje když ho potřebuji spustit ale já bych ho chtěl uložit přímo do itp a iam. Pravidlo výše popsané mi připraví parametry a vlastnosti pro itp a iam, které jsou přeukládané ze starších projektů a ty je nemají. Nové již mají vše připravené v šablonách. Proto se snažím vytvořit si pravidlo které by mi po přeuložení starého modelu na nové pomohlo co nejvíce nastavit díl tak aby bez větších zásahů byl jako nová šablona.

-------------
Budu rád za radu i případně všelijaké postřehy.


Odeslal: Navara
Datum odeslání: 31.led.2019 v 13:25
Používání interních pravidel v dokumentu není vhodná cesta.
Nejvíc se mi v praxi osvědčilo hlídání určité události nad dokumentem (nejčastěji před uložením) a na tuto událost spouštět externí pravidla.
K tomu je v XTools přímo možnost nastavit pravidlo, které se má spouštět. Toto pravidlo pak může volat další pravidla atd...
Důvody jsem tu už rozebíral mnohokrát, ale nejdůležitější je: Až (ne jestli!) bude potřeba v budoucnu změnit tato pravidla, budete mít opravdu velký problém. U externích to změníte na jednom místě a máte klid.


Odeslal: Lukáš Záruba
Datum odeslání: 31.led.2019 v 14:10
Ok, děkuji za doporučení.

Je tedy možné na konec tohoto pravidla napsat příkaz, která mi přiřadí jednotlivá externí pravidla k událostem při který se mají spouštět? viz výstřižek níže? 






-------------
Budu rád za radu i případně všelijaké postřehy.


Odeslal: Navara
Datum odeslání: 04.úno.2019 v 10:48
Nevím, jestli je tohle někde zdokumentované.
Referenční příručka k iLogicu je dostupná tady: http://help.autodesk.com/view/INVNTOR/2019/ENU/?guid=GUID-AB9EE660-299E-408F-BBE1-AFE44C723F59" rel="nofollow - http://help.autodesk.com/view/INVNTOR/2019/ENU/?guid=GUID-AB9EE660-299E-408F-BBE1-AFE44C723F59
 
Možná to nějak půjde, ale nevím jak.
Navíc tyhle spouštěče jsou opět uložené v dokumentu a pokud v budoucnu pravidlo nebude dostupné, nastane chyba. Pokud budete chtít další přidat, máte stejný problém, jako kdyby bylo pravidlo lokální.
Já jsem pro tenhle účel napsal do XTools právě ty vlastní spouštěče, protože nejsou závislé na tom, aby byly uvedené v dokumentu, pokud v budoucnu zmizí, tak se nic nestane (takový stav je ošetřen), pokud přibydou, tak se jednoduše doplní.
 



Vytisknout stránku | Zavřít okno