CAD tip # 13946:
Otázka
Kdo si někdy zkoušel vytvářet vlastní pravidla v iLogic, jistě narazil na jednu zvláštnost při přístupu k hodnotám parametrů v modelu Inventoru. Numerické hodnoty jsou reprezentovány tzv. databázovými jednotkami, což je v případě délkových, plošných a objemových jednotek vždy cm (centimetr, resp. cm^2, cm^3). My ale zpravidla potřebujeme hodnotu mm, resp. jednotky původního dokumentu nebo původního parametru.
V těchto případech pomůže jednoduchá konverzní funkce, která hodnotu daného parametru vrátí v jednotkách daného parametru, nebo - ještě praktičtěji - v hodnotách aktuálního dokumentu Inventoru.
V následujícím kódu iLogic najdete funkci GetRealParValue, která vrací skutečnou číselnou hodnotu v jednotkách parametru, a pokročilejší funkci GetRealParameterValue, která vrací hodnotu v libovolných jednotkách, např. ve výchozích jednotkách dokumentu. Ve vašich pravidlech pak prostě použijete místo Param.Value volání GetRealParValue(Param).
Kód obsahuje i úvodní, nepodstatnou část, která jen ilustruje použití obou funkcí.
Public Sub Main() Dim oDoc As PartDocument = ThisDoc.Document Dim Param As [Parameter] = oDoc.ComponentDefinition.Parameters.Item("d17a") ' <-- YOUR PARAMETER Dim uom = oDoc.UnitsOfMeasure Dim valueInParameterUnits As Double = GetRealParValue(Param) ' Dim valueInParameterUnits As Double = GetRealParameterValue(oDoc, Param) Dim valueInDocumentUnits As Double = GetRealParameterValue(oDoc, Param, UnitsTypeEnum.kDefaultDisplayLengthUnits) Dim documentUnits As String = uom.GetStringFromType(UnitsTypeEnum.kDefaultDisplayLengthUnits) MsgBox("Parameter value is: " & vbCrLf & valueInParameterUnits & " " & Param.Units & vbCrLf & valueInDocumentUnits & " " & documentUnits, MsgBoxStyle.Information, "iLogic convertor") End Sub Public Function GetRealParValue(Par As [Parameter]) As Double ' BASIC Dim uom = ThisDoc.Document.UnitsOfMeasure Dim outUnit = uom.GetTypeFromString(Par.Units) Dim dbUnitStr As String = uom.GetDatabaseUnitsFromExpression(Par.Expression, Par.Units) Dim dbUnit As UnitsTypeEnum = uom.GetTypeFromString(dbUnitStr) Dim rValue As Double = uom.ConvertUnits(Par.Value, dbUnit, outUnit) Return rValue End Function Public Function GetRealParameterValue(oDoc As Document, ' ADVANCED Param As [Parameter], Optional OutputUnit As UnitsTypeEnum = Nothing) As Double Dim uom = oDoc.UnitsOfMeasure If (OutputUnit = Nothing) Then OutputUnit = uom.GetTypeFromString(Param.Units) End If Dim DatabaseUnitStr As String = uom.GetDatabaseUnitsFromExpression( Param.Expression, Param.Units) Dim DatabaseUnit As UnitsTypeEnum = uom.GetTypeFromString(DatabaseUnitStr) Dim rValue As Double = uom.ConvertUnits(Param.Value, DatabaseUnit, OutputUnit) Return rValue End Function
Ukázka použití funkcí pro parametr "d17a", v dokumentu s jednotkami "mm":