iCAx开思工具箱

标题: 请问有没有人知道两个曲面的【桥接】怎么实现? [打印本页]

作者: begtostudy    时间: 2008-9-9 15:41
标题: 请问有没有人知道两个曲面的【桥接】怎么实现?
就是曲面的【桥接】命令,我录制不到

不知道有没有人知道对应的API或者NXOpen的实现方法?

十分感谢。
作者: sincosxu    时间: 2008-9-11 21:58
extern UFUNEXPORT int UF_MODL_create_bridge_face(
int continuity_type ,/* <I>
                     1 = tangent continuous, 2= curvature continuous
                     */
int guide_type ,/* <I>
                0 = no guides; 1= guide strings; 2= guide surfaces
                */
tag_t *primary_faces ,/* <I,len:2>
                      tags of 2 primary surfaces to be bridged
                      */
tag_t  *primary_edges ,/* <I,len:2>
                       tags of edges on primary surfaces where the bridge
                       should be attached.
                         */
int *primary_edges_dir ,/* <I>
                        direction of primary_edges (if continuity_type = 1)
                        1 =  forward
                        -1 = backward
                        */
UF_STRING_p_t side_string1 ,/* <I>
                            first guide string (if guide_type = 1)
                            */
UF_STRING_p_t side_string2 ,/* <I>
                            second guide string (if guide_type = 1)
                            */
tag_t *side_faces ,/* <I,len:2>
                   tags of 2 side guide surfaces (if guide_type = 2)
                   */
tag_t *side_edges ,/* <I,len:2>
                   tags of edges on side surfaces where bridge should
                   be attached (if guide_type = 2)
                   */
tag_t *result_tag  /* <O>
                  tag of resulting surface
                  */
);
没调试过。。不过看函数名好像是你要找的。。
作者: begtostudy    时间: 2008-9-13 20:53
标题: 回复 2楼 sincosxu 的帖子
唉,我也找到了

但是不管我怎么用都是出错,内存存取违例那个错误

不知道有人用成功过吗?
作者: sincosxu    时间: 2008-9-14 10:11
你在UG里面好好用过这个命令了的么?
作者: begtostudy    时间: 2008-9-15 16:48
tag_t CreateBridgeFace(tag_t* bridge_faces,tag_t* bridge_edges,std::vector<tag_t> side_string)
{
        int sum_edge = side_string.size();
        //tag_t bridge_faces[2];
        //tag_t bridge_edges[2];
        UF_STRING_t side_string1;
        UF_MODL_init_string_list(&side_string1);
        UF_MODL_create_string_list(1,sum_edge,&side_string1);
        for (int i =0;i<sum_edge;i++)
        {
                side_string1.string = i+1;
                side_string1.dir = UF_MODL_CURVE_START_FROM_BEGIN;
                side_string1.id = side_string;
        }

        UF_STRING_t side_string2;
        UF_MODL_init_string_list(&side_string2);
        UF_MODL_create_string_list(0,0,&side_string2);

        int primary_edges_dir=1;
        tag_t bridge;
        int error = UF_MODL_create_bridge_face(1,1,bridge_faces,bridge_edges,&primary_edges_dir,&side_string1,NULL,NULL,NULL,&bridge);
        if(error!=0)
        {
                char msg[133];
                UF_get_fail_message(error,msg);
                uc1601(msg,1);
        }

        //UF_MODL_free_string_list(&side_string1);
        //UF_MODL_free_string_list(&side_string2);

        return bridge;
}

不知道为什么就没正确过
作者: begtostudy    时间: 2008-9-16 16:06
程序做了调整,side_string只有一个边的时候没问题

但是两个和两个以上的时候,
就说
Edge are not properly connected
边界没有适当的连接

我晕,不知道给位有没有人知道什么是“适当的连接”,改怎么做呢?
作者: sincosxu    时间: 2008-9-19 00:38
第一:边界不能多于两条。。
第二:你的边界要和两个面有关系。。简单的说:边界上至少要有一个点分别在相应的面上。。
作者: begtostudy    时间: 2008-9-23 15:32
程序中
        //tag_t bridge_faces[2];
        //tag_t bridge_edges[2];
确实保证了两个面的两个边。

用这个程序,处理U形的情况没问题,因为只有一个side_string1
但是简单的两个side_string1的情况,比如V形,就说Edge are not properly connected
边界没有适当的连接

不知道是啥情况
作者: begtostudy    时间: 2008-9-23 15:37
忘了说了,上面的程序有问题,下面的程序处理U形的情况没问题,只有一个side_string1

手工选择两个side_string1的情况就有问题了

tag_t CreateBridgeFace(tag_t* bridge_faces,tag_t* bridge_edges,std::vector<tag_t> side_string)
{
        int sum_edge = side_string.size();
        //tag_t bridge_faces[2];
        //tag_t bridge_edges[2];
        UF_STRING_t side_string1;
        UF_MODL_init_string_list(&side_string1);
        UF_MODL_create_string_list(1,sum_edge,&side_string1);
        int i=0;
        side_string1.string = i+1;
        side_string1.dir = UF_MODL_CURVE_START_FROM_BEGIN;
        side_string1.id = side_string;
        while(i<(sum_edge-1))
        {
                Edge* edge1 = trans<Edge*>(side_string);
                Edge* edge2 = trans<Edge*>(side_string[++i]);

                side_string1.string = i+1;

                        side_string1.dir = UF_MODL_CURVE_START_FROM_BEGIN;
                side_string1.id = side_string;
        };

        UF_STRING_t side_string2;
        UF_MODL_init_string_list(&side_string2);
        UF_MODL_create_string_list(0,0,&side_string2);

        tag_t side_faces[2];
        side_faces[0] = NULL_TAG;
        side_faces[1] = NULL_TAG;
        tag_t side_edges[2];
        side_edges[0] = NULL_TAG;
        side_edges[1] = NULL_TAG;

        int primary_edges_dir[2]={1,1};
        tag_t bridge;
        int error = UF_MODL_create_bridge_face(1,1,bridge_faces,bridge_edges,primary_edges_dir,&side_string1,&side_string2,side_faces,side_edges,&bridge);
        if(error!=0)
        {
                char msg[133];
                UF_get_fail_message(error,msg);
                uc1601(msg,1);
        }

        //UF_MODL_free_string_list(&side_string1);
        //UF_MODL_free_string_list(&side_string2);

        return bridge;
}




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