# 60001515 Excluding areas of triangles for GroundSurface object

 Article 60001515 Type Wish Product Engine Version 6021 Date Added 10/18/2011 Fixed (10/18/2011) Submitted by Alekos Ntermaris // Chandrshekhar // Massimo Endrighi

## 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;