Example #1
0
        //构建特征中Face的角度属性邻接图
        public AngleGraph(MyNewDefineFeature Feature1)
        {
            int FaceNum = Feature1.FaceNumber;

            NumOfFace = FaceNum;//记录图中面的个数
            //初始化邻接矩阵和顶点数组
            adjmatrix = new double[FaceNum, FaceNum];

            Tag[]  shared_edges;
            double FaceAngle;

            //将代表邻接矩阵的表全初始化为0
            for (int i = 0; i < FaceNum; i++)
            {
                for (int j = 0; j < FaceNum; j++)
                {
                    if (i == j)
                    {
                        adjmatrix[i, j] = 0;
                        continue;
                    }
                    //判断两个面是否相邻
                    ufmodel.AskSharedEdges(Feature1.MyNewFeature[i].FaceTag, Feature1.MyNewFeature[j].FaceTag, out shared_edges);
                    if (shared_edges.Length == 0)//不相邻的情况取-1
                    {
                        adjmatrix[i, j] = -1.0;
                    }
                    else
                    {
                        MyFace.AskAngleOfFace(Feature1.MyNewFeature[i].FaceTag, Feature1.MyNewFeature[j].FaceTag, out FaceAngle);
                        adjmatrix[i, j] = Math.Round(FaceAngle, 2);//四舍五入,保留2位小数
                    }
                }
            }
        }
Example #2
0
 //判断一个特征是否为一个盲孔
 public static bool IsCounterboreHole(MyNewDefineFeature Feature1)
 {
     //单独的盲孔,边数为3的盲孔是存在阶梯孔的情况
     if (Feature1.FaceNumber == 2 && (Feature1.EdgeNumber >= 2) && Feature1.VertexNumber == 0)
     {
         //先计算两面之间的夹角
         double Angle;
         MyFace.AskAngleOfFace(Feature1.MyNewFeature[0].FaceTag, Feature1.MyNewFeature[1].FaceTag, out Angle);
         if (Angle != 90.0)
         {
             return(false);
         }
         if (Feature1.MyNewFeature[0].NodeFaceType == MyNewFaceType.Cylindrical && Feature1.MyNewFeature[1].NodeFaceType == MyNewFaceType.Planar)
         {
             //判断盲孔:一个面为凹圆柱面,一个面为平面,且两面的交线为凹边
             Tag[] SharedEdges;
             Program.theUfmodel.AskSharedEdges(Feature1.MyNewFeature[0].FaceTag, Feature1.MyNewFeature[1].FaceTag, out SharedEdges);
             if (MyEdges.IsConcaveEdge(SharedEdges[0]) && (MyFace.IsConcaveFace(Feature1.MyNewFeature[0].FaceTag) == 2))
             {
                 return(true);
             }
         }
         else if (Feature1.MyNewFeature[1].NodeFaceType == MyNewFaceType.Cylindrical && Feature1.MyNewFeature[0].NodeFaceType == MyNewFaceType.Planar)
         {
             //判断盲孔:一个面为凹圆柱面,一个面为平面,且两面的交线为凹边
             Tag[] SharedEdges;
             Program.theUfmodel.AskSharedEdges(Feature1.MyNewFeature[0].FaceTag, Feature1.MyNewFeature[1].FaceTag, out SharedEdges);
             if (MyEdges.IsConcaveEdge(SharedEdges[0]) && (MyFace.IsConcaveFace(Feature1.MyNewFeature[1].FaceTag) == 2))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Example #3
0
        //获取模型中的凹边
        public static void GetConcaveEdge(out Tag[] Edges)
        {
            Part workPart = theSession.Parts.Work;

            BodyCollection bodis = workPart.Bodies;

            Body[] bodys = bodis.ToArray();

            Tag [] egde_list;
            ufmodel.AskBodyEdges(bodys[0].Tag, out egde_list);

            Tag[]  face_list;
            double Angle;
            int    i = 0;

            Tag[] TemEdges = new Tag[egde_list.Length];

            foreach (Tag egde in egde_list)
            {
                ufmodel.AskEdgeFaces(egde, out face_list);
                MyFace.AskAngleOfFace(face_list[0], face_list[1], out Angle);
                if (Angle < 180.0)
                {
                    TemEdges[i] = egde;
                    ++i;
                }
            }
            Edges = new Tag[i];
            for (int j = 0; j < Edges.Length; ++j)
            {
                Edges[j] = TemEdges[j];
            }
        }
Example #4
0
        //判断边是否为凹边
        public static bool IsConcaveEdge(Tag edge1)
        {
            Tag[] face_list;
            ufmodel.AskEdgeFaces(edge1, out face_list);

            bool   IsConcave = true;
            double Angle;

            MyFace.AskAngleOfFace(face_list[0], face_list[1], out Angle);

            if (Angle >= 180.0)
            {
                IsConcave = false;
            }
            return(IsConcave);
        }
Example #5
0
        public static EdgeConcavity GetEdgeConca(Tag edge)
        {
            Tag[] face_list;
            Program.theUfmodel.AskEdgeFaces(edge, out face_list);
            EdgeConcavity edgeType;
            double        Angle;

            MyFace.AskAngleOfFace(face_list[0], face_list[1], out Angle);
            if (Angle == 180.0)
            {
                edgeType = EdgeConcavity.TangentLiner;//相切
            }
            else if (Angle > 180.0)
            {
                edgeType = EdgeConcavity.Convexity;//凸边
            }
            else
            {
                edgeType = EdgeConcavity.Concavity;//凹边
            }
            return(edgeType);
        }