Пример #1
0
        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);
 }