版本

NX9+VS2012

1.怎么往VS软件里添加VC,C#,VB向导模板

先到NX安装目录下UGOPEN文件夹里找到这三个文件夹

拷贝到VS的安装目录下

这里有几个注意事项,VS2017,VS2019以下的版本这样操作没问题,

VS2017和VS2019微软调整了VC文件夹的目录,换位置了,所以你加过去发现打开VS里面没有C++的向导模板。

去你的VS2017或者VS2019安装目录下找到\Common7\IDE文件夹目录,把VC向导模板放进去。

下面我们新建项目,使用NX向导模板

两个向导模板使用哪个都可以的,

向导模板是为我们提供的一个现成的NX二次开发模板框架,有C++模板,C模板,C#模板,VB模板,开发环境都是自动配置好的,可直接调用UFUN和NXOPEN,省去了我们自己配置开发环境的时间,

我还发现从NX1980开始,UGOPEN目录里还加入了开发向导的差劲,不需要手动在考文件了,直接双击插件,就可直接安装开发向导。

插件就是和这种VS外挂插件一样

放一张我之前安装NX1980的时候截的图,现在已经卸载掉了。

一组新旧对比图片

在放一张西门子官网的介绍说明

有点类似微软基础类库MFC,除了是一个C++类库外,还提供一个应用程序框架。给开发者使用。

这里有几个要注意的事项,在NX8.5和NX9中,不安装大补丁小布丁,默认应该是没有NXOPENCPP向导模板的,

一定要安装补丁才会有NXOPENCPP的向导模板,NX8.5以下的版本,我就不知道有没有NXOPENCPP模板了,没用过。

不过没用的话,自己手动也能改个出来的,向导模板里的内容也可以自己更改。https://www.cnblogs.com/nxopen2018/p/15221264.html

回到正题,我们选择向导模板,进入项目

先选NXOPENCPP项目模板,这是一个用C++类面向对象方式的一个模板

默认下一步

编译成功,这就是一个C++的模板框架

//NX9_NXOpenCPP_Wizard7

// Mandatory UF Includes
#include <uf.h>
#include <uf_object_types.h> // Internal Includes
#include <NXOpen/ListingWindow.hxx>
#include <NXOpen/NXMessageBox.hxx>
#include <NXOpen/UI.hxx> // Internal+External Includes
#include <NXOpen/Annotations.hxx>
#include <NXOpen/Assemblies_Component.hxx>
#include <NXOpen/Assemblies_ComponentAssembly.hxx>
#include <NXOpen/Body.hxx>
#include <NXOpen/BodyCollection.hxx>
#include <NXOpen/Face.hxx>
#include <NXOpen/Line.hxx>
#include <NXOpen/NXException.hxx>
#include <NXOpen/NXObject.hxx>
#include <NXOpen/Part.hxx>
#include <NXOpen/PartCollection.hxx>
#include <NXOpen/Session.hxx> // Std C++ Includes
#include <iostream>
#include <sstream> using namespace NXOpen;
using std::string;
using std::exception;
using std::stringstream;
using std::endl;
using std::cout;
using std::cerr; //------------------------------------------------------------------------------
// NXOpen c++ test class
//------------------------------------------------------------------------------
class MyClass
{
// class members
public:
static Session *theSession;
static UI *theUI; MyClass();
~MyClass(); void do_it();
void print(const NXString &);
void print(const string &);
void print(const char*); private:
Part *workPart, *displayPart;
NXMessageBox *mb;
ListingWindow *lw;
LogFile *lf;
}; //------------------------------------------------------------------------------
// Initialize static variables
//------------------------------------------------------------------------------
Session *(MyClass::theSession) = NULL;
UI *(MyClass::theUI) = NULL; //------------------------------------------------------------------------------
// Constructor
//------------------------------------------------------------------------------
MyClass::MyClass()
{ // Initialize the NX Open C++ API environment
MyClass::theSession = NXOpen::Session::GetSession();
MyClass::theUI = UI::GetUI();
mb = theUI->NXMessageBox();
lw = theSession->ListingWindow();
lf = theSession->LogFile(); workPart = theSession->Parts()->Work();
displayPart = theSession->Parts()->Display(); } //------------------------------------------------------------------------------
// Destructor
//------------------------------------------------------------------------------
MyClass::~MyClass()
{
} //------------------------------------------------------------------------------
// Print string to listing window or stdout
//------------------------------------------------------------------------------
void MyClass::print(const NXString &msg)
{
if(! lw->IsOpen() ) lw->Open();
lw->WriteLine(msg);
}
void MyClass::print(const string &msg)
{
if(! lw->IsOpen() ) lw->Open();
lw->WriteLine(msg);
}
void MyClass::print(const char * msg)
{
if(! lw->IsOpen() ) lw->Open();
lw->WriteLine(msg);
} //------------------------------------------------------------------------------
// Do something
//------------------------------------------------------------------------------
void MyClass::do_it()
{ // TODO: add your code here } //------------------------------------------------------------------------------
// Entry point(s) for unmanaged internal NXOpen C/C++ programs
//------------------------------------------------------------------------------
// Explicit Execution
extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )
{
try
{
// Create NXOpen C++ class instance
MyClass *theMyClass;
theMyClass = new MyClass();
theMyClass->do_it();
delete theMyClass;
}
catch (const NXException& e1)
{
UI::GetUI()->NXMessageBox()->Show("NXException", NXOpen::NXMessageBox::DialogTypeError, e1.Message());
}
catch (const exception& e2)
{
UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what());
}
catch (...)
{
UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, "Unknown Exception.");
}
} //------------------------------------------------------------------------------
// Unload Handler
//------------------------------------------------------------------------------
extern "C" DllExport int ufusr_ask_unload()
{
return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
}

自己的代码写到void MyClass::do_it()里,

演示一下,怎么加代码,怎么ctrl+u执行。

在来看看OPEN C的向导模板。

这里还是选C++吧,我觉得没必要选C了,选C没办法用NXOPEN C++那些,只能用纯C的UFUN。

编译成功

/*****************************************************************************
**
** NX9_Open_Wizard1.cpp
**
** Description:
** Contains Unigraphics entry points for the application.
**
*****************************************************************************/ /* Include files */
#include <stdarg.h>
#include <strstream>
#include <iostream>
using std::ostrstream;
using std::endl;
using std::ends;
using std::cerr;
#include <uf.h>
#include <uf_ui.h>
#include <uf_exit.h> static void ECHO(char *format, ...)
{
char msg[1025];
va_list args;
va_start(args, format);
vsnprintf_s(msg, sizeof(msg), 1024, format, args);
va_end(args);
UF_UI_open_listing_window();
UF_UI_write_listing_window(msg);
UF_print_syslog(msg, FALSE);
} #define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X))) static int report_error( char *file, int line, char *call, int irc)
{
if (irc)
{
char err[133]; UF_get_fail_message(irc, err);
ECHO("*** ERROR code %d at line %d in %s:\n",
irc, line, file);
ECHO("+++ %s\n", err);
ECHO("%s;\n", call);
} return(irc);
} /*****************************************************************************
** Activation Methods
*****************************************************************************/
/* Explicit Activation
** This entry point is used to activate the application explicitly, as in
** "File->Execute UG/Open->User Function..." */
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
{
/* Initialize the API environment */
if( UF_CALL(UF_initialize()) )
{
/* Failed to initialize */
return;
} /* TODO: Add your application code here */ /* Terminate the API environment */
UF_CALL(UF_terminate());
} /*****************************************************************************
** Utilities
*****************************************************************************/ /* Unload Handler
** This function specifies when to unload your application from Unigraphics.
** If your application registers a callback (from a MenuScript item or a
** User Defined Object for example), this function MUST return
** "UF_UNLOAD_UG_TERMINATE". */
extern int ufusr_ask_unload( void )
{
return( UF_UNLOAD_IMMEDIATELY );
}

我们来看看模板的代码,也是可以用C++语言,但是是基于面向过程的。没按面向对象去生成模板。

这个代码写到/* TODO: Add your application code here */就行了,我就不演示了。

至于附加依赖性,附加库目录,预处理,那些就都不用管了,向导自动给设置好了。我们只要专注写代码开发就行了。

结尾到最后,无论哪种项目,建议设置字符集为多字节。

本来还想在写一下怎么查看帮助手册,找UFUN函数和NXOPEN的,但是一看23.26了,有点晚了。

该准备睡觉了,要不然一会又该失眠焦虑症了。一晚上睡不着。怎么查看帮助那部分内容就放到后面单独在开一篇

博客文章。

阿飞

2021年9月2日

NX二次开发-使用NXOPEN C++向导模板做二次开发的更多相关文章

  1. 在做APP前端开发时应注意的一些问题

    在做APP前端开发时应注意的一些问题 在整个app开发流程中,app前端开发是一个必不可少的环节,也是一个在app开发过程中重量级的角色.说到这,那么在app应用的前端开发中,又要注意什么问题呢?一. ...

  2. 百度AI开放平台 UNIT平台开发在线客服 借助百度的人工智能如何开发一个在线客服系统

    这段时间在研究一些人工智能的产品,对比了国内几家做人工智能在线客服的,有些接口是要收费的,有些是免费的,但是做了很多限制,比如每天调用的接口次数限制是100次.后来就找到了百度的AI,大家也知道,目前 ...

  3. NX二次开发-创建NX9 NXOpenCPP Wizard开发向导模板

    这篇文章,我在CSDN,在唐工论坛都发过.http://www.nxopen.cn/forum.php?mod=viewthread&tid=2039&highlight=NX9 博客 ...

  4. Visual Studio 原生开发的10个调试技巧(二)

    原文:Visual Studio 原生开发的10个调试技巧(二) 我以前关于 Visual Studio 调试技巧的文章引起了大家很大的兴趣,以至于我决定分享更多调试的知识.以下的列表中你可以看到写原 ...

  5. 【C#】VS2015开发环境的安装和配置(二)2016-08-03更新

    分类:C#.VS2015.WPF.ASP.NET MVC.Android.iOS.Unity3D: 更新日期:2016-08-03 按下面介绍的步骤安装即可. 一.安装JDK和Android SDK ...

  6. 开发环境配置--Ubuntu+Qt4+OpenCV(二)

    同系列文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV(三 ...

  7. iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

    本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...

  8. iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...

  9. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(2 配置spring-dao和测试)

    用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 搭建目录环境和依赖) 四:在\resources\spring 下面 ...

随机推荐

  1. odoo里面条件写法

    attrs="{'invisible': ['|', ('probability', '>', 0), ('active', '=', True)]}"/>. 写法gt ...

  2. Vmware 虚拟机网络通讯

    VMware Workstation(中文名"威睿工作站")是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发.测试 .部署新的应用程序 ...

  3. Hadoop 3.1.1 - Yarn - 使用 GPU

    在 Yarn 上使用 GPU 前提 目前,Yarn 只支持 Nvidia GPU. YARN NodeManager 所在机器必须预先安装了 Nvidia 驱动器. 如果使用 Docker 作为容器的 ...

  4. 常用的Windows快捷键

    常用的Windows快捷键 关闭触摸板(华硕电脑):Fn+F9 切换窗口:Alt + Tab任务视图:Win + Tab松开键盘界面不会消失 创建新的虚拟桌面:Win + Ctrl + D(新开一个干 ...

  5. Shell-08-文本处理sed

    文本处理sed sed:流编辑器,过滤和替换文本 工作原理:sed命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并且清空模式空间. 然后再将下一行读入模式空间进行处理输出,以此类推,直到最 ...

  6. Golang语言系列-07-函数

    函数 函数的基本概念 package main import ( "fmt" ) // 函数 // 函数存在的意义:函数能够让代码结构更加清晰,更简洁,能够让代码复用 // 函数是 ...

  7. Blind SQL injection:盲注详解

    什么是盲注? 当应用程序易受SQL注入攻击,但其HTTP响应不包含相关SQL查询的结果或任何数据库错误的详细信息时,就会出现盲SQL注入. 对于盲目SQL注入漏洞,许多技术(如联合攻击)都是无效的,因 ...

  8. 从安装到使用——Odoo常见问题及故障处理

    小九今天分享了Odoo一键部署.高效安装的图文详解,接下来,针对Odoo使用过程中的一些问题,小九整理了详细的常见问题问答.这样的直观方式往往能快速高效地解决一些疑惑. 也欢迎提出其他问题,共同探讨, ...

  9. Django ORM记录的增删改查结合web端

    模版语法分配变量 在views.py文件中定义一个视图函数show_data: def show_data(request): # 定义一个字典 并将它展示在前端HTML文件 user_dic = { ...

  10. SpringCloud升级之路2020.0.x版-19.Eureka的服务端设计与配置

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford Eureka Se ...