• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

【NX二次开发】边倒C角、倒斜角、倒角 UF_MODL_create_chamfer

开发技术 开发技术 2周前 (04-08) 4次浏览

创建圆柱1,创建圆柱2并与圆柱1求差,将体的所有边倒角。

效果:

【NX二次开发】边倒C角、倒斜角、倒角 UF_MODL_create_chamfer

 

 源码

int getBodyEdges(tag_t tagBodyIn, int iType, vector<tag_t> *vecEdges)
{
    vector<tag_t> vecFaces;
    uf_list_p_t list1 = NULL;//定义链表
    UF_MODL_create_list(&list1);  //创建链表
    double object_box_face[6];           //面的边界。返回曲面包围盒的空间对角线角点坐标
    double  object_radius_face;            //曲面大半径!
    double  object_rad_data_face;        //曲面小半径!
    int  object_norm_dir_face;
    int  object_type_face;              //曲面类型  22有界平面
    double object_point_face[3];       //返回一个点
    double object_dir_face[3];         //方向!

    UF_MODL_ask_body_faces(tagBodyIn, &list1);
    int count = 0;
    UF_MODL_ask_list_count(list1, &count);//链表计数
    for (int i = 0; i < count; i++)
    {
        tag_t tagPlane = NULL_TAG;
        UF_MODL_ask_list_item(list1, i, &tagPlane);   //接收链表数据
        UF_MODL_ask_face_data(tagPlane, &object_type_face, object_point_face, object_dir_face, object_box_face, &object_radius_face, &object_rad_data_face, &object_norm_dir_face);
        vecFaces.push_back(tagPlane);
    }
    UF_free(list1);     //释放链表指针
    list1 = NULL;

    for (int n = 0; n < vecFaces.size(); n++)
    {
        uf_list_p_t list2 = NULL;//定义链表
        UF_MODL_create_list(&list2);  //创建链表
        int iEdgeType = 0;
        tag_t tagFaceIn = vecFaces[n];
        UF_MODL_ask_face_edges(tagFaceIn, &list2);
        count = 0;
        UF_MODL_ask_list_count(list2, &count);//链表计数
        for (int i = 0; i < count; i++)
        {
            tag_t tagEdge = NULL_TAG;
            UF_MODL_ask_list_item(list2, i, &tagEdge);   //接收链表数据
            UF_MODL_ask_edge_type(tagEdge, &iEdgeType);
            if ((iType == 0) || (iEdgeType == iType))
            {
                (*vecEdges).push_back(tagEdge);
            }
        }
        UF_free(list2);     //释放链表指针
        list2 = NULL;
    }
    return 0;
}

extern DllExport void ufsta(char *param, int *returnCode, int rlen)
{
    UF_initialize();
    //创建第一个圆柱
    UF_FEATURE_SIGN cy1 = UF_NULLSIGN;  //布尔方式 : 布尔 无
    double origin1[3] = { 0.0,0.0,0.0 };   //WCS坐标点
    UF_CSYS_map_point(UF_CSYS_ROOT_WCS_COORDS, origin1, UF_CSYS_WORK_COORDS, origin1);// 绝对坐标系转工作坐标系
    char *H1 = "20";   //高度
    char *D1 = "10";   //直径
    double v1[3] = { 0,0,1 };   //矢量方向
    tag_t cy1TAG = NULL_TAG;  ////圆柱特征
    UF_MODL_create_cyl1(cy1, origin1, H1, D1, v1, &cy1TAG);

    //创建第二个圆柱并求差
    UF_FEATURE_SIGN cy2 = UF_NEGATIVE;   //UF_NEGATIVE 布尔 求差
    char *H2 = "20";   //高度
    char *D2 = "6";    //直径
    double v2[3] = { 0,0,1 };   //矢量方向
    tag_t cy2TAG = NULL_TAG;   ////圆柱特征
    UF_MODL_create_cyl1(cy2, origin1, H2, D2, v2, &cy2TAG);

    //cy2TAG是特征,下面获取特征的体  
    tag_t tagBody = NULL_TAG;
    UF_MODL_ask_feat_body(cy2TAG, &tagBody);

    vector<tag_t> vecEdge;
    getBodyEdges(tagBody, 0,&vecEdge);

    uf_list_p_t list1 = NULL;//定义链表
    UF_MODL_create_list(&list1);  //创建链表
    for (int i = 0; i < vecEdge.size(); i++)
    {
        UF_MODL_put_list_item(list1, vecEdge[i]);
    }
    //------------------------------------------
    //倒角的边都在list1里面了,下面开始倒角,倒角0.2吧

    //创建倒角
    //(倒角类型:1==单个偏置,2==双偏置,3==偏置角度,4=自由曲面单偏置,5=自由曲面双偏置)
    //第一偏置距离
    //第二偏置距离
    //倒角角度
    tag_t ChamferTag;
    UF_MODL_create_chamfer(1, "0.2", "0", "45", list1, &ChamferTag);
    //------------------------------------------
    UF_free(list1);
    list1 = NULL;

    UF_terminate();
}
extern int ufusr_ask_unload(void)
{
    return (UF_UNLOAD_IMMEDIATELY);
}

 


喜欢 (0)