protected override void EndLink(LinkPinControl linkObj) { if (linkObj == null) { return; } bool alreadyLink = false; var pinInfo = GetLinkPinInfo("ParticleComposeControlDown"); if (HostNodesContainer.StartLinkObj == linkObj) { base.EndLink(null); if (HostNodesContainer.PreviewLinkCurve != null) { HostNodesContainer.PreviewLinkCurve.Visibility = System.Windows.Visibility.Hidden; } return; } if (pinInfo == null) { return; } if (CodeGenerateSystem.Base.LinkInfo.CanLinkWith(HostNodesContainer.StartLinkObj, linkObj) && ModuleLinkInfo.CanLinkWith2(HostNodesContainer.StartLinkObj, linkObj)) { var container = new NodesContainer.LinkInfoContainer(); //链接之前删除linkObj其他链接 //if (linkObj.LinkOpType == enLinkOpType.End) //{ // if (linkObj.LinkInfos.Count > 0) // { // //linkObj.LinkInfos[0].m_linkFromObjectInfo.RemoveLink(linkObj.LinkInfos[0]); // //linkObj.LinkInfos[0].m_linkToObjectInfo.RemoveLink(linkObj.LinkInfos[0]); // linkObj.LinkInfos[0].Clear(); // linkObj.LinkInfos.Clear(); // } //} //if (mStartLinkObj.LinkOpType == enLinkOpType.Start) //{ container.Start = HostNodesContainer.StartLinkObj; container.End = linkObj; //} //else //{ // container.Start = objInfo; // container.End = mStartLinkObj; //} HostNodesContainer.IsOpenContextMenu = false; var redoAction = new Action <Object>((obj) => { var linkInfo = new ModuleLinkInfo(HostNodesContainer.ContainerDrawCanvas, container.Start, container.End); }); redoAction.Invoke(null); //EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostControl.UndoRedoKey, null, redoAction, null, // (obj) => // { // for (int i = 0; i < container.End.GetLinkInfosCount(); i++) // { // var info = container.End.GetLinkInfo(i); // if (info.m_linkFromObjectInfo == container.Start) // { // info.Clear(); // break; // } // } // }, "Create Link"); IsDirty = true; } }
protected override void EndLink(LinkPinControl linkObj) { if (linkObj == null) { return; } bool alreadyLink = false; var pinInfo = GetLinkPinInfo("ParticleTextureCutControlDown"); if (HostNodesContainer.StartLinkObj == linkObj) { base.EndLink(null); if (HostNodesContainer.PreviewLinkCurve != null) { HostNodesContainer.PreviewLinkCurve.Visibility = System.Windows.Visibility.Hidden; } return; } if (pinInfo == null) { return; } if (CodeGenerateSystem.Base.LinkInfo.CanLinkWith(HostNodesContainer.StartLinkObj, linkObj) && ModuleLinkInfo.CanLinkWith2(HostNodesContainer.StartLinkObj, linkObj)) { var container = new NodesContainer.LinkInfoContainer(); //链接之前删除linkObj其他链接 if (linkObj.LinkOpType == enLinkOpType.End) { if (linkObj.LinkInfos.Count > 0) { //linkObj.LinkInfos[0].m_linkFromObjectInfo.RemoveLink(linkObj.LinkInfos[0]); //linkObj.LinkInfos[0].m_linkToObjectInfo.RemoveLink(linkObj.LinkInfos[0]); linkObj.LinkInfos[0].Clear(); linkObj.LinkInfos.Clear(); } } //if (mStartLinkObj.LinkOpType == enLinkOpType.Start) //{ container.Start = HostNodesContainer.StartLinkObj; container.End = linkObj; //} //else //{ // container.Start = objInfo; // container.End = mStartLinkObj; //} HostNodesContainer.IsOpenContextMenu = false; var redoAction = new Action <Object>((obj) => { var linkInfo = new ModuleLinkInfo(HostNodesContainer.ContainerDrawCanvas, container.Start, container.End); }); redoAction.Invoke(null); //EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostControl.UndoRedoKey, null, redoAction, null, // (obj) => // { // for (int i = 0; i < container.End.GetLinkInfosCount(); i++) // { // var info = container.End.GetLinkInfo(i); // if (info.m_linkFromObjectInfo == container.Start) // { // info.Clear(); // break; // } // } // }, "Create Link"); IsDirty = true; } var count = pinInfo.GetLinkInfosCount(); for (int index = 0; index < count; ++index) { //AnimStateLinkInfoForUndoRedo undoRedoLinkInfo = new AnimStateLinkInfoForUndoRedo(); //var linkInfo = pinInfo.GetLinkInfo(index); //if (linkInfo.m_linkFromObjectInfo == HostNodesContainer.StartLinkObj && linkInfo.m_linkToObjectInfo == linkObj) //{ // alreadyLink = true; // undoRedoLinkInfo.linkInfo = linkInfo as AnimStateLinkInfo; // NodesContainer.TransitionStaeBaseNodeForUndoRedo transCtrl = new NodesContainer.TransitionStaeBaseNodeForUndoRedo(); // var redoAction = new Action<Object>((obj) => // { // transCtrl.TransitionStateNode = undoRedoLinkInfo.linkInfo.AddTransition(); // }); // redoAction.Invoke(null); // EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostNodesContainer.HostControl.UndoRedoKey, null, redoAction, null, // (obj) => // { // undoRedoLinkInfo.linkInfo.RemoveTransition(transCtrl.TransitionStateNode); // }, "Create StateTransition"); //} //if (HostNodesContainer.PreviewLinkCurve != null) // HostNodesContainer.PreviewLinkCurve.Visibility = System.Windows.Visibility.Hidden; //base.EndLink(null,false); } //if (!alreadyLink) // base.EndLink(linkObj); }
public void EndPreviewLine(LinkPinControl objInfo, NodesContainer nodesContainer) { if (nodesContainer.ContainerDrawCanvas == null) { return; } if (objInfo == null) { if (nodesContainer.StartLinkObj != null && nodesContainer.PreviewLinkCurve.Visibility == System.Windows.Visibility.Visible) { nodesContainer.IsOpenContextMenu = true; } } else if (nodesContainer.StartLinkObj != null && objInfo != null) { nodesContainer.PreviewLinkCurve.Visibility = System.Windows.Visibility.Hidden; nodesContainer.enPreviewBezierType = CodeGenerateSystem.Base.enBezierType.None; if (nodesContainer.StartLinkObj.LinkOpType == objInfo.LinkOpType && objInfo.LinkOpType != enLinkOpType.Both) // 只有start和end能连 或者其中之一 和 Both { return; } if (CodeGenerateSystem.Base.LinkInfo.CanLinkWith(nodesContainer.StartLinkObj, objInfo)) { objInfo.MouseAssistVisible = System.Windows.Visibility.Hidden; var container = new NodesContainer.LinkInfoContainer(); if (nodesContainer.StartLinkObj.LinkOpType == enLinkOpType.Start) { container.Start = nodesContainer.StartLinkObj; container.End = objInfo; } else if (objInfo.LinkOpType == enLinkOpType.Start) { container.Start = objInfo; container.End = nodesContainer.StartLinkObj; } else { container.Start = nodesContainer.StartLinkObj; container.End = objInfo; } if (nodesContainer.StartLinkObj.LinkCurveType == enLinkCurveType.Line) { NodesContainer.TransitionStaeBaseNodeForUndoRedo transCtrl = new NodesContainer.TransitionStaeBaseNodeForUndoRedo(); var redoAction = new Action <object>((obj) => { var linkInfo = new AnimStateLinkInfo(nodesContainer.ContainerDrawCanvas, container.Start, container.End); transCtrl.TransitionStateNode = linkInfo.AddTransition(); }); redoAction.Invoke(null); EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(nodesContainer.HostControl.UndoRedoKey, null, redoAction, null, (obj) => { for (int i = 0; i < container.End.GetLinkInfosCount(); i++) { var info = container.End.GetLinkInfo(i); if (info.m_linkFromObjectInfo == container.Start) { var transitionInfo = info as AnimStateLinkInfo; transitionInfo.RemoveTransition(transCtrl.TransitionStateNode); break; } } }, "Create Link"); } else { var redoAction = new Action <Object>((obj) => { var linkInfo = new CodeGenerateSystem.Base.LinkInfo(nodesContainer.ContainerDrawCanvas, container.Start, container.End); }); redoAction.Invoke(null); EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(nodesContainer.HostControl.UndoRedoKey, null, redoAction, null, (obj) => { for (int i = 0; i < container.End.GetLinkInfosCount(); i++) { var info = container.End.GetLinkInfo(i); if (info.m_linkFromObjectInfo == container.Start) { info.Clear(); break; } } }, "Create Link"); } IsDirty = true; } else { nodesContainer.OnLinkFailure(nodesContainer.StartLinkObj, objInfo); } } }