private static void GenerateFace(OctreeNode <NodeParms> node, MeshBuilder_IntegerVertex mb, ref Int16Triple[] tempArray, BitMap3d bmp)
        {
            InitVoxelPositionForNodeRange(node.XMin, node.XMax, node.YMin, node.YMax, node.ZMin, node.ZMax, ref tempArray);
            //需要找到该节点的端点位置
            byte cubeConfig = 0;

            for (int pi = 0; pi < 8; pi++)
            {
                if (InRange(bmp, tempArray[pi].X, tempArray[pi].Y, tempArray[pi].Z) &&
                    IsWhite(bmp, tempArray[pi].X, tempArray[pi].Y, tempArray[pi].Z))
                {
                    cubeConfig |= PointIndexToFlag[pi];
                }
            }
            int index = 0;

            while (MCTable.TriTable[cubeConfig, index] != -1)
            {
                int ei1 = MCTable.TriTable[cubeConfig, index];
                int ei2 = MCTable.TriTable[cubeConfig, index + 1];
                int ei3 = MCTable.TriTable[cubeConfig, index + 2];

                Int16Triple p1 = GetIntersetedPointAtEdge(node, ei1, OctreeTable.NormalTypeIdToNormal[node.Parms.NormalTypeId], node.Parms.D);
                Int16Triple p2 = GetIntersetedPointAtEdge(node, ei2, OctreeTable.NormalTypeIdToNormal[node.Parms.NormalTypeId], node.Parms.D);
                Int16Triple p3 = GetIntersetedPointAtEdge(node, ei3, OctreeTable.NormalTypeIdToNormal[node.Parms.NormalTypeId], node.Parms.D);

                mb.AddTriangle(p1, p2, p3);
                index += 3;
            }
        }//对非叶子节点的超体元的抽取需要参考MCTable求取被截断边的信息
        }//对非叶子节点的超体元的抽取需要参考MCTable求取被截断边的信息

        private static void GenerateFaceLeaf(OctreeNode <NodeParms> node, MeshBuilder_IntegerVertex mb, ref Int16Triple[] tempArray, BitMap3d bmp)
        {
            for (int k = 0; k < 8; k++)
            {
                tempArray[k].X = node.XMin + PointIndexToPointDelta[k].X;
                tempArray[k].Y = node.YMin + PointIndexToPointDelta[k].Y;
                tempArray[k].Z = node.ZMin + PointIndexToPointDelta[k].Z;
            }
            byte value = node.Parms.Config;
            int  index = 0;

            while (SMCTable.TableFat[value, index] != -1)
            {
                Int16Triple t0 = tempArray[SMCTable.TableFat[value, index]];
                Int16Triple t1 = tempArray[SMCTable.TableFat[value, index + 1]];
                Int16Triple t2 = tempArray[SMCTable.TableFat[value, index + 2]];
                mb.AddTriangle(t0, t1, t2);
                index += 3;
            }
        }//对叶子节点的单位体元的抽取和SMC算法中的抽取一致