public NodeFixedConnectionViewModel(NodeViewModel Node, NodeConnectModel nodeConnectModel) { Parent = Node; InnerModel = nodeConnectModel; LineFromX = new ReactiveProperty <double>(0); LineFromY = new ReactiveProperty <double>(0); LineToX = new ReactiveProperty <double>(0); LineToY = new ReactiveProperty <double>(0); Visible = new ReactiveProperty <Visibility>(Visibility.Hidden); Node.PositionX.Subscribe(x => UpdateLineFromX()); Node.PositionY.Subscribe(x => LineFromY.Value = Node.Height.Value + x - 5); Node.Width.Subscribe(x => UpdateLineFromX()); Node.Out[InnerModel.ConnectIndex].ConnectNode.Subscribe(x => { if (x == null) { Visible.Value = Visibility.Hidden; } else { Visible.Value = Visibility.Visible; var connectNode = x.Parent; double oneAreaWidth = connectNode.Width.Value / connectNode.In.Count; connectNode.PositionX.Subscribe(pos => LineToX.Value = oneAreaWidth * x !.InnerModel.ConnectIndex + oneAreaWidth / 2 + pos).AddTo(disposables); connectNode.PositionY.Subscribe(pos => LineToY.Value = 5 + pos).AddTo(disposables); nodeConnectModel.ConnectNode = x.Parent.InnerModel; x.Parent.InnerModel.PrevNodes[x.InnerModel.ConnectIndex].ConnectNode = Node.InnerModel; x.Parent.InnerModel.Do(null); } }); BeziePathData = new ReactiveProperty <string>(); Observable.Merge(LineFromX, LineFromY, LineToX, LineToY).Subscribe(x => { BeziePathData.Value = $"M {LineFromX.Value},{LineFromY.Value} C {LineFromX.Value},{LineToY.Value} {LineToX.Value},{LineFromY.Value} {LineToX.Value},{LineToY.Value}"; }).AddTo(disposables); nodeConnectModel.ToReactivePropertyAsSynchronized(x => x.ConnectNode) .AddTo(disposables) .Subscribe(x => { if (x == null) { Visible.Value = Visibility.Hidden; } }); }
public NodeConnectionViewModel(NodeViewModel Node, NodeConnectModel nodeConnectModel) { Parent = Node; InnerModel = nodeConnectModel; LineFromX = new ReactiveProperty <double>(0); LineFromY = new ReactiveProperty <double>(0); LineToX = new ReactiveProperty <double>(0); LineToY = new ReactiveProperty <double>(0); Visible = new ReactiveProperty <Visibility>(Visibility.Hidden); ColumnIndex = new ReactiveProperty <int>(nodeConnectModel.ConnectIndex); BeziePathData = new ReactiveProperty <string>(); Observable.Merge(LineFromX, LineFromY, LineToX, LineToY).Subscribe(x => { BeziePathData.Value = $"M {LineFromX.Value},{LineFromY.Value} C {LineFromX.Value},{LineToY.Value} {LineToX.Value},{LineFromY.Value} {LineToX.Value},{LineToY.Value}"; }).AddTo(container); Node.Width.Subscribe(x => UpdateLineFromX()); ConnectNode.Subscribe(x => InnerModel.ConnectNode = x?.Parent.InnerModel); }
public NodeOutConnectionViewModel(NodeViewModel Node, NodeConnectModel nodeConnectModel) : base(Node, nodeConnectModel) { Node.PositionX.Subscribe(x => UpdateLineFromX()); Node.PositionY.Subscribe(x => LineFromY.Value = Parent.Height.Value + x - 5); }
public NodeInConnectionViewModel(NodeViewModel Node, NodeConnectModel nodeConnectModel) : base(Node, nodeConnectModel) { Node.PositionX.Subscribe(x => UpdateLineFromX()); Node.PositionY.Subscribe(x => LineFromY.Value = 0 + x + 5); }