Prod.: Engine, ver.: 6021, ID: 60001515, Wish : Excluding areas of triangles for GroundSurface object

Wish : Excluding areas of triangles for GroundSurface object

Article60001515
TypeWish
ProductEngine
Version6021
Date Added10/18/2011
FixedYes [10/18/2011]
Submitted byAlekos Ntermaris // Chandrshekhar // Massimo Endrighi
Keywords

Subject

Excluding areas of triangles for GroundSurface object

Summary

Excluding areas of triangles for GroundSurface object

Solution

New methods  VectorDraw.Geometry.Delaunay.Triangulate and GetSliceRegionPoints of gPoints was added in 6022

syntax:

public static gTriangles Triangulate(gPoints points, ushort precision)

Triangulates the given points using Delaunay algorithm.

points: Input sample points to triangulate

precision :The decimal precision for the passed points.

returns : A gTriangles collection.

gPoints GetSliceRegionPoints(vdArray<gPoints> SliceRegions, ushort precision)

Returns a collection of all points in SliceRegions, all intersection points between regions and all intersection between region segments and this Triangle collection.

SliceRegions : A collection of regions.

precision : The decimal precision for the passed points.

returns a collection of all points that belongs on SliceRegions projected on triangles of this collection.

Example of excluding regions from a triangulation


                //create an array of points that represent a mountain
                gPoints pts = new gPoints();
               
                //add points from a 16 segments divided circle with radius 10 and elevation 50
                pts += Globals.GetArcSamplePoints(16, 10, 0.0, Globals.VD_TWOPI, 50);
                //add points from a 32 segments divided circle with radius 20 and elevation 40
                pts += Globals.GetArcSamplePoints(32, 20, 0.0, Globals.VD_TWOPI,40);
                //add points from a 48 segments divided circle with radius 30 and elevation 30
                pts += Globals.GetArcSamplePoints(48, 30, 0.0, Globals.VD_TWOPI,30);
                //add points from a 64 segments divided circle with radius 40 and elevation 20
                pts += Globals.GetArcSamplePoints(64, 40, 0.0, Globals.VD_TWOPI,20);
                //add points from a 78 segments divided circle with radius 50 and elevation 10
                pts += Globals.GetArcSamplePoints(78, 50, 0.0, Globals.VD_TWOPI,10);
                //add a point at the top of the mountain.
                pts += new gPoint(0, 0, 60);


                //create an array of points that defines a region that will not contains triangles inside
                gPoints SliceRegionInside = new gPoints(new gPoint[] { new gPoint(-18, 3), new gPoint(-18, 18), new gPoint(-3, 18), new gPoint(-3, 3), new gPoint(-18, 3) });
                //create an array of points that defines a region that will not contains triangles outside it.
                gPoints SliceRegionOutside = new gPoints(new gPoint[] { new gPoint(-35, -35), new gPoint(-35, 35), new gPoint(35, 35), new gPoint(35, -35), new gPoint(-35, -35) });


                //add all the regions into a collection
                vdArray<gPoints> SliceRegions = new vdArray<gPoints>(new gPoints[] { SliceRegionInside, SliceRegionOutside });


                ushort percision = 8;
                //calculate the result triangles using decimal precision 8 for passed points.
                gTriangles newtriangles = Delaunay.Triangulate(pts, percision);
                //calculate all intersection points between SliceRegions and triangles.
                //Z values of intersections are projected on triangles collection.
                gPoints intPts = newtriangles.GetSliceRegionPoints(SliceRegions, percision);
                //re-calculate the triangles using the basic input points and the calculated intersections.
                newtriangles = Delaunay.Triangulate(pts + intPts, percision);
               
                //remove the triangles according to region usage.
                gTriangles RemovedInsideTriangles = newtriangles.RemoveInsideTriangles(SliceRegionInside);
                gTriangles RemovedOutsideTriangles = newtriangles.RemoveOutsideTriangles(SliceRegionOutside);


                //create a new ground sourface with the calculating triangles.
                vdGroundSurface gf = new vdGroundSurface();
                gf.SetUnRegisterDocument(doc);
                gf.setDocumentDefaults();
                gf.Points = pts;
                gf.SelectUserTriangles(newtriangles);
                gf.DispMode = vdGroundSurface.DisplayMode.Triangle;
                doc.Model.Entities.AddItem(gf);


                doc.CommandAction.Zoom("e", null, null);