zoukankan      html  css  js  c++  java
  • 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++开发、数据库、三维建模领域,请多多赐教!

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

  • 相关阅读:
    中位数相关
    带权并查集
    组合数相关、多重集组合数
    LIS最长上升子序列
    提高你css技能的css开发技巧
    如何让搜索引擎抓取AJAX内容?
    Javascript异步编程的4种方法
    前端自动化构建工具gulp
    前端自动化构建工具
    git使用
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14861961.html
Copyright © 2011-2022 走看看