Beispiel #1
0
        public static IList <PlanarFace> ListNearestFace(PlanarFace face, IList <PlanarFace> listFaces)
        {
            IList <PlanarFace> list  = new List <PlanarFace>();
            PlanarFace         face2 = Facelibry.NearestFace(face, listFaces);
            XYZ    point             = Facelibry.CenterPoint(face2);
            double num        = Facelibry.PointToFace(point, face);
            XYZ    faceNormal = face.FaceNormal;
            XYZ    right      = Facelibry.CenterPoint(face);

            foreach (PlanarFace planarFace in listFaces)
            {
                XYZ  xyz  = Facelibry.CenterPoint(planarFace);
                XYZ  xyz2 = xyz - right;
                bool flag = xyz2.IsAlmostEqualTo(new XYZ());
                if (!flag)
                {
                    double num2  = Facelibry.PointToFace(xyz, face);
                    bool   flag2 = num2 <1.02 * num && num2> 0.98 * num;
                    if (flag2)
                    {
                        list.Add(planarFace);
                    }
                }
            }
            return(list);
        }
Beispiel #2
0
        public static PlanarFace FirstFace(IList <PlanarFace> listFace, XYZ vector)
        {
            PlanarFace         result = null;
            IList <PlanarFace> list   = Facelibry.PerpendicularFace(listFace, vector);
            double             num    = 0.0;

            foreach (PlanarFace planarFace in list)
            {
                XYZ  source = Facelibry.CenterPoint(planarFace);
                bool flag   = MathLib.IsEqual(num, 0.0, 0.0001);
                if (flag)
                {
                    num    = vector.DotProduct(source);
                    result = planarFace;
                }
                else
                {
                    double num2  = vector.DotProduct(source);
                    bool   flag2 = num2 < num;
                    if (flag2)
                    {
                        result = planarFace;
                        num    = num2;
                    }
                }
            }
            return(result);
        }
Beispiel #3
0
        public static PlanarFace NearestFace(PlanarFace face, IList <PlanarFace> listFaces)
        {
            PlanarFace planarFace = null;
            double     num        = 0.0;
            XYZ        faceNormal = face.FaceNormal;
            XYZ        right      = Facelibry.CenterPoint(face);

            foreach (PlanarFace planarFace2 in listFaces)
            {
                XYZ  faceNormal2 = planarFace2.FaceNormal;
                XYZ  xyz         = faceNormal.CrossProduct(faceNormal2) / (faceNormal.GetLength() * faceNormal2.GetLength());
                bool flag        = !xyz.IsAlmostEqualTo(XYZ.Zero);
                if (!flag)
                {
                    XYZ  xyz2  = Facelibry.CenterPoint(planarFace2);
                    XYZ  xyz3  = xyz2 - right;
                    bool flag2 = xyz3.IsAlmostEqualTo(new XYZ());
                    if (!flag2)
                    {
                        double num2  = Facelibry.PointToFace(xyz2, face);
                        bool   flag3 = null == planarFace && num2 > 1E-06;
                        if (flag3)
                        {
                            planarFace = planarFace2;
                            num        = num2;
                        }
                        else
                        {
                            bool flag4 = num2 <num && num2> 1E-07;
                            if (flag4)
                            {
                                planarFace = planarFace2;
                                num        = num2;
                            }
                        }
                    }
                }
            }
            return(planarFace);
        }