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; } }
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); } }
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(); }