示例#1
0
        public static bool samePlane(Face2 firstFace, Face2 secondFace, SldWorks swApp)
        {
            var firstSurf  = (Surface)firstFace.GetSurface();
            var secondSurf = (Surface)secondFace.GetSurface();

            var firstParameters  = (Array)firstSurf.PlaneParams;
            var secondParameters = (Array)secondSurf.PlaneParams;

            var firstNormal = new double[3];
            var firstPoint  = new double[3];

            var secondNormal = new double[3];
            var secondPoint  = new double[3];

            Array.Copy(firstParameters, 0, firstNormal, 0, 3);
            Array.Copy(firstParameters, 3, firstPoint, 0, 3);

            Array.Copy(secondParameters, 0, secondNormal, 0, 3);
            Array.Copy(secondParameters, 3, secondPoint, 0, 3);

            if (!firstFace.FaceInSurfaceSense())
            {
                firstNormal.SetValue(-(double)firstNormal.GetValue(0), 0);
                firstNormal.SetValue(-(double)firstNormal.GetValue(1), 1);
                firstNormal.SetValue(-(double)firstNormal.GetValue(2), 2);
            }

            if (!secondFace.FaceInSurfaceSense())
            {
                secondNormal.SetValue(-(double)secondNormal.GetValue(0), 0);
                secondNormal.SetValue(-(double)secondNormal.GetValue(1), 1);
                secondNormal.SetValue(-(double)secondNormal.GetValue(2), 2);
            }

            var results     = Math.Abs(Matrix.InnerProduct(firstNormal, secondNormal) - 1);
            var normalPrint = String.Format("{0} {1} {2} --- {3} {4} {5} = {6}",
                                            firstNormal[0], firstNormal[1], firstNormal[2],
                                            secondNormal[0], secondNormal[1], secondNormal[2], results);

            var firstEquation = new double[4]
            {
                (double)firstNormal.GetValue(0), (double)firstNormal.GetValue(1), (double)firstNormal.GetValue(2),
                -(double)firstNormal.GetValue(0) * (double)firstPoint.GetValue(0) -
                (double)firstNormal.GetValue(1) * (double)firstPoint.GetValue(1) -
                (double)firstNormal.GetValue(2) * (double)firstPoint.GetValue(2),
            };
            var secondEquation = new double[4]
            {
                (double)secondNormal.GetValue(0), (double)secondNormal.GetValue(1), (double)secondNormal.GetValue(2),
                -(double)secondNormal.GetValue(0) * (double)secondPoint.GetValue(0) -
                (double)secondNormal.GetValue(1) * (double)secondPoint.GetValue(1) -
                (double)secondNormal.GetValue(2) * (double)secondPoint.GetValue(2),
            };


            var equationPrint = String.Format("Eq: {0}x {1}y {2}z = {3}",
                                              firstEquation[0], firstEquation[1], firstEquation[2], firstEquation[3]);

            /*
             * if (Math.Abs(Accord.Math.Matrix.InnerProduct(firstNormal, secondNormal) - 1) < 0.001)
             * {
             *  swApp.SendMsgToUser("Normale uguale");
             *  return false;
             * }
             */
            //return firstEquation.Equals(secondFace);
            if (Math.Abs(firstEquation[0] - secondEquation[0]) < 0.01 &&
                Math.Abs(firstEquation[1] - secondEquation[1]) < 0.01 &&
                Math.Abs(firstEquation[2] - secondEquation[2]) < 0.01 &&
                Math.Abs(firstEquation[3] - secondEquation[3]) < 0.01)
            {
                swApp.SendMsgToUser("Equazione uguale");
                return(true);
            }
            return(false);
        }