public InventorParameters ExtractParameters(Document doc, dynamic userParameters) { /* The resulting json will be like this: * { * "length" : { * "unit": "in", * "value": "10 in", * "values": ["5 in", "10 in", "15 in"] * }, * "width": { * "unit": "in", * "value": "20 in", * } * } */ try { var parameters = new InventorParameters(); foreach (dynamic param in userParameters) { var nominalValue = param.Expression; try { var unitType = doc.UnitsOfMeasure.GetTypeFromString(param.Units); var value = doc.UnitsOfMeasure.GetValueFromExpression(param.Expression, unitType); nominalValue = doc.UnitsOfMeasure.GetPreciseStringFromValue(value, unitType); } // not all unitTypes seem to be convertible (e.g. kTextUnits). In that case, we'll go on with param.Expression assigned before. catch (Exception e) { LogError("Can't get nominalValue for " + param.Name + ": " + e.Message); } var parameter = new InventorParameter { Unit = param.Units, Value = nominalValue, Values = param.ExpressionList?.GetExpressionList() ?? new string[0] }; parameters.Add(param.Name, parameter); } return(parameters); } catch (Exception e) { LogError("Error reading params: " + e.Message); return(null); } }
private void ProcessParameter(ParameterControlSpec spec) { if (_allowedParameters.TryGetValue(spec.ParameterName, out var knownParameter)) { var result = new InventorParameter { Label = spec.Name.Trim(), Unit = knownParameter.Unit, ReadOnly = spec.ReadOnly, Value = knownParameter.Value, Values = knownParameter.Values }; _collectedParameters.Add(spec.ParameterName, result); } }
private InventorParameters ExtractParameters(Document doc, dynamic userParameters) { /* The resulting json will be like this: * { * "length" : { * "unit": "in", * "value": "10 in", * "values": ["5 in", "10 in", "15 in"] * }, * "width": { * "unit": "in", * "value": "20 in", * } * } */ try { var parameters = new InventorParameters(); var docUnitsOfMeasure = doc.UnitsOfMeasure; foreach (dynamic param in userParameters) { var nominalValue = param.Expression; string errorMessage = null; try { var unitType = docUnitsOfMeasure.GetTypeFromString(param.Units); LogTrace($"Checking expression validity on extraction for {param.Expression} and unit type {param.Units} / {unitType}"); if (docUnitsOfMeasure.IsExpressionValid(param.Expression, unitType)) { var value = docUnitsOfMeasure.GetValueFromExpression(param.Expression, unitType); nominalValue = docUnitsOfMeasure.GetPreciseStringFromValue(value, unitType); } else { LogTrace($"Expression '{param.Expression}' invalid for unit type '{unitType}' on extract attempt"); errorMessage = "Parameter's expression is not valid for its unit type"; } } // not all unitTypes seem to be convertible (e.g. kTextUnits). In that case, we'll go on with param.Expression assigned before. catch (Exception e) { LogError("Can't get nominalValue for " + param.Name + ": " + e.Message); } var parameter = new InventorParameter { Unit = param.Units, Value = nominalValue, Values = param.ExpressionList?.GetExpressionList() ?? new string[0], ErrorMessage = errorMessage }; parameters.Add(param.Name, parameter); } return(parameters); } catch (Exception e) { LogError("Error reading params: " + e.Message); return(null); } }