Zobrazit plnou verzi příspěvku: VLOŽENÍ VÍCE UŽIVATELSKÝCH IVLASTNOSTÍ NAJEDNOU

Lukáš Záruba
20.10.2018, 10:55
Zdravím,Mám Ilogic který mi poskládá název "Title" z už.vl.+rozměrů ale nevím jak napsat aby před složením Názvu vytvořil všechny ivlastnosti a parametry do modelu. ( Dim propertyName As String = "PREDNAZEV"
Dim propertyValue As String = ""

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

iProperties.Value("Summary", "Title") = iProperties.Value("Custom", "PREDNAZEV")&" "&iProperties.Value("Custom", "TYP")&" - "&Parameter("DÉLKA")&"mm"
'PREDNAZEV - MUSÍ BÝT V UŽVATELSKÝCH IVLASTNOSTECH V MODELU' 'typ - MUSÍ BÝT V UŽVATELSKÝCH IVLASTNOSTECH V MODELU' 'DÉLKA - MUSÍ BÝT PARAMETR DÉLKY DÍLU'

Vladimír Michl
20.10.2018, 14:37
To je na vás. Nebo se generují také nějak automaticky? Nebo jen chcete zkontrolovat, zda už je uživatel správně vytvořil?

Lukáš Záruba
20.10.2018, 22:17
Dosud jsem to používal jen v nových projektech kde mám již v šabloně připraveny:uživatelské ivlastnosti: "PREDNAZEV" ; "TYP"uživatelský parametr: DélkaTeď ale musím pracovat i se staršími projekty, které to nemají tahle přesně nastavený a proto chci pomocí ilogicu automaticky před vlastním složením názvu zkontrolovat zda jsou nebo je vytvořit.  

Vladimír Michl
21.10.2018, 09:57
Rozumím. Když si to skládání Title dáte do větve Try (té stávající nebo nové), můžete tím ošetřit stav, kdy parametr neexistuje a zobrazit třeba upozornění (MsgBox).

Lukáš Záruba
21.10.2018, 18:36
Takže nějak takhle? ale tohle mi nějak nefunguje. nevím kde je chyba.Try
p = Parameter("DÉLKA")
Catch
oUserParams.AddByValue("DÉLKA","","mm")
End Try

Try
prop = customPropertySet.Item("PREDNAZEV")
Catch
customPropertySet.Add("Custom","PREDNAZEV")
End Try

Try
prop = customPropertySet.Item("TYP")
Catch
customPropertySet.Add("Custom","TYP")
End Try

iProperties.Value("Summary", "Title") = iProperties.Value("Custom", "PREDNAZEV")&" "&iProperties.Value("Custom", "TYP")&" - "&Parameter("D�LKA")&"mm"
'PREDNAZEV - MUSÍ BÝT V UŽVATELSKÝCH IVLASTNOSTECH V MODELU'
'TYP - MUSÍ BÝT V UŽVATELSKÝCH IVLASTNOSTECH V MODELU'
'DÉLKA - MUSÍ BÝT PARAMETR DÉLKY DÍLU'

Vladimír Michl
21.10.2018, 18:43
ne, to nastavení Title musíte mít v tom Trykonstrukce Try-Catch je v principu:zkus tohleto, a když to selže, tak proveď tohleto

Lukáš Záruba
21.10.2018, 18:49
No ale já potřebuju aby mi ilogic prozkoumal jestli v modelu je a pokud není tak vložil:1x uživatlský parametr "DÉLKA"a2X Uživatelskou ilvastnost "PREDNAZEV" + "TYP"zbytek tohoto pravidla když když je v modelu kde tyto věci jsou funguje bez chyby iProperties.Value("Summary", "Title") = iProperties.Value("Custom", "PREDNAZEV")&" "&iProperties.Value("Custom", "TYP")&" - "&Parameter("D�LKA")&"mm"
'PREDNAZEV - MUSÍ BÝT V UŽVATELSKÝCH IVLASTNOSTECH V MODELU'
'TYP - MUSÍ BÝT V UŽVATELSKÝCH IVLASTNOSTECH V MODELU'
'DÉLKA - MUSÍ BÝT PARAMETR DÉLKY DÍLU'

Navara
22.10.2018, 12:00


Tady už je asi potřeba přemýšlet trochu víc jako programátor. To co bych doporučil je začít využívat funkce místo psaní přímočarého skriptu. Vede to potom na mnohem čitelnější a kratší kód, než v prvním případě.[code]Sub Main()    Dim doc As Document = ThisDoc.Document    SetTitle(doc)End SubPrivate Sub SetTitle(doc As Document)    Dim delka As String = GetParameterValue(doc, "DÉLKA")    Dim prednazev As String = GetPropertyValue(doc, "PREDNAZEV")    Dim typ As String = GetPropertyValue(doc, "TYP")    doc.PropertySets("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}")("Title").Value = String.Format("{0} {1}-{2}", prednazev, typ, delka)End SubPrivate Function GetPropertyValue(doc As Document, propertyName As String) As String    Dim userDefinedProperties As PropertySet = doc.PropertySets("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}")    Dim prop As Inventor.Property    Try        prop = userDefinedProperties(propertyName)    Catch ex As Exception        prop = userDefinedProperties.Add("", propertyName)    End Try    Return prop.Value.ToString()End FunctionPrivate Function GetParameterValue(doc As Document, paramName As String) As String    Dim part As PartDocument = doc    Dim userParameters As UserParameters = part.ComponentDefinition.Parameters.UserParameters    Dim param As Parameter    Try        param = UserParameters(paramName)    Catch ex As Exception        userParameters.AddByValue(paramName, 0, "mm")    End Try    'Nastavit propisovani parametru do iVlastnosti    param.ExposedAsProperty = True    Dim value As Double = param.ModelValue * 10    Return String.Format("{0} mm", value)End Function[/code] Další možností je využití interní funkce Inventoru na skládání hodnot iVlastností pomocí výrazů. Tady stačí ten kód spustit jenom jednou a potom už se hodnota Title mění automaticky při změně jedné z použitých iVlastností. [code]Sub Main()    Dim doc As Document = ThisDoc.Document    SetTitleAsExpression(doc)End SubPrivate Sub SetTitleAsExpression(doc As Document)    Dim delka As String = GetParameterValue(doc, "DÉLKA")    Dim prednazev As String = GetPropertyValue(doc, "PREDNAZEV")    Dim typ As String = GetPropertyValue(doc, "TYP")   doc.PropertySets("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}")("Title").Expression = "=<PREDNAZEV> <TYP>-<DÉLKA>"End Sub[/code]  

Navara2018-10-22 12:10:34

Lukáš Záruba
22.10.2018, 13:05
Děkuji za radu, zkusím to.