void LiHai::GetFacePointAndDirection(tag_t face, double point[], double direction[])
{
int type = 0;
int norm_dir = 0;
double box1[6];
double radius;
double rad_data;
UF_MODL_ask_face_data(face, &type, point, direction, box1, &radius, &rad_data, &norm_dir);
}
double LiHai::GetTwoPointDistance(double startPoint[], double endPoint[])
{
return std::sqrt(
std::pow(endPoint[0] - startPoint[0], 2) +
std::pow(endPoint[1] - startPoint[1], 2) +
std::pow(endPoint[2] - startPoint[2], 2));
}
// 判断两个圆柱面是否共轴
bool LiHai::AreCylindersCoaxial(tag_t cylFace1, tag_t cylFace2)
{
double point1[3];
double direction1[3];
LiHai::GetFacePointAndDirection(cylFace1, point1, direction1);
double point2[3];
double direction2[3];
LiHai::GetFacePointAndDirection(cylFace2, point2, direction2);
double tol = 1e-6; // 公差
// 检查轴线方向是否平行
if (fabs(direction1[0] - direction2[0]) > tol
|| fabs(direction1[1] - direction2[1]) > tol
|| fabs(direction1[2] - direction2[2]) > tol)//方向相同
{
if (fabs(direction1[0] + direction2[0]) > tol
|| fabs(direction1[1] + direction2[1]) > tol
|| fabs(direction1[2] + direction2[2]) > tol)//方向相反
{
return false; // 轴线不平行
}
}
//圆柱面参考点重合
double dis = LiHai::GetTwoPointDistance(point1, point2);
if(dis < tol)
return true;
//两点方向,已归一化
std::array<double, 3> vec = LiHai::GetTwoPointVec(point1, point2);//这个函数看下一篇博客 https://blog.csdn.net/WangPaiFeiXingYuan/article/details/142141635
// 获取向量vec在向量referenceVector上的投影长度 https://lihai.blog.csdn.net/article/details/142138997
double len = LiHai::GetProjectionLength(vec.data(), direction1);//这个函数看上一篇博客
if(abs(len-1.0) < tol)
return true;
else
return false;
}
UG\NX二次开发 判断两个圆柱面是否共轴
于 2024-09-23 19:57:53 首次发布