iCAx开思工具箱

标题: 【求助】::?UF_MODL_ask_minimum_dist()函数的使用 [打印本页]

作者: aeoluszhou    时间: 2003-5-11 14:03
标题: 【求助】::?UF_MODL_ask_minimum_dist()函数的使用
::?
在使用UF_MODL_ask_minimum_dist()函数时,遇到了一些问题。使用该函数的目的:得到两个相接触的body的接触点。如果这两个body是在造型的过程中产生接触的,该函数能够正确执行,但是,如果通过装配的方法使两个body相接触,再利用该函数求得两个body的接触点时,这个函数就不能正确执行。为什么呢?请求高人的帮忙。谢谢::?
作者: spline    时间: 2003-5-12 08:34
是不是Instance 和 Occurence的问题呀?
你的装配是你用代码实现的吗?
作者: aeoluszhou    时间: 2003-5-12 10:50
我的装配不是通过代码实现的,是通过UG提供的assemble application来实现的。它的错误提示是:unknown curve type。谢谢关注。
作者: spline    时间: 2003-5-12 12:19
那你是如何选择物体的呢?是通过GUI选择的方法,还是用搜索的方法呢?
我也在装配中测量过距离,但是没遇到什么问题。
作者: aeoluszhou    时间: 2003-5-12 22:59
我是通过自己的模块调出的选择对话框来选中实体的,就是调用的UF_UI_select_with_single_dialog()函数来弹出选择对话框。调用两次就分别选中了两个装配起来的实体,之后调用求距离的函数,结果就出现了毛病。
作者: xuejunnpu    时间: 2003-5-13 10:57
用UF_UI_select_with_class_dialog()函数试试,我就是用这个函数,调用两次,选择两个对象,然后求距离,就行了
作者: aeoluszhou    时间: 2003-5-14 08:18
试了,还是不行。还是会出现如图所示的错误。
作者: xuejunnpu    时间: 2003-5-16 12:45
不对呀,我用的就是这样,并且各种距离都能够计算,我的一部分程序你看看
if((UF_CALL(UF_UI_select_with_class_dialog(cue1, title1, UF_UI_SEL_SCOPE_WORK_PART,init_proc, NULL, &response_w1, &count_w1, &object1))) == 0)选择第一个对象
if((UF_CALL(UF_UI_select_with_class_dialog(cue2, title2, UF_UI_SEL_SCOPE_WORK_PART,init_proc, NULL, &response_w2, &count_w2, &object2))) == 0)选择第二个对象
UF_MODL_ask_minimum_dist_2 (*object1, *object2,
0, NULL, 0, NULL, [$ min_dist,  pt_on_ent1, pt_on_ent2, &a )]
UF_free(object1);
UF_free(object2);要释放两个对象的tag
作者: aeoluszhou    时间: 2003-5-16 13:50
我的和你的程序差不了多少,结果就是这样,我再仔细查查,多谢了。
作者: zzz    时间: 2003-5-16 14:47
把你的这部分程序贴出来看一下吧
作者: aeoluszhou    时间: 2003-5-16 19:01
  //首先应该找到接触点,之后把得到的接触点加入到临时点链
  if(body_chain!=NULL)
  {p=body_chain;
  for(l=locator_chain;l!=NULL;l=l->next)
  {
  ret = UF_MODL_ask_minimum_dist (p->data,l->data,0,guess1,
        0,guess2,[$min_dist,pt_on_ent1,pt_on_ent2)]
  if(min_dist<1e-10)
  {
  ret = UF_CURVE_create_point (pt_on_ent1, [$point_tag )]
  s=(NODE*)malloc(sizeof(NODE));
  s->data=point_tag;
  s->next=NULL;
      
  if(temp_chain==NULL)
  {
  temp_chain=s;
  roft=s;
  }
  else
  {
  roft->next=s;
  roft=s;
  }
  }
  }
  }
可能不容易看,在这之前已经生成了两个body链,一个名字叫body_chain,另一个叫locator_chain,




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3