/// <summary> /// Initializes a new instance of the <see cref="Subassembly"/> class. /// </summary> /// <param name="subassembly">The subassembly.</param> /// <param name="corridor">The corridor.</param> internal Subassembly(AeccSubassembly subassembly, AeccCorridor corridor) { this._subassembly = subassembly; this._corridor = corridor; foreach (var p in subassembly.ParamsBool) { this._parameters.Add(new SubassemblyParameter((IAeccParam)p)); } foreach (var p in subassembly.ParamsDouble) { this._parameters.Add(new SubassemblyParameter((IAeccParam)p)); } foreach (var p in subassembly.ParamsLong) { this._parameters.Add(new SubassemblyParameter((IAeccParam)p)); } foreach (var p in subassembly.ParamsString) { this._parameters.Add(new SubassemblyParameter((IAeccParam)p)); } }
/// <summary> /// Sets SubassemblyParameter value by name. /// </summary> /// <param name="name">The parameter name.</param> /// <param name="value">The value.</param> /// <param name="rebuild">if set to <c>true</c> [rebuild].</param> /// <returns></returns> /// <exception cref="Exception"> /// The parameter name cannot be null /// or /// The value cannot be null /// or /// or /// </exception> public Subassembly SetParameterByName(string name, object value, bool rebuild = false) { Utils.Log(string.Format("Subassembly.SetParameterByName started...", "")); if (null == name) { throw new Exception("The parameter name cannot be null"); } if (null == value) { throw new Exception("The value cannot be null"); } SubassemblyParameter parameter = null; try { parameter = this.Parameters.First(x => x.Name == name); } catch (Exception ex) { var message = string.Format("No parameter {0} found on this Subassembly", name); Utils.Log(string.Format("ERROR: Subassembly.SetParameterByName {0} {1}", message, ex.Message)); throw new Exception(message); } if (null != parameter) { if (parameter.Type == SubassemblyParameterType.Bool && value is bool) { var p = parameter.InternalElement as AeccParamBool; p.Value = Convert.ToBoolean(value); } else if (parameter.Type == SubassemblyParameterType.Double && (value is double || value is int)) { var p = parameter.InternalElement as AeccParamDouble; p.Value = Convert.ToDouble(value); } else if (parameter.Type == SubassemblyParameterType.Long && (value is long || value is double || value is int)) { var p = parameter.InternalElement as AeccParamLong; p.Value = Convert.ToInt32(value); } else if (parameter.Type == SubassemblyParameterType.String && value is string) { var p = parameter.InternalElement as AeccParamString; p.Value = Convert.ToString(value); } else { var message = string.Format("The value does not match the parameter data type {0}", parameter.Type); Utils.Log(string.Format("ERROR: Subassembly.SetParameterByName {0}", message)); throw new Exception(message); } } if (rebuild) { AeccSubassembly sa = this.InternalElement as AeccSubassembly; this._corridor.Rebuild(); } Utils.Log(string.Format("Subassembly.SetParameterByName completed.", "")); return(this); }