Пример #1
0
        // RightTail
        private void ConstructRightTail()
        {
            this.RightTailComboBox.TypeChanged += (s, type) =>
            {
                GeometryArrowTailType tailType = (GeometryArrowTailType)type;
                this.SelectionViewModel.GeometryArrow_RightTail = tailType;

                this.MethodViewModel.TLayerChanged <GeometryArrowTailType, GeometryArrowLayer>
                (
                    layerType: LayerType.GeometryArrow,
                    set: (tLayer) => tLayer.RightTail = tailType,

                    type: HistoryType.LayersProperty_Set_GeometryArrowLayer_RightTail,
                    getUndo: (tLayer) => tLayer.RightTail,
                    setUndo: (tLayer, previous) => tLayer.RightTail = previous
                );
            };
            this.RightTailComboBox.Closed += (s, e) => this.SettingViewModel.RegisteKey();   // Setting
            this.RightTailComboBox.Opened += (s, e) => this.SettingViewModel.UnregisteKey(); // Setting
        }
Пример #2
0
        public override void Load(XElement element)
        {
            if (element.Element("IsAbsolute") is XElement isAbsolute)
            {
                this.IsAbsolute = (bool)isAbsolute;
            }
            if (element.Element("Width") is XElement width)
            {
                this.Width = (float)width;
            }
            if (element.Element("Value") is XElement value)
            {
                this.Value = (float)value;
            }

            if (element.Element("LeftTail") is XElement leftTail)
            {
                this.LeftTail = FanKit.Transformers.XML.CreateGeometryArrowTailType(leftTail.Value);
            }
            if (element.Element("RightTail") is XElement rightTail)
            {
                this.RightTail = FanKit.Transformers.XML.CreateGeometryArrowTailType(rightTail.Value);
            }
        }
Пример #3
0
        /// <summary>
        /// Create a new arrow geometry.
        /// </summary>
        /// <param name="resourceCreator"> The resource - creator. </param>
        /// <param name="transformer"> The source transformer. </param>
        /// <param name="matrix"> The matrix. </param>
        /// <param name="isAbsolute"> Is absolute? </param>
        /// <param name="width"> The absolute width. </param>
        /// <param name="value"> The relative value. </param>
        /// <param name="leftTail"> The left - tail. </param>
        /// <param name="rightTail"> The right - tail. </param>
        /// <returns> The product geometry. </returns>
        public static CanvasGeometry CreateArrow(ICanvasResourceCreator resourceCreator, ITransformerLTRB transformer, Matrix3x2 matrix, bool isAbsolute = false, float width = 10, float value = 0.5f, GeometryArrowTailType leftTail = GeometryArrowTailType.None, GeometryArrowTailType rightTail = GeometryArrowTailType.Arrow)
        {
            Vector2 center      = Vector2.Transform(transformer.Center, matrix);
            Vector2 centerLeft  = Vector2.Transform(transformer.CenterLeft, matrix);
            Vector2 centerRight = Vector2.Transform(transformer.CenterRight, matrix);

            // horizontal
            Vector2 horizontal       = transformer.Horizontal;
            float   horizontalLength = horizontal.Length();
            // vertical
            Vector2 vertical       = transformer.Vertical;
            float   verticalLength = vertical.Length();

            Vector2 widthVector = TransformerGeometry.GetArrowWidthVector(isAbsolute, width, value, vertical, verticalLength);

            Vector2 focusVector         = TransformerGeometry.GetArrowFocusVector(verticalLength, horizontalLength, horizontal);
            Vector2 leftFocusTransform  = Vector2.Transform(transformer.CenterLeft + focusVector, matrix);
            Vector2 rightFocusTransform = Vector2.Transform(transformer.CenterRight - focusVector, matrix);

            return(TransformerGeometry.CreateArrowCore
                   (
                       resourceCreator,
                       Vector2.Transform(widthVector + transformer.Center, matrix) - center,

                       // Left
                       centerLeft,
                       Vector2.Transform(transformer.LeftBottom, matrix),

                       Vector2.Transform(transformer.LeftTop, matrix),
                       (leftFocusTransform - centerLeft),
                       leftFocusTransform,

                       // Right
                       centerRight,
                       Vector2.Transform(transformer.RightBottom, matrix),

                       Vector2.Transform(transformer.RightTop, matrix),
                       (rightFocusTransform - centerRight),
                       rightFocusTransform,

                       leftTail, rightTail
                   ));
        }
Пример #4
0
        private static CanvasGeometry CreateArrowCore(ICanvasResourceCreator resourceCreator,
                                                      Vector2 widthVectorTransform,

                                                      // Left
                                                      Vector2 centerLeft,
                                                      Vector2 leftBottom,

                                                      Vector2 leftTop,
                                                      Vector2 leftVector,
                                                      Vector2 leftFocusTransform,

                                                      // Right
                                                      Vector2 centerRight,
                                                      Vector2 rightBottom,

                                                      Vector2 rightTop,
                                                      Vector2 rightVector,
                                                      Vector2 rightFocusTransform,

                                                      GeometryArrowTailType leftTail, GeometryArrowTailType rightTail)
        {
            Vector2[] points;

            if (leftTail == GeometryArrowTailType.Arrow && rightTail == GeometryArrowTailType.Arrow)
            {
                points = new Vector2[10]
                {
                    centerLeft,                                 // L

                    leftTop + leftVector,                       // LT
                    leftFocusTransform - widthVectorTransform,  // C LT

                    rightFocusTransform - widthVectorTransform, // C RT
                    rightTop + rightVector,                     // RT

                    centerRight,                                // R

                    rightBottom + rightVector,                  // RB
                    rightFocusTransform + widthVectorTransform, // C RB

                    leftFocusTransform + widthVectorTransform,  // C LB
                    leftBottom + leftVector,                    // LB
                };
            }
            else if (leftTail == GeometryArrowTailType.Arrow && rightTail == GeometryArrowTailType.None)
            {
                points = new Vector2[7]
                {
                    centerLeft,                                // L

                    leftTop + leftVector,                      // LT
                    leftFocusTransform - widthVectorTransform, // C LT

                    centerRight - widthVectorTransform,        // RT
                    centerRight + widthVectorTransform,        // RB

                    leftFocusTransform + widthVectorTransform, // C LB
                    leftBottom + leftVector,                   // LB
                };
            }
            else if (leftTail == GeometryArrowTailType.None && rightTail == GeometryArrowTailType.Arrow)
            {
                points = new Vector2[7]
                {
                    centerRight,                                // R

                    rightTop + rightVector,                     // RT
                    rightFocusTransform - widthVectorTransform, // C RT

                    centerLeft - widthVectorTransform,          // LT
                    centerLeft + widthVectorTransform,          // LB

                    rightFocusTransform + widthVectorTransform, // C RB
                    rightBottom + rightVector,                  // RB
                };
            }
            else
            {
                points = new Vector2[4]
                {
                    centerLeft + widthVectorTransform,  // LB
                    centerLeft - widthVectorTransform,  // LT
                    centerRight - widthVectorTransform, // RT
                    centerRight + widthVectorTransform, // RB
                };
            }

            return(CanvasGeometry.CreatePolygon(resourceCreator, points));
        }