本文基于 3DE(CATIA V6)平台介绍使用 Visual Studio 创建 CAA 项目基本步骤。
目录
1、准备工作
- 安装 3DE 客户端(Native Apps)
- 安装 CAA 开发包(API For Native Apps Development)
- 安装 CAA 开发工具(Native Apps Development Toolset)
- 安装客户端补丁包(Fix Pack),非必须安装
- 安装开发包补丁包(Fix Pack),与客户端一致
- 安装开发工具补丁包Fix Pack),与客户端一致
- 安装对应版本 Visual Studio
- 安装对应版本 Visual Studio 扩展(3DSOpenNativeAppsExt2019.vsix)
- 配置开发许可(SDV - Applications Developer)
2、创建项目
2.1 设置 Visual Studio
打开 Visual Studio ,选择“继续但无需代码”:
点击 工具 - 选项 - 3DEXPERIENCE,设置 TCK 路径、启动程序、编译选项等:
2.2 新建 Workspace
点击 文件 - 打开 - 3DS Workspace... :
设置 Location 和 Tool level ,然后点击 Open :
2.3 新建 Framework
右键单击 CAATest(Workspace),然后点击 New Framework... :
输入 Framework 名称(如:TestFrame),选择 Type ,然后点击 Finish :
2.4 新建 Module
右键单击 TestFrame(Framework),然后点击 New Module... :
输入 Module 名称(如:TestMdl),选择 Type 和 exposition ,然后点击 Finish :
2.5 将 Framework 添加到解决方案
右键单击 TestFrame(Framework),然后点击 Add All to Solution :
2.6 添加工作空间依赖
右键单击 CAATest(Workspace),然后点击 Prerequisites... :
选择 CAA 开发包安装路径:
2.7 新建 Component
右键单击解决方案的 TestMdl.m(Module),然后点击 添加 - 新建项 :
在 3DS Templates 中选择 C++ ,再选中 Component ,输入 Component 名称(如 TestAddin),然后点击添加:
设置 exposition 和组件类型,然后点击 Next :
为 Component 添加 TIE 接口(CATIAfrGeneralWksAddin):
完成后解决方案中可以看到 Component 的头文件和源文件:
2.8 编写 Component 头文件
编辑 TestAddin.h 文件,添加以下前向声明:
class CATCmdContainer;
并在 public 域添加以下函数声明:
void CreateCommands();
CATCmdContainer* CreateToolbars();
完成后如下图(不用管波浪线错误警告,编译成功并刷新后会自动消失):
2.9 编写 Component 源文件
编辑 TestAddin.cpp 文件,包含以下文件:
#include "CATAfrCommandHeader.h"
#include "CATCreateWorkshop.h"
添加以下函数定义:
void TestAddin::CreateCommands()
{
CATAfrCommandHeader::CATCreateCommandHeader(
"TestCommand",
"TestMdl",
"TestCommandCmd",
(void*)NULL,
"TestAddinHeader",
CATFrmAvailable);
}
CATCmdContainer* TestAddin::CreateToolbars()
{
NewAccess(CATCmdContainer, pTestSection, TestSection);
NewAccess(CATCmdContainer, pTestToolBar, TestToolBar);
SetAccessChild(pTestSection, pTestToolBar);
NewAccess(CATCmdStarter, pTestCommandCmd, TestCommandCmd);
SetAccessCommand(pTestCommandCmd, "TestCommand");
SetAccessChild(pTestToolBar, pTestCommandCmd);
return pTestSection;
}
完成后如下图:
2.10 新建 CATStateCommand
右键单击解决方案的 TestMdl.m(Module),然后点击 添加 - 新建项 :
在 3DS Templates 中选择 C++ ,再选中 CATStateCommand,输入名称(如 TestCommandCmd),然后点击添加:
提示修改 command 名称,直接点击 Finish :
右键单击 TestFrame(Framework),然后点击 Refresh Solution:
完成后解决方案中可以看到 CATStateCommand 的头文件和源文件:
2.11 编写 CATStateCommand 头文件
编辑 TestCommandCmd.h 文件,添加函数声明、添加前向声明、包含必要的头文件。
向导生成的默认文件已经包含必要的内容,这里我们不再添加。
2.12 编写 CATStateCommand 源文件
编辑 TestCommandCmd.cpp 文件,包含以下文件:
#include <iostream>
在 ActionOne 函数内添加以下内容:
std::cout << "Hello World" << std::endl;
完成后如下图:
2.13 新建资源文件
打开 CAATest(Workspace)所在目录,进入 TestFrame 目录:
创建目录 CNext\resources\graphic\icons\normal ,在 normal 文件夹中添加一个 32 x 32 像素的 png 图片文件用作命令图标,修改文件名称为 I_TestCommand.png ,如图:
创建目录 CNext\resources\msgcatalog\Simplified_Chinese(msgcatalog 用于放置英文用户界面的资源文件夹,Simplified_Chinese 用于放置中文用户界面的资源),在 msgcatalog 文件夹新建三个文件,并分别修改名称为:
- TestAddin.CATNls
- TestAddinHeader.CATNls
- TestAddinHeader.CATRsc
2.14 修改资源文件
在 Visual Studio 中刷新解决方案(参考 2.10 步骤),刷新后解决方案中可以看到新建的资源文件:
编辑 TestAddin.CATNls 文件,添加以下内容:
<meta charset="UTF-8"/>
TestSection.Title="测试";
编辑 TestAddinHeader.CATNls 文件,添加以下内容:
<meta charset="UTF-8"/>
TestAddinHeader.TestCommand.Title="测试命令";
TestAddinHeader.TestCommand.ShortHelp="测试命令";
TestAddinHeader.TestCommand.Help="测试命令";
TestAddinHeader.TestCommand.LongHelp="测试命令";
编辑 TestAddinHeader.CATRsc 文件,添加以下内容:
TestAddinHeader.TestCommand.Icon.Normal="I_TestCommand";
2.15 添加框架依赖
右键单击 TestFrame(Framework),然后点击 Edit Id Card :
右键单击 codeFramework ,点击 Add children - prerequisite :
展开 codeFramework ,选中 prerequisite ,填写依赖框架的 name、access 等信息并保存:
完成后打开 TestFrame 下的 IdentityCard.xml 文件如下:
继续添加其他框架依赖,最终如下所示:
<?xml version="1.0" encoding="iso-8859-1"?>
<codeFramework xmlns="http://www.3ds.ic" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.3ds.ic ICModel.xsd">
<prerequisite name="AfrFoundation" access="Public" expose="ExposePrereq" />
<prerequisite name="AfrInterfaces" access="Public" expose="ExposePrereq" />
<prerequisite name="DialogEngine" access="Public" expose="ExposePrereq" />
<prerequisite name="Mathematics" access="Public" expose="ExposePrereq" />
<prerequisite name="SpecialAPI" access="Public" expose="ExposePrereq" />
<prerequisite name="System" access="Public" expose="ExposePrereq" />
<prerequisite name="SystemTS" access="Public" expose="ExposePrereq" />
</codeFramework>
2.16 添加模块依赖
打开 TestMdl 下的 Imakefile.mk 文件,添加以下模块依赖:
#INSERTION ZONE NOT FOUND, MOVE AND APPEND THIS VARIABLE IN YOUR LINK STATEMENT
LINK_WITH = $(WIZARD_LINK_MODULES)
# DO NOT EDIT :: 3DS WIZARDS WILL ADD CODE HERE
WIZARD_LINK_MODULES = JS0FM \
JS0GROUP CATAfrFoundation CATAfrItf CATDialogEngine CATMathematics
# END WIZARD EDITION ZONE
2.17 编译项目
右键单击 CAATest(Workspace),然后点击 Build - Build all with mkmk :
弹出编译选项,按下图勾选,然后点击 Build :
编译完成后关注 MKMK 输出,没有报错即可(无需关注 VS 的错误提示):
2.18 添加用户环境变量
为了观察程序运行效果,需要添加用户环境变量以显示控制台,点击 工具 - 3DS Environment :
勾选 User variables ,然后点击 New :
输入用户变量名称(CNEXTOUTPUT)和值(CONSOLE):
完成后如下图所示:
2.19 运行项目
点击 窗口 - 3DS Windows - Runtime Prompt :
在弹出的 DOS 窗口输入 cnext 启动 3DE :
打开任意 App 即可看到 测试命令 :
执行 测试命令 后可以在控制台看到命令输出:
到此,一个简单的 CAA 项目已经完成啦。如有错漏,欢迎留言指正。