美文网首页
UG二次开发学习笔记—编程环境搭建

UG二次开发学习笔记—编程环境搭建

作者: earthwjl | 来源:发表于2018-04-30 14:43 被阅读0次

    说明

    本文介绍了使用UFun和NXOpen C++进行UG NX二次开发的环境配置,并提供几个例子介绍NX二次开发的特点,帮助新手更快地上手UG NX二次开发

    准备工作

    UG NX10.0,Visual Studio2015

    配置环境变量

    1. 在...Siemens\NX10.0目录下新建一个文件夹,取名为MYPROGRAM,以保存自己以后写的程序。例如,我的是在E:\Program Files\Siemens\NX 10.0


      UG目录下新建文件夹

      在此文件夹下再次新建两个文件夹,分别为Startup和Application。Startup文件夹用来存放菜单文件,Application文件夹用来存放动态链接库文件

    2. 在Startup文件夹下新建一个文本文件,命名为menu.men,这里要注意更改扩展名为.men。使用记事本打开此文件,写入以下内容,保存
    VERSION 170
    EDIT UG_GATEWAY_MAIN_MENUBAR
    
    AFTER UG_HELP
    CASCADE_BUTTON MyTools
    LABEL 我的工具
    END_OF_AFTER
    
    MENU MyTools
        BUTTON button1
        LABEL 按钮1
        BITMAP select_edge
        ACTIONS
    END_OF_MENU
    
    1. 在...Siemens\NX10.0\UGII\menus目录下找到custom_dirs.dat文件,用记事本打开,在文件的末尾添加以下代码:
    UGII_USER_DIR = E:\Program Files\Siemens\NX 10.0\MYPROGRAM 
    
    软件环境变量
    1. 在系统环境变量中新建环境变量,变量名是UGII_USER_DIR,值是E:\Program Files\Siemens\NX 10.0\MYPROGRAM

      系统环境变量
      经过此步后,打开UG,可在菜单下发现我们创建的菜单
      菜单栏
    2. 在Startup文件夹下新建tool_bar.rtb文件,写入以下内容

    TITLE MyTools
    VERSION 170
    DOCK TOP
    
    BUTTON button1
    

    经过此步后,打开UG,能够在顶部的选项卡上看到我们的按钮一


    选项卡
    1. 在上面对按钮的定义中,由于没有为按钮注册功能,所以在点击按钮时会有未注册功能的提示。按钮图标也是选取的UG本身的图标,UG所有的图标都有对应的名字,想使用哪个图标,只需在BITMAP 后填上图标的名字即可显示。在UG界面中,按下Ctrl+1,进入自定义模式,此时,在想要的图标上点右键,选择更改图标,再点击图标名称,即可看到图标名字


      查看图标名称

    设置IDE

    1. 将E:\Program Files\Siemens\NX 10.0\UGOPEN\vs_files下有三个文件夹,分别是VB、VC、VC#,将这三个文件夹全部复制到VS的安装目录中,与VS安装目录下的VB、VC、VC#文件夹合并。
    2. 在VS的安装目录下,进入...VC\vcprojects目录下,以管理员身份使用记事本打开NX10_NXOpenCPP.vsz文件,将里面的VS版本号改为14.0


    同理,分别把...VC\vcprojects下的NX10_Open.vsz、...VB\VBProjects下的NX10_VB.vsz、...VC#\CSharpProjects下的NX10_VCS.vsz文件中的VS版本号改为14.0

    修改完成后,打开VS,新建项目,会出现NX二次开发的模板,以后进行二次开发时,直接使用模板创建项目


    无界面模式开发

    以在坐标原点创建直径为100的球为例

    1. 新建NXOpenCPP项目,出现向导界面,无特殊要求的话直接点击完成
    2. 在生成的cpp文件中添加头文件uf_modl_primitives.h,在do_it函数内添加如下代码
    void MyClass::do_it()
    {
        // TODO: add your code here
        UF_initialize();
        double  center[3] = { 0.0,0.0,0.0 };
        char* diameter = "100";
        tag_t sphere = NULL_TAG;
        UF_MODL_create_sphere1(UF_NULLSIGN, center, diameter, &sphere); 
        UF_terminate();
    }
    

    点击生成->生成XXX(XXX为你的项目名),在项目的目录下能够得到生成的DLL文件,在建模状态下,可按下Ctrl+U,选中自己的DLL文件并打开,即可看到效果,现在我们把它加到按钮上

    在UG安装目录下,找到我们之前创建的MYPROGRAM文件夹,打开里面的menu.men文件,把之前的进行修改

    VERSION 170
    EDIT UG_GATEWAY_MAIN_MENUBAR
    
    AFTER UG_HELP
    CASCADE_BUTTON MyTools
    LABEL 我的工具
    END_OF_AFTER
    
    MENU MyTools
        BUTTON create_sphere
        LABEL 创建球
        BITMAP sphere
        ACTIONS NX10_NXOpenCPP_Wizard1.dll
    END_OF_MENU
    

    同时对rtb文件进行相应的修改



    将生成的动态链接库文件复制到Application文件夹中

    此时,打开UG,进入建模界面,可以看到我们做的按钮的图标和名字都已改变,点击按钮,将会在原点创建一个直径为100的球

    有界面模式开发

    UG二次开发的界面是使用UG自带的Block UI STyler进行设计的,在UG界面下,点击开发人员选项卡,最右侧就是Block UI STyler按钮,点击进入BlockUI设计界面
    仍以创建球为例,这次我们做一个界面,允许用户选择球心和直径
    我们需要两个控件,一个是点拾取器,一个是指定直径的控件,双击左侧Selection下的Specify Point,就会产生一个带点拾取器的对话框,再双击Numbers下的expression,得到一个尺寸输入器,在右侧的属性管理器中修改相关控件的Label,并对直径的值进行限定,得到如图结果


    界面设计

    点击属性框中的CodeGeneration,选择生成代码为C++,然后保存,系统会自动生成dlx文件、cpp文件和hpp文件


    将生成的3个文件保存到代码目录下,在VS中删除原来创建球的代码,将生成的cpp和hpp文件添加到解决方案中,将dlx文件复制到MYPROGRAM\Application文件夹中。

    在hpp中添加头文件uf_modl_primitives.h,在cpp文件中的apply_cb函数中写入以下代码:

    int CreateSphere::apply_cb()
    {
        int errorCode = 0;
        try
        {
            //---- Enter your callback code here -----
            //从控件处获取参数
            UF_initialize();
            Point3d centerPoint = center->Point();
            double diameter = expression0->Value();
            //将参数转化
            double centerP[3];
            centerP[0] = centerPoint.X;
            centerP[1] = centerPoint.Y;
            centerP[2] = centerPoint.Z;
    
            char diam[256];
            sprintf(diam, "%lf", diameter);
            tag_t sphere;
            UF_MODL_create_sphere1(UF_NULLSIGN, centerP, diam, &sphere);
            UF_terminate();
        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            errorCode = 1;
            CreateSphere::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }
        return errorCode;
    }
    

    将生成的dll文件复制到Application文件夹下,球的创建功能完成。打开UG,点击我们制作的按钮,将会弹出我们做的对话框,选择参数后,就能够生成球体。

    Tips

    • UG中的每一个特征、对象都有自己的编号,即tag,可以通过tag访问特征的参数,创建特征后往往返回的是tag,tag在UG二次开发中非常重要。在...Siemens\NX10.0\UGII目录下,有个文件为ugii_env_ug.dat,将它用记事本打开,在末尾填上UGII_DISPLAY_DEBUG = 1,保存并关闭,重启UG,在菜单->帮助的最后将会出现调试选项,继续选择调试->调试工具->走刀(Tranverse),点击后将会出现一个窗口,这时点击任何特征,能够看到这个特征的相关属性和tag值,方便我们进行开发。
    • UG二次开发涉及到很多指针操作,在使用指针时一定要注意对指针申请空间,避免野指针的出现。
    • 可使用NXOpen::NXObjectManager::Get(tag_t Tag)函数将UFun对象转换成NXOpen对象,注意使用dynamic_cast时,转换失败会返回空指针,注意检查
    • 经常查UG提供的函数文档,弄清楚参数的作用

    在学习UG二次开发的过程中,感谢学长、老师、和技术大神的帮助,他们让我少走了许多弯路,为我解决了不少麻烦,也感谢网络上网友们的热情奉献

    相关文章

      网友评论

          本文标题:UG二次开发学习笔记—编程环境搭建

          本文链接:https://www.haomeiwen.com/subject/gpdzlftx.html