Ejemplo n.º 1
0
        private void AdjustPackageInput()
        {
            if (m_document != null)
            {
                GH_ClusterInputHook[] inputs = m_document.ClusterInputHooks();
                for (int i = 0; i < inputs.Length; i++)
                {
                    Params.RegisterInputParam(CreateParameter(GH_ParameterSide.Input, i));

                    GH_ClusterInputHook inputHook = inputs[i];
                    // 找到所有在输入端下游的Component
                    var allDnComponents = m_document.FindAllDownstreamObjects(inputs[0]);
                    if (allDnComponents.Count > 0)
                    {
                        // 取第一个
                        var inputAdjustment = allDnComponents[0] as GH_Component;

                        if (inputAdjustment != null && Equals(inputAdjustment.ComponentGuid, Identities.SetDefault))
                        {
                            var plug = inputAdjustment.Params.Input[0] as Param_ScriptVariable;

                            var input = Params.Input[i] as Param_ScriptVariable;
                            input.Access   = plug.Access;
                            input.TypeHint = plug.TypeHint;
                            input.NickName = inputHook.CustomNickName;
                            FixGhInput(input);

                            ParamHookMap.Remove(input.InstanceGuid);
                            ParamHookMap.Add(input.InstanceGuid, inputHook.InstanceGuid);
                        }
                    }
                }

                inputAdjusted = true;
            }
        }
Ejemplo n.º 2
0
        public static void AssignDataToDoc(string dataSetJson)
        {
            JObject   dataSet      = JsonConvert.DeserializeObject <JObject>(dataSetJson);
            GH_Canvas activeCanvas = Instances.ActiveCanvas;

            if (activeCanvas == null)
            {
                throw new Exception("读取文档失败");
            }

            GH_Document doc = activeCanvas.Document;

            if (doc == null)
            {
                return;
            }

            var hooks = doc.ClusterInputHooks();

            foreach (var hook in hooks)
            {
                GH_Structure <IGH_Goo> m_data;

                string key = hook.NickName;

                if (string.IsNullOrEmpty(key))
                {
                    key = hook.Name;
                }
                if (string.IsNullOrEmpty(key))
                {
                    key = hook.CustomName;
                }
                if (string.IsNullOrEmpty(key))
                {
                    key = hook.CustomNickName;
                }

                if (!key.StartsWith("@", StringComparison.Ordinal))
                {
                    continue;
                }

                key = key.Substring(1);

                if (!dataSet.TryGetValue(key, out var data))
                {
                    continue;
                }

                m_data = SingleDataStructrue(data);

                hook.ClearPlaceholderData();
                hook.SetPlaceholderData(m_data);
                //hook.ExpireSolution(true);
            }

            // for data placeholder inside cluster (deep = 1)

            var clusters = new List <GH_Cluster>();

            foreach (var obj in doc.Objects)
            {
                if (!(obj is GH_Cluster cluster))
                {
                    continue;
                }
                clusters.Add(cluster);
            }

            if (clusters.Count == 0)
            {
                return;
            }


            foreach (var cluster in clusters)
            {
                foreach (var obj in cluster.Document("").Objects)
                {
                    if (!(obj is IGH_Param param))
                    {
                        continue;
                    }

                    string nickname = param.NickName;

                    if (string.IsNullOrEmpty(nickname))
                    {
                        nickname = param.Name;
                    }
                    if (!nickname.StartsWith("@", StringComparison.Ordinal))
                    {
                        continue;
                    }
                    nickname = nickname.Substring(1);
                    if (!dataSet.TryGetValue(nickname, out var data))
                    {
                        continue;
                    }


                    Utility.InvokeMethod(param, "Script_ClearPersistentData");
                    Utility.InvokeMethod(param, "Script_AddPersistentData", new List <object>()
                    {
                        data
                    });

                    //param.ExpireSolution(true);
                    //cluster.ExpireSolution(true);
                }
            }

            doc.NewSolution(true);

            activeCanvas.Document.IsModified = false;
            activeCanvas.Refresh();

            GH_Structure <IGH_Goo> SingleDataStructrue(object value)
            {
                GH_Structure <IGH_Goo> m_data = new GH_Structure <IGH_Goo>();

                GH_Number castNumber = null;
                GH_String castString = null;
                GH_Curve  castCurve  = null;

                if (GH_Convert.ToGHCurve(value, GH_Conversion.Both, ref castCurve))
                {
                    m_data.Append(new GH_ObjectWrapper(castCurve));
                }
                else if (GH_Convert.ToGHNumber(value, GH_Conversion.Both, ref castNumber))
                {
                    m_data.Append(new GH_ObjectWrapper(castNumber));
                }
                else if (GH_Convert.ToGHString(value, GH_Conversion.Both, ref castString))
                {
                    m_data.Append(new GH_ObjectWrapper(castString));
                }
                else
                {
                    m_data.Append((IGH_Goo)value);
                }

                return(m_data);
            }
        }
Ejemplo n.º 3
0
        private void UpdateData(bool recomputeOnTheEnd, bool restore = false)
        {
            if (dataList.Count == 0 || dataList == null)
            {
                return;
            }

            GH_DocumentServer doc_server = Instances.DocumentServer;

            if (doc_server == null)
            {
                ErrorEvent(this, "No Document Server exist!");
                return;
            }

            GH_Document doc = doc_server.ToList().Find(x => x.Properties.ProjectFileName == ID.ToString());

            if (doc == null)
            {
                return;
            }

            var hooks = doc.ClusterInputHooks();

            if (!restore)
            {
                var rndData = dataList.FindAll(data => data.type == "4" || data.type == "5");

                history.Add(new TaskRecord
                {
                    name      = name,
                    TaskID    = ID,
                    HistoryID = Guid.NewGuid(),
                    date      = DateTime.Now,
                    table     = dataTable,
                    taskDatas = JsonConvert.SerializeObject(rndData)
                });
            }

            foreach (var hook in hooks)
            {
                TaskData data = dataList.Find(x => x.name == hook.CustomNickName || x.dataID == hook.CustomNickName);

                if (data == null)
                {
                    continue;
                }

                GH_Structure <IGH_Goo> m_data;

                if (data.type == "5")
                {
                    m_data = IO.DeserializeGrasshopperData(Convert.FromBase64String((string)data.value));
                }
                else
                {
                    m_data = SingleDataStructrue(data.value);
                }

                hook.ClearPlaceholderData();

                // if (Equals(hook.VolatileData, m_data)) continue;
                if (!m_data.IsEmpty)
                {
                    hook.SetPlaceholderData(m_data);
                }

                if (!recomputeOnTheEnd)
                {
                    hook.ExpireSolution(true);
                }
            }

            // for data placeholder inside cluster (deep = 1)

            var clusters = new List <GH_Cluster>();

            foreach (var obj in doc.Objects)
            {
                if (!(obj is GH_Cluster cluster))
                {
                    continue;
                }
                clusters.Add(cluster);
            }

            if (clusters.Count == 0)
            {
                return;
            }


            foreach (var cluster in clusters)
            {
                foreach (var obj in cluster.Document("").Objects)
                {
                    if (!(obj is IGH_Param param))
                    {
                        continue;
                    }

                    string nickname = param.NickName;

                    if (!nickname.StartsWith("@", StringComparison.Ordinal))
                    {
                        continue;
                    }

                    TaskData data = dataList.Find(x => x.name == nickname || x.dataID == nickname);

                    if (data == null)
                    {
                        continue;
                    }

                    Utility.InvokeMethod(param, "Script_ClearPersistentData");
                    Utility.InvokeMethod(param, "Script_AddPersistentData", new List <object>()
                    {
                        data.value
                    });

                    if (!recomputeOnTheEnd)
                    {
                        param.ExpireSolution(true);
                    }
                    if (!recomputeOnTheEnd)
                    {
                        cluster.ExpireSolution(true);
                    }
                }
            }

            if (recomputeOnTheEnd)
            {
                doc.NewSolution(true);
            }

            GH_Canvas activeCanvas = Instances.ActiveCanvas;

            if (activeCanvas == null)
            {
                ErrorEvent(this, "No Active Canvas exist!");
                return;
            }

            activeCanvas.Document.IsModified = false;
            activeCanvas.Refresh();

            dataList.Clear();
        }