private void AddGeometry(DrawingGroup group, Geometry g) { if (group.ClipGeometry != null && !group.ClipGeometry.FillContains(g)) { var cg = new CombinedGeometry(); cg.Geometry1 = group.ClipGeometry; cg.Geometry2 = g; cg.GeometryCombineMode = GeometryCombineMode.Intersect; g = cg.GetOutlinedPathGeometry(Flatness, ToleranceType.Relative); } var intersections = Geometries.Where(gg => gg.FillContainsWithDetail(g) != IntersectionDetail.Empty); foreach (var ig in intersections) { Geometries.Remove(ig); var cg = new CombinedGeometry(); cg.Geometry1 = g; cg.Geometry2 = ig; cg.GeometryCombineMode = GeometryCombineMode.Union; g = cg.GetOutlinedPathGeometry(Flatness, ToleranceType.Relative); } ApplyTransform(group.Transform, g); //ApplyTransform(Transform, g); Geometries.Add(g); }
public void BuildGrid(object sender, RoutedEventArgs e) { Canvas canvas = gridCanvas as Canvas; if (canvas == null) { return; } canvas.Children.Clear(); GeometryGroup row = new GeometryGroup(); GeometryGroup column = new GeometryGroup(); // Row for (int i = 0; i < canvas.ActualHeight; i += gridSize * 2) { var start = i + gridSize; // 幅を2倍でとっているのでその中心に来るようにする row.Children.Add(new RectangleGeometry(new Rect(0, start, canvas.ActualWidth, gridSize))); } // Column for (int i = 0; i < canvas.ActualWidth; i += gridSize * 2) { var start = i + gridSize; // 幅を2倍でとっているのでその中心に来るようにする var end = start + gridSize; column.Children.Add(new RectangleGeometry(new Rect(start, 0, gridSize, canvas.ActualHeight))); } CombinedGeometry combind = new CombinedGeometry(GeometryCombineMode.Xor, row, column); Path path = new Path() { Stroke = Brushes.Transparent, StrokeThickness = 0, Fill = this.FindResource("gridFrontBrushKey") as Brush }; path.Data = combind.GetOutlinedPathGeometry(); canvas.Background = this.FindResource("gridBackBrushKey") as Brush; canvas.Children.Add(path); //for (int ix = 0; ix < canvas.ActualWidth; ix += gridSize) //{ // var actual_ix = ix / gridSize; // for (int iy = 0; iy < canvas.ActualHeight; iy += gridSize) // { // var actual_iy = iy / gridSize; // var isBackColor = (actual_ix % 2 == 0 && actual_iy % 2 == 0) || (actual_ix % 2 == 1 && actual_iy % 2 == 1); // Path path = new Path() // { // Data = new RectangleGeometry(new Rect(new Point(ix, iy), new Size(gridSize, gridSize))), // Stroke = Brushes.Transparent, // StrokeThickness = 0, // Fill = (isBackColor ? this.FindResource("gridBackBrushKey") : this.FindResource("gridFrontBrushKey")) as Brush // }; // path.Data.Transform = scaleTransform; // canvas.Children.Add(path); // } //} }