iCAx开思工具箱

标题: 求助!装配体中的面的选择(版主请进!) [打印本页]

作者: 凤华    时间: 2007-8-27 23:33
标题: 求助!装配体中的面的选择(版主请进!)
我想在装配体中选择一个实体的面,然后用创建偏移面的函数,创建该面的偏移面,但是用UF_UI_select_with_class_dialog得到的面的tag无法用在偏移面函数中,总是出现内部错误。请版主或高手指点怎么获得合适的tag,感激不尽!
作者: soul_liu    时间: 2007-8-28 00:39
在装配体里物件有原型tag_t、事件tag_t和事例tag_t的区别,这个地方应该用该面的原型tag_t,是不是因为这个原因?
作者: 凤华    时间: 2007-8-28 10:06
是的,我检测得到tag是occurrence,请问怎样得到原形的tag呢?谢谢!
作者: soul_liu    时间: 2007-8-28 18:02
在uf_assem.h里的UF_ASSEM_ask_occs_of_part函数
作者: 凤华    时间: 2007-8-29 17:59
晕!这个函数是求原形的事件的,由portotype得到occurrence,按理该用相反的uf_assem_ask_prototype_of_occ,但是也不行。
作者: soul_liu    时间: 2007-8-29 18:52
哦,前面我说错了,是应该用UF_ASSEM_ask_prototype_of_occ函数。
至于为什么还不行,从上面的讯息无法分析出来,有可能返回未成功或者别的其它原因
作者: hajji    时间: 2007-8-29 20:59
也许是新手吧,不能发帖
正好是相关的,就借楼主的地方问一下,谢谢了

在装配件中,一个零件运动到一个方向的无穷远处,用什么方法呢
求这个过程中与他干涉的零件怎么得到呢
万分谢谢了
作者: 凤华    时间: 2007-8-29 21:10
我发一个简单的例子代码你帮我分析一下吧。用MFC开发的,在一个完全的装配体中选择一个实体面。谢谢!
    char * message="选择segment!",* title="选择" ;
    int scope=UF_UI_SEL_SCOPE_NO_CHANGE,response,count,ip4;
    double rp2=200.0,rp3=0.01;
    tag_p_t object;
    tag_t object1,nr5;

    UF_initialize();
    UF_UI_lock_ug_access (UF_UI_FROM_CUSTOM);
    UF_UI_select_with_class_dialog (message,title,scope,init_proc1,NULL,&response,&count,&object);
    if(count==1 && response==UF_UI_OK)
    {
      UF_DISP_set_highlight(object[0], 1);
      object1=UF_ASSEM_ask_prototype_of_occ (object[0] );
      uf5450(&object[0],&rp2, &rp3,&ip4, &nr5 );
     }
    UF_free(object);
    UF_UI_unlock_ug_access (UF_UI_FROM_CUSTOM);
    UF_terminate();

其中init_proc1的定义为:
static int init_proc1(UF_UI_selection_p_t select,void* user_data)
{
    int num_triples = 1;
    UF_UI_mask_t mask_triples[] = {UF_solid_type,UF_solid_face_subtype,UF_UI_SEL_FEATURE_ANY_FACE};
    if((UF_UI_set_sel_mask(select,UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,num_triples, mask_triples)) == 0)
    {
        return (UF_UI_SEL_SUCCESS);
    }
    else
    {
        return (UF_UI_SEL_FAILURE);
    }
}


作者: soul_liu    时间: 2007-8-30 18:45
将scope值改为UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY,否则无法选择组件里的任何东西

测试时发现,不必要使用原型Tag,可以去掉object1=UF_ASSEM_ask_prototype_of_occ (object[0] );
而且你下面使用的还是object[0],针对的还是事件Tag

估计以前是因为部件没有加载完全情况时发生错误的。

测试过程:创建一个部件,然后生成一个Block,选择该block创建新组件,形成装配
再运行程序,正常通过。
作者: 凤华    时间: 2007-8-31 11:16
非常感谢soul_liu的热心帮助,你的建议很有启发性,我反复试了多种情况,发现它只适用于自上而下建立的装配,并且是在完全加载的情况下。而对于自下而上的装配还是爱莫能做,完全加载也不行,其中的原委耐人寻味。此路不通,我只有改弦更张了。再次感谢soul_liu




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