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(CArxProject1App, BIMCloud, Hello, myhello, ACRX_CMD_MODAL, NULL)
然后在CAD中执行myhello指令,就可以调用这个函数了。记得,新函数要添加在acrxEntryPoint文件的类当中,作为一个类成员函数。
你应该已经注意到,整个过程中没有添加任何头文件,
因为创建模板的时候,ARX向导已经帮我们添加好了,所以非常方便,直接就可以写业务逻辑了。
但是你用到Unicode字符的话,就需要自己添加
#include "tchar.h"
AutoCAD二次开发(2020版)--4,使用ARX向导创建编程模板(框架)--的更多相关文章
- 1,下载和部署开发环境--AutoCAD二次开发
环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technolo ...
- AutoCAD二次开发——AutoCAD.NET API开发环境搭建
AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...
- AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层
AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...
- AutoCad 二次开发 文字镜像
AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...
- AutoCad 二次开发 jig操作之标注跟随线移动
AutoCad 二次开发 jig操作之标注跟随线移动 在autocad当中,我认为的jig操作的意思就是即时绘图的意思,它能够实时的显示出当前的操作,以便我们直观的感受到当前的绘图操作是什么样子会有什 ...
- AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)
AutoCAD2007+vs2005 首先自己去网上搜索下载AutoCAD2007的ARX开发包. 解压后如下 打开后如下 classmap文件夹为C++类和.net类的框架图,是一个DWG文件. d ...
- 2,手动创建CAD二次开发项目--AutoCAD二次开发(2020版)
本项目使用手动创建,意为不使用SDK模板. 从Visual Studio的“文件”下拉菜单中,选择“新建”->“项目...”. 在出现的“新建项目”对话框的“项目类型:”树中,单击“ Visua ...
- 我的AutoCAD二次开发之路 (一)
原帖地址 http://379910987.blog.163.com/blog/static/33523797201011184552167/ 今天在改代码的时候,遇到了AddVertexAt方法的用 ...
- Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序
在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...
随机推荐
- 有关logistic(sigmoid)函数回归
在神经网络中,经常用到sigmoid函数,y = 1 / (1+e-x) 作为下一级神经元的激活函数,x也就是WX(下文,W以θ符号代替)矩阵计算结果. 这个函数通常用在进行分类,通常分为1或0的逻辑 ...
- 学习笔记62_python文件操作
#使用 str = raw_input("输入密码:") 来获取键盘的输入 #创建或打开一个文件 fp = open("hellow.txt","w& ...
- python机器学习——感知器
最近在看机器学习相关的书籍,顺便把每天阅读的部分写出来和大家分享,共同学习探讨一起进步!作为机器学习的第一篇博客,我准备从感知器开始,之后会慢慢更新其他内容. 在实现感知器算法前,我们需要先了解一下神 ...
- Flink中发送端反压以及Credit机制(源码分析)
上一篇<Flink接收端反压机制>说到因为Flink每个Task的接收端和发送端是共享一个bufferPool的,形成了天然的反压机制,当Task接收数据的时候,接收端会根据积压的数据量以 ...
- raw文件转mha文件
raw格式 在体数据(volume)中,经常会遇到raw文件,raw文件就是其实就是所有体素组成的文件,raw文件必须还有一些描信息才能用(因为得知道数据的size,type,spacing等),就像 ...
- Spring Boot 配置 - Consul 配置中心
▶ Spring Boot 依赖与配置 Maven 依赖 <dependencyManagement> <dependencies> <dependency> &l ...
- 算法编程题积累(1)——网易笔试"工程师工作安排“问题
首先理解题目意思:每个人只能做工作序号表里的一件工作且两个人不能同时做一件工作.AC思路:采用暴力枚举每种可能的分配方案,子问题的解决逐步向上解决了母问题,最终原问题得解. 标程作者:NotDeep( ...
- python习题——随机整数生成类
随机整数生成类 可以先设定一批生成数字的个数,可设定指定生成的数值的范围 1.普通类实现 import random import random class RandomGen: def __init ...
- javascript 字符串转化成函数执行
javascript 字符串转化成函数执行<pre>function func_abc(){ alert('a');}var str = "func_abc";eval ...
- python 基础之 模块
Python 基础之模块 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 就是一个python文件中定义好了类和方法,实现了一些功能,可以被别的python文 ...