首先声明: 这个不是我第一个研究出来的,在我的印象中唐工是第一个搞出来的。 他的论坛上曾经发布过一张动态图片。 后来我又陆续看到汤大哥和小强哥也搞出来过。 汤大哥还在QQ群里发出来过一套他做好的头文件和动态链接库,更加方便的去调用内部函数了。 我下面的这个例子基本上就是从汤大哥发出的库文件那里截取的,我又重新做了下整理,要不然我也不知道要调哪个内部函数,传哪些参数。 这些年一直都是跟在这些大神的身后,学习他们研究过了的技术。自己很少有原创和创新的东西。 也许是能力的不足,也许是时间还没到吧。 这个在低版本使用应该也是可以的,但是原封不动的代码抄下来拿到低版本代码里编译应该是不行的, 好像是需要重新去定义PVT_view_prefs_s,PVT_cancel_type这些的,低版本好像不是这样写的。 用的时候测试一下就知道行不行了。 内部函数的出处 用depends.exe查看NXBIN(NX11以下为UGII)目录下的libugutilsint.dll,找到函数的命名和定义
NX11+VS2013 #include <uf.h> #include <uf_view.h> #include <uf_assem.h> UF_initialize(); //创建预览对话框 //libugutilsint.dll //调内部函数PVT_create_preview创建预览对话框 typedef void(*load_ufusr_f_p_t)(unsigned int v1, char const * v2, int v3, unsigned int const * v4, int v5, unsigned int const * v6, bool v7, bool v8, class PVT_view_prefs_s * const v9, enum PVT_cancel_type v10, bool v11, int * v12);//定义传参 load_ufusr_f_p_t PVT_create_preview = NULL; UF_load_library("C:\\Program Files\\Siemens\\NX 11.0\\NXBIN\\libugutilsint.dll", "?PVT_create_preview@@YAPEAUPVT_view_info_s@@IPEBDHPEBIH1_N2QEAUPVT_view_prefs_s@@W4PVT_cancel_type@@2PEAH@Z", (UF_load_f_p_t *)&PVT_create_preview); //调内部函数PVT_init_view_preferences初始化预览参数 typedef void(*load_ufusr_f_p_t1)(class PVT_view_prefs_s * v1);//定义传参 load_ufusr_f_p_t1 PVT_init_view_preferences = NULL; UF_load_library("C:\\Program Files\\Siemens\\NX 11.0\\NXBIN\\libugutilsint.dll", "?PVT_init_view_preferences@@YAXPEAUPVT_view_prefs_s@@@Z", (UF_load_f_p_t *)&PVT_init_view_preferences); if (PVT_create_preview != NULL) { //获得当前工作部件tag tag_t work_part = UF_ASSEM_ask_work_part(); //由模型视图名字得到tag tag_t view_tag = NULL_TAG; int err = UF_VIEW_ask_tag_of_view_name("TFR_ISO", &view_tag); err = sizeof(PVT_view_prefs_s*); PVT_view_prefs_s* view_pref = (PVT_view_prefs_s*)malloc(1000);// memset(view_pref, 0, 1000); if (PVT_init_view_preferences != NULL) { //初始化预览参数 PVT_init_view_preferences(view_pref); int errorCode = 0; PVT_create_preview(view_tag, "", 1, &work_part, 0, NULL, false, true, view_pref, PVT_cancel_type(1), true, &errorCode); } } UF_terminate();