NX二次开发-调内部函数创建进度条MT_create_progress_bar

一、概述

        最近学习NX二次开发,看到NX打开装配模型或者加载模型时会显示进度条的问题,个人觉得很有意思,然后参考阿飞2018中的文章进行学习。

二、代码解析

    //User Defined Header File
    #include <uf.h>
    #include <uf_ui.h>
    #include <uf_modl.h>
    #include <uf_view.h>
    #include <atlstr.h>


    //User Defined code
    UF_initialize();

	//加载
	char *library_name = "D:\\ug\\NXBIN\\libdisp.dll";
	//调内部函数 创建进度条
	typedef void(*create_progress_bar)(int v1, bool v2, long *v3);//定义传参
	create_progress_bar MT_create_progress_bar = NULL;
	UF_load_library(library_name, "?MT_create_progress_bar@@YA_NH_NPEAJ@Z", (UF_load_f_p_t *)&MT_create_progress_bar);

	//调内部函数 设置进度条的当前位置
	typedef void(*set_progress_pos)(long *v1, int v2);//定义传参
	set_progress_pos MT_set_progress_pos = NULL;
	UF_load_library(library_name, "?MT_set_progress_pos@@YAXPEAJH@Z", (UF_load_f_p_t *)&MT_set_progress_pos);

	//调内部函数 显示进度条
	typedef void(*show_progress_bar)(long *v1);//定义传参
	show_progress_bar MT_show_progress_bar = NULL;
	UF_load_library(library_name, "?MT_show_progress_bar@@YAXPEAJ@Z", (UF_load_f_p_t *)&MT_show_progress_bar);

	//调内部函数 设置进度条的起始值和终止值
	typedef void(*set_progress_range)(long *v1, int v2, int v3);//定义传参
	set_progress_range MT_set_progress_range = NULL;
	UF_load_library(library_name, "?MT_set_progress_range@@YAXPEAJHH@Z", (UF_load_f_p_t *)&MT_set_progress_range);

	//调内部函数 获得提示环境句柄(输出long*指针)
	typedef __int64(*ask_progress_cue_context)(void);//定义传参
	ask_progress_cue_context MT_ask_progress_cue_context = NULL;
	UF_load_library(library_name, "?MT_ask_progress_cue_context@@YAHXZ", (UF_load_f_p_t *)&MT_ask_progress_cue_context);

	//调内部函数 删除进度条
	typedef __int64(*delete_progress_bar)(long *v1);//定义传参
	delete_progress_bar MT_delete_progress_bar = NULL;
	UF_load_library(library_name, "?MT_delete_progress_bar@@YAXPEAJ@Z", (UF_load_f_p_t *)&MT_delete_progress_bar);

	//调内部函数 进度条显示文本
	typedef __int64(*set_progress_text)(long *v1, char *v2, bool v3);//定义传参
	set_progress_text MT_set_progress_text = NULL;
	UF_load_library(library_name, "?MT_set_progress_text@@YAXPEAJPEAD_N@Z", (UF_load_f_p_t *)&MT_set_progress_text);


	if (MT_ask_progress_cue_context == NULL || MT_create_progress_bar == NULL || MT_show_progress_bar == NULL
		|| MT_set_progress_text == NULL || MT_set_progress_range == NULL || MT_set_progress_pos == NULL
		|| MT_delete_progress_bar == NULL)
	{
		uc1601("温馨提示:请仔细检查,存在错误", 1);
		return;
	}

	//获得提示环境句柄(输出long*指针)
	__int64 cc = MT_ask_progress_cue_context();

	//创建进度条
	long aa = 0;
	MT_create_progress_bar(cc, true, &aa);//true和false控制是否显示百分比数字

										  //显示进度条
	MT_show_progress_bar(&aa);

	//进度条显示文本
	MT_set_progress_text(&aa, "Loading progress prompt", true);//此处用中文不显示

										  //设置进度条的起始值和终止值
	int num = 100;
	MT_set_progress_range(&aa, 0, num);

	for (int i = 0; i < num; i++)
	{
		//在NX状态区显示一行文本
		UF_UI_set_status("白雪公主的后妈");

		//创建块
		UF_FEATURE_SIGN Sign = UF_NULLSIGN;//设置布尔
		double Corner_pt[3] = { i * 150, 0.0, 0.0 };//设置原点
		char *Edge_Len[3] = { "100", "100", "100" };//设置长宽高
		tag_t BlkTag = NULL_TAG;
		UF_MODL_create_block1(Sign, Corner_pt, Edge_Len, &BlkTag);

		//设置进度条的当前位置
		MT_set_progress_pos(&aa, i);
	}

	//删除进度条
	MT_delete_progress_bar(&aa);

	//获得工作视图的tag
	tag_t work_view = NULL_TAG;
	UF_VIEW_ask_work_view(&work_view);

	//适合窗口
	UF_VIEW_fit_view(work_view, 1.0);

	//在NX状态区显示一行文本
	UF_UI_set_status("白雪公主的后妈提示:创建完成");

	//卸载
	UF_unload_library(library_name);

	UF_terminate();

三、效果展示

上一篇:MCGS学习——用户管理


下一篇:学习java第二十二天