NX CAM二次开发--简单零件的加工刀路自生成

/*****************************************************************************
**
** NXOpen_Wizard19.c
**
** Description:
**     Contains Unigraphics entry points for the application.
**
*****************************************************************************/

/* Include files */
#include <stdarg.h>
#include <stdio.h>
#include <uf.h>
#include <uf_ui_types.h>
#include <uf_ui.h>
#include <uf_assem.h>
#include <uf_ncgroup.h>
#include <uf_setup.h>
#include <uf_ui_ont.h>
#include <uf_obj.h>
#include <uf_oper.h>
#include <uf_param.h>
#include <uf_param_indices.h>
#include <uf_cutter.h>
#include <uf_camgeom.h>
#include <uf_obj.h>
#include <uf_modl.h>
static void ECHO(char *format, ...)
{
    char msg[UF_UI_MAX_STRING_BUFSIZE];
    va_list args;
    va_start(args, format);
    vsnprintf_s(msg, sizeof(msg), _TRUNCATE, format, args);
    va_end(args);
    UF_UI_open_listing_window();
    UF_UI_write_listing_window(msg);
    UF_print_syslog(msg, FALSE);
}

#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))

static int report_error( char *file, int line, char *call, int irc)
{
    if (irc)
    {
        char err[133];

        UF_get_fail_message(irc, err);
        ECHO("*** ERROR code %d at line %d in %s:\n",
            irc, line, file);
        ECHO("+++ %s\n", err);
        ECHO("%s;\n", call);
    }

    return(irc);
}


/*****************************************************************************
**  Activation Methods
*****************************************************************************/
/*  Explicit Activation
**      This entry point is used to activate the application explicitly, as in
**      "File->Execute UG/Open->User Function..." */
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
{
    /* Initialize the API environment */
    if( UF_CALL(UF_initialize()) ) 
    {
        /* Failed to initialize */
        return;
    }
    
    /* TODO: Add your application code here */

    //创建加工设置
    UF_SETUP_create(UF_ASSEM_ask_work_part(), "mill_planar");

    //获取当前NX的加工设置TAG
    tag_t setup_tag = NULL_TAG;
    UF_SETUP_ask_setup(&setup_tag);
    if (setup_tag == NULL_TAG)
    {
        uc1601("提示:请先初始化加工环境!", 1);
        return;
    }

    //获取几何视图的根节点
    tag_t geom_group = NULL_TAG;
    UF_SETUP_ask_geom_root(setup_tag, &geom_group);

    //创建加工坐标系
    tag_t mcsTag = NULL_TAG;
    UF_NCGEOM_create("mill_planar", "MCS", &mcsTag);

    //添加成员
    UF_NCGROUP_accept_member(geom_group, mcsTag);

    //修改加工坐标系的名称
    UF_OBJ_set_name(mcsTag, "MyMCS");

    //创建几何体
    tag_t workpieceTag = NULL_TAG;
    UF_NCGEOM_create("mill_planar", "WORKPIECE", &workpieceTag);

    //添加workpiece到加工坐标系下
    UF_NCGROUP_accept_member(mcsTag, workpieceTag);

    //修改workpiece的名称
    UF_OBJ_set_name(workpieceTag, "MyWorkPiece");

    
    //获取程序视图的根节点
    tag_t prog_group = NULL_TAG;
    UF_SETUP_ask_program_root(setup_tag, &prog_group);

    //创建操作
    tag_t operTag = NULL_TAG;

    UF_OPER_create("mill_contour", "CAVITY_MILL", &operTag);

    //添加工序操作到程序组
    UF_NCGROUP_accept_member(prog_group, operTag);

    //修改加工坐标系的名称
    UF_OBJ_set_name(operTag, "Myoper");

    //创建新刀具,获取新刀具的Tag
    tag_t  NewToolObject = null_tag;
    UF_CUTTER_create("mill_planar", "Mill", &NewToolObject);

    //设定刀具名称
    const char * ToolName = "D10";
    UF_OBJ_set_name(NewToolObject, ToolName);

    //以下设置刀具的直径、总长、锥度、刀具号、旋转方向、刀柄等参数

    //设置刀具的直径
    UF_PARAM_set_double_value(NewToolObject, UF_PARAM_TL_DIAMETER, 10);

    //设置刀具的总长
    UF_PARAM_set_double_value(NewToolObject, UF_PARAM_TL_HEIGHT, 100.0);

    //设置刀具的刃长
    UF_PARAM_set_double_value(NewToolObject, UF_PARAM_TL_FLUTE_LN, 50.0);
    
    tag_t ToolRootGroup = null_tag;
    UF_SETUP_ask_mct_root(setup_tag, &ToolRootGroup);

    UF_NCGROUP_accept_member(ToolRootGroup, NewToolObject);

//添加工序操作的对应参数

    //将几何和刀具添加到操作中
       UF_NCGROUP_accept_member(workpieceTag, operTag);
    UF_NCGROUP_accept_member(NewToolObject, operTag);
     /*_NCGROUP_accept_member(programGroupName, operTag);*/

    //创建工件
    UF_FEATURE_SIGN sign1;
    tag_t block_tag;
    block_tag = NULL_TAG;
    tag_t body_tag = NULL_TAG;
    double corner_point1[3] = { 0.0, 0.0, 0.0 };
    char* edge_len[3] = { "200.0", "100.0","100.0" };
    sign1 = UF_NULLSIGN;
    tag_t blk_tag1 = NULL_TAG; 
    //创建块
    UF_MODL_create_block(sign1, block_tag, corner_point1, edge_len, &blk_tag1); // 不再需要取地址符号    
    UF_MODL_ask_feat_body(blk_tag1, &body_tag);//获得块的标识号,通过特征获得

     //创建毛坯
    
    tag_t block_tag1;
    block_tag1 = NULL_TAG;
    tag_t body_tag1 = NULL_TAG;
    
    char* edge_len1[3] = { "200.0", "100.0","120.0" };
    sign1 = UF_NULLSIGN;
    tag_t blk_tag11 = NULL_TAG;
    //创建块
    UF_MODL_create_block(sign1, block_tag1, corner_point1, edge_len1, &blk_tag11); // 不再需要取地址符号


    UF_MODL_ask_feat_body(blk_tag11, &body_tag1);//获得块的标识号,通过特征获得


    tag_t objects[1] = { NULL_TAG };
     
     //设置工件
    tag_t part_list[1] = { body_tag };
    UF_CAMGEOM_append_items(workpieceTag, UF_CAM_part, 1, part_list, NULL);

    //设置毛坯
    tag_t blank_list[1] = { body_tag1 };
    UF_CAMGEOM_append_items(workpieceTag, UF_CAM_blank, 1, blank_list, NULL);

    //生成程序
    logical generated;
     UF_PARAM_generate(operTag, &generated);


    //刷新加工导航器
    UF_UI_ONT_refresh();

    
    


    /* Terminate the API environment */
    UF_CALL(UF_terminate());
}

/*****************************************************************************
**  Utilities
*****************************************************************************/

/* Unload Handler
**     This function specifies when to unload your application from Unigraphics.
**     If your application registers a callback (from a MenuScript item or a
**     User Defined Object for example), this function MUST return
**     "UF_UNLOAD_UG_TERMINATE". */
extern int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_IMMEDIATELY );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值