NX二次开发-调内部函数PVT_create_preview添加装配预览窗口

  • 首先声明:

这个不是我第一个研究出来的,在我的印象中唐工是第一个搞出来的。

他的论坛上曾经发布过一张动态图片。

后来我又陆续看到汤大哥和小强哥也搞出来过。

汤大哥还在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();

阿飞
2021年6月8日
  • 演示

阿飞

2021年6月8日

作者: 阿飞

出处: https://www.cnblogs.com/nxopen2018/>

关于作者:专注NX开发、VC++开发、数据库、三维建模领域,请多多赐教!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可留言(博客文章底部留言)咨询.

原文地址:https://www.cnblogs.com/nxopen2018/p/14861961.html