Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
            }
        }