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); }