private void LoadData(string path) { string json = File.ReadAllText(path); ReddotData[] reddotDatas = Newtonsoft.Json.JsonConvert.DeserializeObject <ReddotData[]>(json); Dictionary <string, ReddotNode> nodeDic = new Dictionary <string, ReddotNode>(); foreach (var item in reddotDatas) { var node = new ReddotNode(item.key, item.name); nodeDic.Add(item.key, node); graphView.AddElement(node); var rect = node.GetPosition(); rect.x = item.position.x; rect.y = item.position.y; node.SetPosition(rect); } foreach (var item in reddotDatas) { if (item.children != null) { foreach (var child in item.children) { var edge = nodeDic[item.key].AddChild(nodeDic[child]); graphView.Add(edge); } } } }
public ReddotGraphView(EditorWindow editorWindow) { ReddotPort.graphView = this; m_editorWindow = editorWindow; var nodeStyle = AssetDatabase.LoadAssetAtPath <StyleSheet>(@"Assets\XFramework\Extend\Core\Modules\UI\Reddot\Editor\NarrativeGraph.uss"); styleSheets.Add(nodeStyle); SetupZoom(ContentZoomer.DefaultMinScale, ContentZoomer.DefaultMaxScale); var grid = new GridBackground(); Insert(0, grid); grid.StretchToParentSize(); this.AddManipulator(new SelectionDragger()); this.AddManipulator(new ContentDragger()); this.AddManipulator(new RectangleSelector()); this.AddManipulator(new FreehandSelector()); nodeCreationRequest += context => { var node = new ReddotNode(); AddNode(node, context.screenMousePosition); }; }
public void AddNode(ReddotNode node, Vector2 screenMousePosition) { var mousePosition = m_editorWindow.rootVisualElement.ChangeCoordinatesTo(m_editorWindow.rootVisualElement.parent, screenMousePosition - m_editorWindow.position.position); var graphMousePosition = this.contentViewContainer.WorldToLocal(mousePosition); this.AddElement(node); node.transform.position = graphMousePosition; }
public void OnDropOutsidePort(Edge edge, Vector2 position) { var screenPos = GUIUtility.GUIToScreenPoint(UnityEngine.Event.current.mousePosition); // 添加一个新节点并连接 var node = new ReddotNode(); graphView.AddNode(node, screenPos); if (edge.input is null) { edge = (edge.output.node as ReddotNode).AddChild(node); } else { edge = node.AddChild(edge.input.node as ReddotNode); } graphView.Add(edge); }
/// <summary> /// 添加一个子节点 /// </summary> /// <param name="childNode">子节点</param> /// <returns></returns> public Edge AddChild(ReddotNode childNode) { return(outputPort.ConnectTo(childNode.inputPort)); }