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