// 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 }
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); } }
/// <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 )); }
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)); }