/// <summary> /// 获取弹体截面的一半形状 /// </summary> /// <returns></returns> private static vtkPolyData GetBulletSection(ModelingBaseInfo info, SECTIONTYPE reflect) {//传入弹体参数,返回截面,该截面在ZOY面上 vtkPolyData polyData = vtkPolyData.New(); vtkPoints points = vtkPoints.New(); vtkPolygon polygon = vtkPolygon.New(); // 获取截面 点和拓扑结构 ProcessBulletInfo(info, ref points, ref polygon, reflect); vtkCellArray cellArray = vtkCellArray.New(); cellArray.InsertNextCell(polygon); polyData.SetPoints(points); polyData.SetPolys(cellArray);// 形成半个多边形 return(polyData); }
/// <summary> /// 处理弹体信息,根据基本几何建模信息构造polygon(先找出边界点,再放入vtkPolygon中) /// </summary> /// <param name="info"></param> /// <param name="points"></param> /// <param name="polygon"></param> /// <param name="reflcet"></param> private static void ProcessBulletInfo(ModelingBaseInfo info, ref vtkPoints points, ref vtkPolygon polygon, SECTIONTYPE reflcet) { points = GetHalfEdgePoint(info); int numpoints; if (reflcet == SECTIONTYPE.SECTION_HALF) {// 如果不做镜像 numpoints = points.GetNumberOfPoints(); } else {//如果做镜像,将点的个数增加一倍 points = ReflectPointsByXOZ(points); numpoints = points.GetNumberOfPoints(); } polygon.GetPointIds().SetNumberOfIds(numpoints); for (int i = 0; i < numpoints; i++) { polygon.GetPointIds().SetId(i, i); } }