void CreateAndRenderCombined(Painter p, VertexStore vxsSnap1, VertexStore vxsSnap2) { //TODO: review here again. List <VertexStore> resultPolygons = new List <VertexStore>(); PolygonClippingDemoHelper.CreateAndRenderCombined(vxsSnap1, vxsSnap2, OpOption, false, resultPolygons); if (resultPolygons.Count > 0) { //draw combine result p.Fill(resultPolygons[0], ColorEx.Make(0.5f, 0.0f, 0f, 0.5f)); } }
void RenderPolygon(Painter p) { switch (this.PolygonSet) { case PolygonExampleSet.TwoSimplePaths: { //------------------------------------ // Two simple paths using (Tools.BorrowVxs(out var v1, out var v2)) { double x = _x - Width / 2 + 100; double y = _y - Height / 2 + 100; PolygonClippingDemoHelper.WritePath1(v1, x, y); PolygonClippingDemoHelper.WritePath2(v2, x, y); p.Fill(v1, ColorEx.Make(0f, 0f, 0f, 0.1f)); p.Fill(v2, ColorEx.Make(0f, 0.6f, 0f, 0.1f)); CreateAndRenderCombined(p, v1, v2); } } break; case PolygonExampleSet.CloseStroke: { //------------------------------------ // Closed stroke using (Tools.BorrowVxs(out var v1, out var v2)) { double x = _x - Width / 2 + 100; double y = _y - Height / 2 + 100; PolygonClippingDemoHelper.WritePath1(v1, x, y); PolygonClippingDemoHelper.WritePath2(v2, x, y); p.FillStroke(v1, 2, ColorEx.Make(0f, 0f, 0f, 0.1f)); p.FillStroke(v2, 3, ColorEx.Make(0f, 0.6f, 0f, 0.1f)); CreateAndRenderCombined(p, v1, v2); } } break; case PolygonExampleSet.GBAndArrow: { //------------------------------------ // Great Britain and Arrows using (Tools.BorrowVxs(out var v1_gb_poly, out var v2_arrows)) { AffineMat mat1 = AffineMat.Iden(); mat1.Translate(-1150, -1150); mat1.Scale(2); Affine mtx1 = new Affine(mat1); PolygonClippingDemoHelper.WriteGBObject(v1_gb_poly, 0, 0, mtx1); p.Fill(v1_gb_poly, ColorEx.Make(0.5f, 0.5f, 0f, 0.1f)); p.FillStroke(v1_gb_poly, 0.1f, ColorEx.Make(0, 0, 0)); // Affine mtx2 = mtx1 * Affine.NewTranslation(_x - Width / 2, _y - Height / 2); PolygonClippingDemoHelper.WriteArrow(v2_arrows, 0, 0, mtx2); p.Fill(v2_arrows, ColorEx.Make(0f, 0.5f, 0.5f, 0.1f)); CreateAndRenderCombined(p, v1_gb_poly, v2_arrows); } } break; case PolygonExampleSet.GBAndSpiral: { //------------------------------------ // Great Britain and a Spiral // using (Tools.BorrowVxs(out var v1_gb_poly)) using (Tools.BorrowVxs(out var v2_spiral, out var v2_spiral_outline)) using (Tools.BorrowStroke(out var stroke)) { AffineMat mat = AffineMat.Iden(); mat.Translate(-1150, -1150); mat.Scale(2); Affine mtx = new Affine(mat); PolygonClippingDemoHelper.WriteGBObject(v1_gb_poly, 0, 0, mtx); PolygonClippingDemoHelper.WriteSpiral(v2_spiral, _x, _y); p.Fill(v1_gb_poly, ColorEx.Make(0.5f, 0.5f, 0f, 0.1f)); p.FillStroke(v1_gb_poly, 0.1f, Color.Black); stroke.Width = 15; p.Fill(stroke.MakeVxs(v2_spiral, v2_spiral_outline), ColorEx.Make(0.0f, 0.5f, 0.5f, 0.1f)); CreateAndRenderCombined(p, v1_gb_poly, v2_spiral_outline); } } break; case PolygonExampleSet.SprialAndGlyph: { //------------------------------------ // Spiral and glyph using (Tools.BorrowVxs(out var v1_spiral, out var v1_spiralOutline, out var v3)) using (Tools.BorrowVxs(out var glyph_vxs)) using (Tools.BorrowStroke(out var stroke)) { //Affine mtx = Affine.New( // AffinePlan.Scale(4), // AffinePlan.Translate(220, 200)); AffineMat mat = AffineMat.Iden(); mat.Scale(4); mat.Translate(220, 200); PolygonClippingDemoHelper.WriteSpiral(v1_spiral, _x, _y); PolygonClippingDemoHelper.WriteGlyphObj(glyph_vxs, 0, 0, new Affine(mat)); //----------------------------------------- stroke.Width = 1; stroke.MakeVxs(v1_spiral, v1_spiralOutline); CreateAndRenderCombined(p, v1_spiralOutline, glyph_vxs); p.Fill(v1_spiralOutline, ColorEx.Make(0f, 0f, 0f, 0.1f)); p.Fill(glyph_vxs, ColorEx.Make(0f, 0.6f, 0f, 0.1f)); } } break; } }