public void BuildViewModelTest() { var engine = new NodeEngine(); var vm = engine.BuildViewModel(); engine.GetOrCreateNode("Node1"); engine.GetOrCreateNode("Node2"); engine.Connect("Node1", "Node2"); engine.Connect("Node2", "Node1"); // engineAPIにより ViewModelの数が更新されていることを確認する Assert.Equal(2, vm.Nodes.Count); Assert.Equal(2, vm.Connections.Count); Assert.Equal(4, vm.Nodes.SelectMany(x => x.GetInputPlugs()).Concat(vm.Nodes.SelectMany(y => y.GetOutputPlugs())).Count()); engine.GetOrCreateNode("Node1") .Remove(); // 削除が反映されることを確認 Assert.Equal(1, vm.Nodes.Count); Assert.Equal(0, vm.Connections.Count); Assert.Equal(2, vm.Nodes.SelectMany(x => x.GetInputPlugs()).Concat(vm.Nodes.SelectMany(y => y.GetOutputPlugs())).Count()); engine.GetOrCreateNode("Node2") .Remove(); var network = engine.Network; // モデルも消えていることを確認 Assert.Equal(0, network.Nodes.Count); Assert.Equal(0, network.Connections.Count); Assert.Equal(0, network.Nodes.SelectMany(x => x.InputPlugs).Concat(network.Nodes.SelectMany(y => y.OutputPlugs)).Count()); }
public MainWindow() { InitializeComponent(); var nodeEngine = new NodeEngine(); DataContext = nodeEngine.BuildViewModel(); nodeEngine.Connect("Root", "Child1"); nodeEngine.Connect("Root", "Child2"); nodeEngine.Connect("Root", "Child3"); nodeEngine.Connect("Child2", "Child4"); nodeEngine.Connect("Child2", "Child5"); nodeEngine.Connect("Child3", "Child6"); nodeEngine.Connect("Child4", "Child7"); nodeEngine.Connect("Child7", "Child8"); // 自動配置のテスト nodeEngine.AutoArrange(); // 配置されたノードにフィットさせる NetworkView.FitToSelectionNode(0); // ミニマップテスト CreateMinimap(); }
public void SerializeTest(SerializeFormat format) { var engine = new NodeEngine(); string stream = null; engine.GetOrCreateNode("Node1") .SetColor(Colors.Coral) .SetPos(150, 200); engine.GetOrCreateNode("Node2"); engine.Connect("Node1", "Node2"); stream = engine.Serialize(format); var engine2 = new NodeEngine(); engine2.Deserialize(stream, format); Assert.Equal(engine.Network.Nodes[0].Guid, engine2.Network.Nodes[0].Guid); Assert.Equal(engine.Network.Nodes[0].Y, engine2.Network.Nodes[0].Y); Assert.Equal(engine.Network.Nodes[0].HeaderColor, engine2.Network.Nodes[0].HeaderColor); Assert.Equal(engine.Network.Nodes.Count, engine2.Network.Nodes.Count); Assert.Equal(engine.Network.Connections.Count, engine2.Network.Connections.Count); Assert.Equal(engine.Network.Nodes.SelectMany(x => x.InputPlugs).Count(), engine2.Network.Nodes.SelectMany(x => x.InputPlugs).Count()); Assert.Equal(engine.Network.Nodes.SelectMany(x => x.OutputPlugs).Count(), engine2.Network.Nodes.SelectMany(x => x.OutputPlugs).Count()); }
public void SerializeTest2() { var nodeEngine = new NodeEngine(); nodeEngine.GetOrCreateNode("Root") .SetColor(Colors.Gold) .AddInputPlug("Plug1", 10) .AddInputPlug("Plug2", "string") .AddInputPlug("Plug4", 50f) .AddInputPlug("Plug5", 100d) .AddInputPlug("Plug6", false) .AddOutputPlug("Plug7", 20) .AddOutputPlug("Plug8", "string2") .AddOutputPlug("Plug9", 70f) .AddOutputPlug("Plug10", 120d) .AddOutputPlug("Plug11", true) .AddInputPlug("Plug12", new Vector3(0, 1, 2)); nodeEngine.Connect("Root", "Child1"); // 自動配置のテスト nodeEngine.AutoArrange(); nodeEngine.SerializeToFile("output.json", SerializeFormat.Json); nodeEngine.SerializeToFile("output.xml", SerializeFormat.Xml); File.Delete("output.json"); File.Delete("output.xml"); }
public MainWindow() { InitializeComponent(); var nodeEngine = new NodeEngine(); // 組み込み用のViewModelを生成する。 // ViewModelの実装などをすべて自前で行いたい場合は別のサンプルなどを参照してください。 DataContext = nodeEngine.BuildViewModel(); //新規ノードの追加 var root = nodeEngine.GetOrCreateNode("Root") .SetColor(Colors.IndianRed) // ヘッダカラーを設定する .AddInputPlug("Plug1", 0); // int型の入力プラグを追加する // NodeEngine.Connect()を使ってノードを接続 // (存在しないノードは自動的に生成される。) nodeEngine.Connect("Root", "Child1"); nodeEngine.Connect("Root", "Child2"); nodeEngine.Connect("Root", "Child3"); nodeEngine.Connect("Child2", "Child4"); nodeEngine.Connect("Child2", "Child5"); nodeEngine.Connect("Child3", "Child6"); nodeEngine.Connect("Child3", "Child10"); nodeEngine.Connect("Child4", "Child7"); nodeEngine.Connect("Child7", "Child8"); nodeEngine.Connect("Child7", "Child9"); // 自動整列を行う ※自動配置されている場合は破棄される nodeEngine.AutoArrange(); // ルートノードだけ座標を変える。 root.SetPos(-50, -200); // ノード全体がViewに収める NetworkView.FitToSelectionNode(0); // NodeEngineで作成したネットワークをファイルとして出力する nodeEngine.SerializeToFile("output.json", SerializeFormat.Json); }