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'
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.