airintheair 发表于 2015-3-6 16:29:07

接触面涂色代码

本人新手,对C语言不太熟悉,写了如下一段代码,请问各位大神,哪里错了?

功能点:选择两个实体,判断距离,得到接触面,对接触面涂色


tag_t enterbody1;//touchselect1
tag_t enterbody2;//touchselest2
int touchcolor;//touchcolor1
double* mindist;
double body1_point;
double body2_point;
int n_parents1;
int n_parents2;
tag_p_t body1_face;
tag_p_t body2_face;
tag_t point1_face1;
tag_t point2_face2;
int i;
tag_t* point1;
tag_t* point2;
int results;

//1、获得对话框中的值

//选择的第一个体,找出来taggedObjects1
std::vector<NXOpen::TaggedObject*>taggedObjects1;
PropertyList *bodycollectorlist1=touchselect1->GetProperties();
taggedObjects1=bodycollectorlist1->GetTaggedObjectVector("SelectedObjects");
delete bodycollectorlist1;
bodycollectorlist1=NULL;
enterbody1=taggedObjects1->Tag();

//选择的第一个体,找出来taggedObjects1
std::vector<NXOpen::TaggedObject*>taggedObjects2;
PropertyList *bodycollectorlist2=touchselect2->GetProperties();
taggedObjects2=bodycollectorlist2->GetTaggedObjectVector("SelectedObjects");
delete bodycollectorlist2;
bodycollectorlist2=NULL;
enterbody2=taggedObjects2->Tag();

//接触面颜色提取
int colora;
PropertyList *thecolor=touchucolor1->GetProperties();
colora=thecolor->GetInteger("value");
touchcolor=(int)colora;

//2、判断干涉
UF_initialize();
UF_MODL_check_interference(enterbody1,1,&enterbody2,&results);
   /*tag_t target,
   int num_tools,
   tag_t * tools,
   int * results*/
if(results==1)
{
   uc1601("选择实体存在干涉,请检查后重新选择",1);
   enterbody1=NULL;
   enterbody2=NULL;
}
       else if(results==2)
{
   uc1601("选择实体存在间隙,请检查后重新选择",1);
      enterbody1=NULL;
      enterbody2=NULL;
}
      else
{

//2、找到最小距离所在位置
UF_SF_find_minimum_distance(enterbody1,enterbody2,mindist,body1_point,body2_point);

    //3、创建两个点
UF_CURVE_create_point(body1_point,point1);
UF_CURVE_create_point(body2_point,point2);

//4、找到两个点所在的面
UF_SO_ask_parents(point1,UF_SO_ASK_ALL_PARENTS,&n_parents1,&body1_face);
for (i=0; i<n_parents1; i++)
{
   int type=0, subtype=0;
   UF_OBJ_ask_type_and_subtype(body1_face, &type, &subtype);
   if (type==70 && subtype==2);
}
point1_face1=body1_face;
UF_SO_ask_parents(point2,UF_SO_ASK_ALL_PARENTS,&n_parents2,&body2_face);
for (i=0; i<n_parents2; i++)
{
   int type=0, subtype=0;
   UF_OBJ_ask_type_and_subtype(body2_face, &type, &subtype);
   if (type==70 && subtype==2);
}
point2_face2=body2_face;

//5、给两个面涂色
UF_OBJ_set_color(point1_face1,touchcolor);
UF_OBJ_set_color(point2_face2,touchcolor);
}
UF_terminate ();

admin 发表于 2015-3-8 11:04:32

你这个 代码 运行没报错吗??

选择对象你可以直接用 体的选择器   可以不用这个对象的要不然要设置matriple

你的意思应该是 选择两个体如果有接触面 就加个颜色

对吗?

简简单单 发表于 2015-3-8 14:18:47

是效果1,还是效果2,

简简单单 发表于 2015-3-9 08:54:56

效果1就不用那么复杂,用它就可以了 UF_MODL_check_interference( )
实体1和实体2所有的懂得面进行判断,这样就可以得到实体2的哪些面挨着,反之........:lol

airintheair 发表于 2015-3-9 11:07:47

admin 发表于 2015-3-8 11:04
你这个 代码 运行没报错吗??

选择对象你可以直接用 体的选择器   可以不用这个对象的要不然要设置ma ...

没报错,也没效果,╮(╯▽╰)╭
就是这个意思,如果有接触面,接触面就加个颜色

airintheair 发表于 2015-3-9 11:08:38

简简单单 发表于 2015-3-9 08:54
效果1就不用那么复杂,用它就可以了 UF_MODL_check_interference( )
实体1和实体2所有的懂得面进行判断,这样 ...

效果一1,谢谢!
;P我属于完全瞎写,新手,呵呵

airintheair 发表于 2015-3-9 11:11:20

简简单单 发表于 2015-3-9 08:54
效果1就不用那么复杂,用它就可以了 UF_MODL_check_interference( )
实体1和实体2所有的懂得面进行判断,这样 ...

UF_MODL_check_interference 这个我用了,但是它输入的不是只有结果1、2、3么?

简简单单 发表于 2015-3-9 11:45:27

Interference status for each tool body. The caller is
responsible for allocating it with an array size of
num_tools.
= 1 -> there is interference
= 2 -> no interference
= 3 -> touching, that is coincident faces

简简单单 发表于 2015-3-9 11:46:07

干扰对每个工具的身体状态。打电话的人是
负责分配数组的大小
num_tools。
= 1 - >有干扰
= 2 - >没有干扰
= 3 - >触摸,这是重合的脸

简简单单 发表于 2015-3-9 11:47:40

3就是你想要的
页: [1] 2
查看完整版本: 接触面涂色代码