AutoCAD二次开发(2020版)--4,使用ARX向导创建编程模板(框架)--
AutoCAD二次开发(2020版)–4,使用ARX向导创建编程模板(框架)–
手动创建ObjectARX应用程序非常麻烦,在此步骤中,将介绍ObjectARX向导。
在这里,我们将使用ObjectARX向导创建我们的ObjectARX应用程序。
本节的程序的需求是,接收CAD用户的输入。
首先,打开VS2017,新建项目
在左边的树形目录里依次选择 Visual C++ –> Autodesk
然后在窗口中间选择 ARX/DBX Project For AutoCAD 2020
点击确定
这里可能遇到一些状况导致点击确定后无法进入下一步,
有可能是本教程开头介绍的部件没有完全安装,或者安装过程中路径选择错误,或者安装向导的时候没有使用管理员权限导致的。
如果前面的准备工作一切就绪,那么确定后会弹出这样的窗口来
窗口第一行可输入的内容是注册开发人员符号(RDS),
如果你有的话,就输入你的符号,
如果你不知道这是什么的话,请忽略,这个不影响我们开发程序,只是个标识符。
其它选项我们暂时不需要,可以直接点击完成(Finish)。
当你看到这个场景的时候,恭喜你,编程模板(框架)已经准备好了,我们要写自己的业务和逻辑进去了。
因为ARX开发的方式是,将自己的函数注册给库,指定调用命令就完成了。
CAD加载我们的程序后,用你事先指定的命令,就可以调用对应的函数了。
重点来了,在创建我们自己的函数之前,我们先学习模板里预留给我们的函数。
在acrxEntryPoint.cpp 77行左右,你应该能看到这个函数
static void ADSKMyGroupMyCommand () { // Put your command code here }
这就是一个可以被注册为CAD指令的函数。
函数名其实是两部分组成的,前半段为ADSKMyGroup,后半段为MyCommand。
前半段的意义类似于名字空间,默认是你的RDS符号+MyGroup,实际上可以是任何合法的字符
后半段才是真正的函数名,是你想给函数取的名字。
比如你可以取一个函数名为 static void CloudTestInput(){ }
请注意,修辞是static,返回值是void,参数为空,都是固定的,不能变。
虽然现在函数内部是空的,没有关系,最后一步再来写函数内容,先看文件最下面,找到这一句
ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, ADSKMyGroup, MyCommand, MyCommandLocal, ACRX_CMD_MODAL, NULL)
这是将函数注册为CAD指令的方法。
一共有6个参数。
参数1:程序标识符,使用默认值
参数2:注册函数的前半段名字,也就是刚才说的名字空间
参数3:注册函数的后半段名字,真正意义的函数名
参数3:CAD指令。这是你创建的CAD指令,当在CAD中输入这条指令时就会调用对应的函数。
参数4:模式,暂时使用默认值。
参数5:默认NULL
生成程序,会得到一个后缀为ARX的文件,这就是我们的CAD插件。不过现在这个插件没有任何功能。
我们现在来写函数内容,让这个插件拥有接收用户输入的功能。
注意,ARX要求生成过程中0警告0错误,哪怕有一个警告也会阻止生成成功。
所以,拿出强迫症精神,做ARX开发,一个警告都不能有。
我们给刚才的函数内部添加如下内容:
static void ADSKMyGroupMyCommand() { wchar_t temp[32]; wmemset(temp, 0, 32); acutPrintf(_T("这是我的第一个ARX插件\n")); //输出 acedGetString(0,_T("请问你的名字是:"),temp); //输入 acutPrintf(_T("你好,%s\n"),temp); //输出 }
简介一下acedGetString函数,这是接受输入的函数,有很多重载方式,当前使用的方式有三个参数。
参数1:若为0,空格和回车都会使字符串输入结束,若非0,空格不会使字符串输入结束,需要回车才会结束。
参数2:输出字符串的部分
参数3,接收字符串的缓存
生成新的ARX吧,然后依照第三节的内容加载ARX并且执行这条指令。
指令是你自己创建的,本例中为 MyCommandLocal。
执行效果如下:
你可以依照上面的格式,自己在acrxEntryPoint.cpp文件的类中添加新的函数
然后添加一条新的注册指令。
就像这样
static void BIMCloudHello() { wchar_t temp[32]; wmemset(temp, 0, 32); acutPrintf(_T("这是我的第一个ARX插件\n")); //输出 acedGetString(0,_T("请问你的名字是:"),temp); //输入 acutPrintf(_T("你好,%s\n"),temp); //输出 } ACED_ARXCOMMAND_ENTRY_AUTO(CArx_Dwg2SvgApp, BIMCloud, Hello, myhello, ACRX_CMD_MODAL, NULL)
然后在CAD中执行myhello指令,就可以调用这个函数了。记得,新函数要添加在acrxEntryPoint文件的类当中,作为一个类成员函数。
有任何问题可以留言。