VectorDraw Developer Framework(VDF)是一個用于應用程式可視化的圖形引擎庫。有了VDF提供的功能,您可以輕松地建立、編輯、管理、輸出、輸入和列印2D和3D圖形檔案。
VectorDraw web library (javascript)不僅能打開CAD圖紙,而且能顯示任何支援HTML5标準平台上的通用矢量對象,如Windows,安卓,iOS和Linux。無需任何安裝,VectorDraw web library (javascript)就可以運作在任何支援canvas标簽和Javascript的主流浏覽器(Chrome, Firefox, Safari, Opera, Dolphin, Boat等等)中。這意味着可以用DXF,DWG,DGN,SKP(Google的Sketchup),VDML等多種格式在任何台式、平闆電腦,智能手機和便攜式筆記本上展現出你的業務。
問:
如何排除GroundSurface對象的三角形區域?
答:
在6022中添加了新方法VectorDraw.Geometry.Delaunay.Triangulate和GetSliceRegionPoints of gPoints。
public static gTriangles Triangulate(gPoints points,ushort precision)
- 使用Delaunay算法對給定點進行三角測量。
- 要點:輸入樣本點進行三角測量。
- precision:傳遞點的小數精度。
- 傳回:gTriangles集合。
gPoints GetSliceRegionPoints(vdArray
傳回SliceRegions中所有點的集合,區域之間的所有交叉點以及區域段與此Triangle集合之間的所有交集。
- SliceRegions:區域集合。
- precision:傳遞點的小數精度。
- 傳回屬于在此集合的三角形上投影的SliceRegions的所有點的集合。
從三角測量中排除區域的示例
//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 SliceRegions = new vdArray(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);