protected virtual void UpdateActualGeometry() { if (this.Geometry != null) { this.ActualGeometry = this.Geometry; } else { this.ActualGeometry = VisualUtilities.GetMarkerGeometry(this.MarkerType, new Size(100.0, 100.0)); } }
private Geometry[] BuildGeometries() { Geometry[] geometryArray = new Geometry[3]; if (this.Fill != null) { geometryArray[0] = (Geometry)this.BuildFillGeometry(this.Stroke != null); } if (this.Stroke != null) { geometryArray[1] = (Geometry)this.BuildStrokeGeometry(); } if (this.Marker != MarkerType.None) { geometryArray[2] = VisualUtilities.GetMarkerGeometry(this.Marker, new Point(this.MarkerSize / 2.0 - this.ActualSymbolWidth / 2.0, this.MarkerSize / 2.0 - this.ActualSymbolHeight / 2.0), new Size(this.MarkerSize, this.MarkerSize), 0.0, 0.0); } return(geometryArray); }
public static Geometry GetMarkerGeometry(MarkerType markerType, Size markerSize) { return(VisualUtilities.GetMarkerGeometry(markerType, new Point(0.0, 0.0), markerSize, 0.0, 0.0)); }
public static Geometry GetMarkerGeometry(MarkerType markerType, Point markerOrigin, Size markerSize, double startAngle = 0.0, double sweepAngle = 0.0) { switch (markerType) { case MarkerType.Circle: return((Geometry) new EllipseGeometry() { Center = new Point(markerSize.Width / 2.0 - markerOrigin.X, markerSize.Height / 2.0 - markerOrigin.Y), RadiusX = (markerSize.Width / 2.0), RadiusY = (markerSize.Height / 2.0) }); case MarkerType.Star4: case MarkerType.Star5: case MarkerType.Star10: PointCollection points1 = new PointCollection(); RotateTransform rotateTransform1 = new RotateTransform(); rotateTransform1.CenterX = markerSize.Width / 2.0; rotateTransform1.CenterY = markerSize.Height / 2.0; int num1 = 4; if (markerType == MarkerType.Star5) { num1 = 5; } else if (markerType == MarkerType.Star10) { num1 = 10; } for (int index = 0; index < num1 * 2; ++index) { Point point = new Point(markerSize.Width / 2.0, index % 2 == 0 ? 0.0 : markerSize.Height / 3.0); rotateTransform1.Angle = (double)index * 360.0 / ((double)num1 * 2.0); point = rotateTransform1.Transform(point); point.X -= markerOrigin.X; point.Y -= markerOrigin.Y; points1.Add(point); } return(VisualUtilities.CreatePolyLineGeometry(points1)); case MarkerType.Triangle: return(VisualUtilities.CreatePolyLineGeometry(new PointCollection() { new Point(markerSize.Width / 2.0 - markerOrigin.X, 0.0 - markerOrigin.Y), new Point(markerSize.Width - markerOrigin.X, markerSize.Height - markerOrigin.Y), new Point(0.0 - markerOrigin.X, markerSize.Height - markerOrigin.Y) })); case MarkerType.Square: case MarkerType.Rectangle: return((Geometry) new RectangleGeometry() { Rect = new Rect(0.0 - markerOrigin.X, 0.0 - markerOrigin.Y, markerSize.Width, markerSize.Height) }); case MarkerType.Diamond: return(VisualUtilities.CreatePolyLineGeometry(new PointCollection() { new Point(markerSize.Width / 2.0 - markerOrigin.X, 0.0 - markerOrigin.Y), new Point(markerSize.Width - markerOrigin.X, markerSize.Height / 2.0 - markerOrigin.Y), new Point(markerSize.Width / 2.0 - markerOrigin.X, markerSize.Height - markerOrigin.Y), new Point(0.0 - markerOrigin.X, markerSize.Height / 2.0 - markerOrigin.Y) })); case MarkerType.Cross: case MarkerType.CrossRotated: Size size1 = new Size(markerSize.Width / 4.0, markerSize.Height / 4.0); Point[] pointArray = new Point[12] { new Point(markerSize.Width / 2.0 - size1.Width / 2.0 - markerOrigin.X, 0.0 - markerOrigin.Y), new Point(markerSize.Width / 2.0 + size1.Width / 2.0 - markerOrigin.X, 0.0 - markerOrigin.Y), new Point(markerSize.Width / 2.0 + size1.Width / 2.0 - markerOrigin.X, markerSize.Height / 2.0 - size1.Height / 2.0 - markerOrigin.Y), new Point(markerSize.Width - markerOrigin.X, markerSize.Height / 2.0 - size1.Height / 2.0 - markerOrigin.Y), new Point(markerSize.Width - markerOrigin.X, markerSize.Height / 2.0 + size1.Height / 2.0 - markerOrigin.Y), new Point(markerSize.Width / 2.0 + size1.Width / 2.0 - markerOrigin.X, markerSize.Height / 2.0 + size1.Height / 2.0 - markerOrigin.Y), new Point(markerSize.Width / 2.0 + size1.Width / 2.0 - markerOrigin.X, markerSize.Height - markerOrigin.Y), new Point(markerSize.Width / 2.0 - size1.Width / 2.0 - markerOrigin.X, markerSize.Height - markerOrigin.Y), new Point(markerSize.Width / 2.0 - size1.Width / 2.0 - markerOrigin.X, markerSize.Height / 2.0 + size1.Height / 2.0 - markerOrigin.Y), new Point(0.0 - markerOrigin.X, markerSize.Height / 2.0 + size1.Height / 2.0 - markerOrigin.Y), new Point(0.0 - markerOrigin.X, markerSize.Height / 2.0 - size1.Height / 2.0 - markerOrigin.Y), new Point(markerSize.Width / 2.0 - size1.Width / 2.0 - markerOrigin.X, markerSize.Height / 2.0 - size1.Height / 2.0 - markerOrigin.Y) }; PointCollection points2 = new PointCollection(); if (markerType == MarkerType.CrossRotated) { RotateTransform rotateTransform2 = new RotateTransform(); rotateTransform2.Angle = 45.0; rotateTransform2.CenterX = markerSize.Width / 2.0 - markerOrigin.X; rotateTransform2.CenterY = markerSize.Height / 2.0 - markerOrigin.Y; for (int index = 0; index < pointArray.Length; ++index) { points2.Add(rotateTransform2.Transform(pointArray[index])); } } else { for (int index = 0; index < pointArray.Length; ++index) { points2.Add(pointArray[index]); } } return(VisualUtilities.CreatePolyLineGeometry(points2)); case MarkerType.Trapezoid: Size size2 = new Size(markerSize.Width / 3.0, markerSize.Height / 3.0); return(VisualUtilities.CreatePolyLineGeometry(new PointCollection() { new Point(size2.Width - markerOrigin.X, 0.0 - markerOrigin.Y), new Point(markerSize.Width - size2.Width - markerOrigin.X, 0.0 - markerOrigin.Y), new Point(markerSize.Width - markerOrigin.X, markerSize.Height - markerOrigin.Y), new Point(0.0 - markerOrigin.X, markerSize.Height - markerOrigin.Y) })); case MarkerType.Pentagon: PointCollection points3 = new PointCollection(); RotateTransform rotateTransform3 = new RotateTransform(); rotateTransform3.CenterX = markerSize.Width / 2.0 - markerOrigin.X; rotateTransform3.CenterY = markerSize.Height / 2.0 - markerOrigin.Y; int num2 = 5; for (int index = 0; index < num2; ++index) { Point point = new Point(markerSize.Width / 2.0 - markerOrigin.X, 0.0 - markerOrigin.Y); rotateTransform3.Angle = (double)index * 360.0 / (double)num2; point = rotateTransform3.Transform(point); points3.Add(point); } return(VisualUtilities.CreatePolyLineGeometry(points3)); case MarkerType.Wedge: Size size3 = new Size(markerSize.Width / 3.0, markerSize.Height / 3.0); return(VisualUtilities.CreatePolyLineGeometry(new PointCollection() { new Point(markerSize.Width / 2.0 - markerOrigin.X, 0.0 - markerOrigin.Y), new Point(markerSize.Width - markerOrigin.X, size3.Height - markerOrigin.Y), new Point(markerSize.Width - markerOrigin.X, markerSize.Height - markerOrigin.Y), new Point(0.0 - markerOrigin.X, markerSize.Height - markerOrigin.Y), new Point(0.0 - markerOrigin.X, size3.Height - markerOrigin.Y) })); case MarkerType.PieSlice: if (sweepAngle >= 360.0) { return (Geometry) new EllipseGeometry() { Center = new Point(markerSize.Width / 2.0 - markerOrigin.X, markerSize.Height / 2.0 - markerOrigin.Y), RadiusX = (markerSize.Width / 2.0), RadiusY = (markerSize.Height / 2.0) } } ; Point point1 = new Point(markerSize.Width / 2.0 - markerOrigin.X, markerSize.Height / 2.0 - markerOrigin.Y); Point point2 = new Point(point1.X, point1.Y - markerSize.Height / 2.0); Point point3 = VisualUtilities.RotatePointBy(point2, startAngle); Point point4 = VisualUtilities.RotatePointBy(point2, startAngle + sweepAngle); PathFigure pathFigure = new PathFigure() { StartPoint = VisualUtilities.ShiftPoint(point1) }; pathFigure.Segments.Add((PathSegment) new LineSegment() { Point = VisualUtilities.ShiftPoint(point3) }); pathFigure.Segments.Add((PathSegment) new ArcSegment() { IsLargeArc = (sweepAngle >= 180.0), SweepDirection = SweepDirection.Clockwise, Size = new Size(markerSize.Width / 2.0, markerSize.Height / 2.0), Point = VisualUtilities.ShiftPoint(point4) }); pathFigure.Segments.Add((PathSegment) new LineSegment() { Point = VisualUtilities.ShiftPoint(point1) }); return((Geometry) new PathGeometry() { Figures = { pathFigure } }); default: return((Geometry)null); } }