示例#1
0
        public static Dictionary <Guid, Type> DataTypePerParam(this ClusterContent content)
        {
            Dictionary <Guid, Type> types = new Dictionary <Guid, Type>();

            if (content == null)
            {
                return(types);
            }

            content.InternalNodes = content.InternalNodes.Select(x => x.IPopulateTypes()).ToList();

            foreach (DataParam input in content.Inputs)
            {
                types[input.BHoM_Guid] = input.DataType;
            }

            foreach (ReceiverParam output in content.Outputs)
            {
                types[output.BHoM_Guid] = output.DataType;
            }

            foreach (INode child in content.InternalNodes)
            {
                Dictionary <Guid, Type> childTypes = child.IDataTypePerParam();
                foreach (KeyValuePair <Guid, Type> kvp in childTypes)
                {
                    types[kvp.Key] = kvp.Value;
                }
            }

            return(types);
        }
示例#2
0
        public static ClusterContent PopulateTypes(this ClusterContent content)
        {
            if (content == null)
            {
                return(content);
            }

            content.InternalNodes = content.InternalNodes.Select(x => x.IPopulateTypes()).ToList();

            // Collect the types
            Dictionary <Guid, Type> nodeTypes = content.DataTypePerParam();

            // Assign the types to the inputs
            foreach (DataParam input in content.Inputs)
            {
                if (input.TargetIds.Count > 0 && nodeTypes.ContainsKey(input.TargetIds[0]))
                {
                    input.DataType = nodeTypes[input.TargetIds[0]];
                }
            }

            // Assign the types to the outputs
            foreach (ReceiverParam output in content.Outputs)
            {
                if (nodeTypes.ContainsKey(output.SourceId))
                {
                    output.DataType = nodeTypes[output.SourceId];
                }
            }

            return(content);
        }
示例#3
0
        /*******************************************/

        protected override void SolveInstance(IGH_DataAccess DA)
        {
            BH.Engine.Base.Compute.ClearCurrentEvents();

            try
            {
                // Get the input component
                IGH_Param source = Params.Input[0].Sources.FirstOrDefault();
                if (source == null)
                {
                    return;
                }
                IGH_DocumentObject        component = source.Attributes.GetTopLevel.DocObject;
                GH_Cluster                cluster   = source.Attributes.GetTopLevel.DocObject as GH_Cluster;
                List <IGH_DocumentObject> content   = cluster.Document("").Objects.ToList();

                List <GH_ClusterInputHook>  inputs     = content.OfType <GH_ClusterInputHook>().ToList();
                List <GH_ClusterOutputHook> outputs    = content.OfType <GH_ClusterOutputHook>().ToList();
                List <GH_Component>         components = content.OfType <GH_Component>().ToList();
                List <GH_Group>             groups     = content.OfType <GH_Group>().ToList();
                List <IGH_Param>            parameters = content.OfType <IGH_Param>().ToList();

                groups = groups.Except(groups.SelectMany(x => x.Objects().OfType <GH_Group>())).ToList();

                ClusterContent nodeContent = new ClusterContent
                {
                    Name   = cluster.NickName,
                    Inputs = inputs.Select(x => new DataParam {
                        Name        = x.NickName,
                        Description = x.Description,
                        TargetIds   = x.Recipients.Select(r => r.InstanceGuid).ToList(),
                        BHoM_Guid   = x.InstanceGuid
                    }).ToList(),
                    Outputs = outputs.Select(x => new ReceiverParam {
                        Name        = x.NickName,
                        Description = x.Description,
                        SourceId    = x.Sources.First().InstanceGuid,
                        BHoM_Guid   = x.InstanceGuid
                    }).ToList(),
                    InternalNodes = components.Select(x => ToNode(x)).Concat(parameters.Select(x => ToNode(x))).Where(x => x != null).ToList(),
                    NodeGroups    = ClearUnsafeGroups(groups.Select(x => x.ToNodeGroup()).ToList()),
                    BHoM_Guid     = cluster.InstanceGuid
                };

                nodeContent = nodeContent.PopulateTypes();

                DA.SetData(0, nodeContent);

                Helpers.ShowEvents(this, BH.Engine.Base.Query.CurrentEvents());
            }
            catch (Exception e)
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message);
            }
        }