protected bool ExtractOutputs(IAction action, IGH_DataAccess DA, ExecutionInfo exInfo) { IList <PropertyInfo> outputs = ActionBase.ExtractOutputParameters(ActionType); foreach (PropertyInfo pInfo in outputs) { object outputData = pInfo.GetValue(action, null); if (PreviewLayer != null) { if (outputData is ICollection) //TODO: This would currently catch mesh faces and other similar objects... { PreviewLayer.TryRegisterAll((ICollection)outputData); } else { PreviewLayer.TryRegister(outputData); } } outputData = FormatForOutput(outputData, exInfo); if (outputData is IList) { DA.SetDataList(pInfo.Name, (IEnumerable)outputData); } else { DA.SetData(pInfo.Name, outputData); } } return(true); }
/// <summary> /// Registers all the output parameters for this component. /// </summary> protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) { NicknameConverter nC = new NicknameConverter(); IList <PropertyInfo> outputs = ActionBase.ExtractOutputParameters(ActionType); foreach (PropertyInfo pInfo in outputs) { Type pType = pInfo.PropertyType; ActionOutputAttribute outputAtt = ActionOutputAttribute.ExtractFrom(pInfo); if (outputAtt != null) { string name = pInfo.Name; string nickname = string.IsNullOrEmpty(outputAtt.ShortName) ? nC.Convert(pInfo.Name) : outputAtt.ShortName; string description = outputAtt.CapitalisedDescription; if (pType == typeof(double) || pType == typeof(Angle)) { pManager.AddNumberParameter(name, nickname, description, GH_ParamAccess.item); } else if (pType == typeof(int)) { pManager.AddIntegerParameter(name, nickname, description, GH_ParamAccess.item); } else if (pType == typeof(string)) { pManager.AddTextParameter(name, nickname, description, GH_ParamAccess.item); } else if (pType == typeof(bool)) { pManager.AddBooleanParameter(name, nickname, description, GH_ParamAccess.item); } else if (pType == typeof(Vector)) { pManager.AddPointParameter(name, nickname, description, GH_ParamAccess.item); } else if (pType.IsAssignableFrom(typeof(Plane))) { pManager.AddPlaneParameter(name, nickname, description, GH_ParamAccess.item); } else if (typeof(Curve).IsAssignableFrom(pType)) { pManager.AddCurveParameter(name, nickname, description, GH_ParamAccess.item); } else if (typeof(CurveCollection).IsAssignableFrom(pType)) { pManager.AddCurveParameter(name, nickname, description, GH_ParamAccess.list); } else if (pType == typeof(LinearElement)) { IGH_Param param = new LinearElementParam(); pManager.AddParameter(param, name, nickname, description, GH_ParamAccess.item); } else if (pType == typeof(LinearElementCollection)) { IGH_Param param = new LinearElementParam(); pManager.AddParameter(param, name, nickname, description, GH_ParamAccess.list); } else if (pType == typeof(Element)) { IGH_Param param = new ElementParam(); pManager.AddParameter(param, name, nickname, description, GH_ParamAccess.item); } else if (pType == typeof(ElementCollection)) { IGH_Param param = new ElementParam(); pManager.AddParameter(param, name, nickname, description, GH_ParamAccess.list); } else if (pType == typeof(Node)) { IGH_Param param = new NodeParam(); pManager.AddParameter(param, name, nickname, description, GH_ParamAccess.item); } else if (pType == typeof(NodeCollection)) { IGH_Param param = new NodeParam(); pManager.AddParameter(param, name, nickname, description, GH_ParamAccess.list); } else if (typeof(Nucleus.Model.Material).IsAssignableFrom(pType)) { IGH_Param param = new MaterialParam(); pManager.AddParameter(param, name, nickname, description, GH_ParamAccess.item); } else if (typeof(MaterialCollection).IsAssignableFrom(pType)) { IGH_Param param = new MaterialParam(); pManager.AddParameter(param, name, nickname, description, GH_ParamAccess.list); } else if (typeof(SectionFamily).IsAssignableFrom(pType)) { IGH_Param param = new SectionFamilyParam(); pManager.AddParameter(param, name, nickname, description, GH_ParamAccess.item); } else if (pType == typeof(Bool6D)) { IGH_Param param = new Bool6DParam(); pManager.AddParameter(param, name, nickname, description, GH_ParamAccess.item); } else if (pType == typeof(VertexGeometry)) { pManager.AddGeometryParameter(name, nickname, description, GH_ParamAccess.item); } else if (pType == typeof(VertexGeometryCollection)) { pManager.AddGeometryParameter(name, nickname, description, GH_ParamAccess.list); } else { pManager.AddGenericParameter(pInfo.Name, nC.Convert(pInfo.Name), outputAtt.CapitalisedDescription, GH_ParamAccess.item); } //TODO } } }