//PK判断干涉(快于UF)
bool PK_TwoObjectIsClash(const tag_t object_tag1, const tag_t object_tag2)
{
int i = 0, n_clash = 0;
bool bIsClash = false;
tag_t ps_tag1 = NULL_TAG, ps_tag2 = NULL_TAG, part_occ = NULL_TAG;
double mtx_4d[2][16] = { 0.0 }, mtx_44[4][4] = { 0.0 };
PK_TRANSF_t tf1, tf2;
PK_TRANSF_sf_t transf_sf;
PK_TOPOL_clash_t* clashes = NULL;
PK_TOPOL_clash_o_t options;
PK_TOPOL_clash_type_t clash_type = 0;
PK_TOPOL_t pkObject1 = 0;
PK_TOPOL_t pkObject2 = 0;
if (NULL_TAG == object_tag1)return false;
if (NULL_TAG == object_tag2)return false;
if (object_tag1 == object_tag2)return true;
if (UF_PS_ask_ps_tag_of_object(object_tag1, &ps_tag1))return false;
if (UF_PS_ask_ps_tag_of_object(object_tag2, &ps_tag2))return false;
pkObject1 = ps_tag1;
pkObject2 = ps_tag2;
transf_sf.matrix[0][0] = 1.0;
transf_sf.matrix[0][1] = 0.0;
transf_sf.matrix[0][2] = 0.0;
transf_sf.matrix[0][3] = 0.0;
transf_sf.matrix[1][0] = 0.0;
transf_sf.matrix[1][1] = 1.0;
transf_sf.matrix[1][2] = 0.0;
transf_sf.matrix[1][3] = 0.0;
transf_sf.matrix[2][0] = 0.0;
transf_sf.matrix[2][1] = 0.0;
transf_sf.matrix[2][2] = 1.0;
transf_sf.matrix[2][3] = 0.0;
transf_sf.matrix[3][0] = 0.0;
transf_sf.matrix[3][1] = 0.0;
transf_sf.matrix[3][2] = 0.0;
transf_sf.matrix[3][3] = 1.0;
PK_TRANSF_create(&transf_sf, &tf1);
PK_TRANSF_create(&transf_sf, &tf2);
PK_TOPOL_clash_o_m(options);
options.find_intersect = PK_LOGICAL_true;
PK_TOPOL_clash(1, &pkObject1, &tf1, 1, &pkObject2, &tf2, &options, &n_clash, &clashes);
if (n_clash > 0)
{
for (i = 0; i < n_clash; i++)
{
if (clashes[i].clash_type != PK_TOPOL_clash_none && clashes[i].clash_type != PK_TOPOL_clash_abut_no_class)
{
bIsClash = true;
break;
}
}
PK_MEMORY_free(clashes);
}
return bIsClash;
}
【UG\NX二次开发】PK判断干涉(PK_TOPOL_clash)
最新推荐文章于 2024-05-10 14:37:11 发布
该代码片段是一个用于检测两个对象是否发生干涉的函数,通过PK方法计算对象的局部坐标并检查是否存在碰撞。
摘要由CSDN通过智能技术生成