本节将介绍如何从一个SoildBase实体中获取它的点,线,面数据。
4.4.1 创建SoildBase几何实体
在获取几何实体点,线,面几何数据前,先要创建一个实体,示例代码4-2是创建实体的过程:
①创建点。
②由点形成线。
③由线形成面。
④通过面和拉伸向量,形成一个拉伸体。
//点
GePoint3d pointS = new GePoint3d(1, 1, 0);
GePoint3d pointE = new GePoint3d(8000, 8000, 0);
GePoint3d pointB = new GePoint3d(8000, 1, 0);
GePoint3d pointT = new GePoint3d(16000, 8000, 0);
// 线
var curve = IGeCurveBase.createSegment(new GeSegment3d(pointS, pointE));
var curve1 = IGeCurveBase.createSegment(new GeSegment3d(pointE, pointT));
var curve2 = IGeCurveBase.createSegment(new GeSegment3d(pointT, pointB));
var curve3 = IGeCurveBase.createSegment(new GeSegment3d(pointB, pointS));
// 面
GeCurveArray curveLGeCurveArray.create(GeCurveArray.BoundaryType.Outer);
curveList.add(curve);
curveList.add(curve1);
curveList.add(curve2);
curveList.add(curve3);
// 体
GeVec3d v3d = new GeVec3d(0,0,2000);
GeExtrusionInfo extrusionInfo = new GeExtrusionInfo(curveList,v3d, true);
var solid = IGeSolidBase.createExtrusion(extrusionInfo);
BPGraphics graphic = new BPGraphics();
graphic.addSolid(solid);
graphic.save();
代码4-2 创建拉伸体
4.4.2 获取SoildBase几何数据
示例代码4-3是获取实体几何数据的过程:
①通过getFaceIndices接口获取几何实体所有面的序号。
②遍历面的序号拿到对应面的数据。
③遍历每个面拿到面中所有线的数据。
④遍历线拿到点的数据。
//得到soild里面indices
List<GeFaceIndices> indices = solid.getFaceIndices();
List<GeCurveArray> curvearr = new List<GeCurveArray>();
//通过 indices拿到对应的面
foreach(GeFaceIndices fIdx in indices)
{
GeCurveArray arr = solid.getFace(fIdx);
if (arr != nul1)
curvearr.Add(arr);
}
if (curvearr != nul1)
{
long num = curvearr.Count;
List<IGeCurveBase> curvel = new List<IGeCurveBase>();
for (long a = 0; a < num; a++)
{
//拿出每一个面
GeCurveArray curvearray = GeCurveArray.create(GeCurveArray.BoundaryType.Outer);
int b = Convert.ToInt32(a);
curvearray = curvearr[b];
if (a == 0)
{
//画出第一个面
BPGeSymbology symb = new BPGeSymbology();
symb.color = System.Drawing.Color.Green;
graphics.addCurveVector(curvearray, symb,0);
}
//拿出每一个面中线的信息
if (curvearray != null)
{
long length = curvearray.size;
for (long line = 0; line < length; line++)
{
curvel.Add(curvearray.at(line));
int c = Convert.ToInt32(line);
IGeCurveBase.CurveBaseType style = curvearray.at(line).getCurveBaseType();
//拿出每一个线中点的信息
if (style == IGeCurveBase.CurveBaseType.Segment)
{
IGeCurveBase curveone =
IGeCurveBase.createSegment(new GeSegment3d(pointS, pointE));
curveone = curvearray.at(line);
if (curveone != null)
{
GePoint3d startq = curveone.startPoint;
GePoint3d endq = curveone.endPoint;
}
}
//如果是lingsrting类型,则拿到线里所有的点
else if (style == IGeCurveBase.CurveBaseType.LineString)
{
IGeCurveBase curveone1 =
IGeCurveBase.createLineString(points);
List<GePoint3d> pointsvect = new List<GePoint3d>();
curveone1 = curvearray.at(line);
if (curveone1 != null)
{
pointsvect = curveone1.getLineString();
}
}
}
}
}
}
代码4-3 获取实体点线面数据