手动创建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. 1,下载和部署开发环境--AutoCAD二次开发

    环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technolo ...

  2. AutoCAD二次开发——AutoCAD.NET API开发环境搭建

    AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...

  3. AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层

    AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...

  4. AutoCad 二次开发 文字镜像

    AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...

  5. AutoCad 二次开发 jig操作之标注跟随线移动

    AutoCad 二次开发 jig操作之标注跟随线移动 在autocad当中,我认为的jig操作的意思就是即时绘图的意思,它能够实时的显示出当前的操作,以便我们直观的感受到当前的绘图操作是什么样子会有什 ...

  6. AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)

    AutoCAD2007+vs2005 首先自己去网上搜索下载AutoCAD2007的ARX开发包. 解压后如下 打开后如下 classmap文件夹为C++类和.net类的框架图,是一个DWG文件. d ...

  7. 2,手动创建CAD二次开发项目--AutoCAD二次开发(2020版)

    本项目使用手动创建,意为不使用SDK模板. 从Visual Studio的“文件”下拉菜单中,选择“新建”->“项目...”. 在出现的“新建项目”对话框的“项目类型:”树中,单击“ Visua ...

  8. 我的AutoCAD二次开发之路 (一)

    原帖地址 http://379910987.blog.163.com/blog/static/33523797201011184552167/ 今天在改代码的时候,遇到了AddVertexAt方法的用 ...

  9. Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序

    在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...

随机推荐

  1. 从java到python

    从java到python 从事java开发主要是web方向,这个方向已经相当成熟,基本你想开发什么样的app,总能百度出来相关的项目或者github中搜索到,你需要做的就是掌握调试的技巧,基本你能想到 ...

  2. H5与CSS3常用设置

    1.设置div铺满全屏 对于一个div1,要使其属性height:100%生效,需要使其所有父元素,有确定的属性height.要铺满全屏,就是从html开始,所有的height为100%. 2.垂直居 ...

  3. 通过Value获取Map中的键值Key的四种方法

    1 简介 我们都知道Map是存放键值对<Key,Value>的容器,知道了Key值,使用方法Map.get(key)能快速获取Value值.然而,有的时候我们需要反过来获取,知道Value ...

  4. 通过 Django Pagination 实现简单分页

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 当博客上发布的文章越来越多时,通常需要进行分页显示,以免所有的文章都堆积在一个页面, ...

  5. 前端与算法 leetcode 48. 旋转图像

    目录 # 前端与算法 leetcode 48. 旋转图像 题目描述 概要 提示 解析 解法一:转置加翻转 解法二:在单次循环中旋转 4 个矩形 算法 传入测试用例的运行结果 执行结果 GitHub仓库 ...

  6. PHP Notice: Undefined index:解决方法

    PHP Notice:  Undefined index:解决方法 PHP Notice: Undefined index: 解决方法 <pre> if (empty(swoole_get ...

  7. 如何提高web应用的吞吐量

    这篇博文所列举的优化手段是针对比较传统项目,但是想提高系统的吞吐量现在时髦的技术还是那些前后端未分离, 使用nginx当成静态资源服务器去代理我们的静态资源 是谁限制了Throughput? 当我们对 ...

  8. 随机点名小程序--- -JAVA版本

    话不多少,直接上代码 一个能够直接运行的随机点名的小程序,一个界面化的小程序.望广大网友多多支持! 1.创建一个随机点名的类 public class ProcessRandomName { JFra ...

  9. Java nio 空轮询bug到底是什么

    编者注:Java nio 空轮询bug也就是Java nio在Linux系统下的epoll空轮询问题. epoll机制是Linux下一种高效的IO复用方式,相较于select和poll机制来说.其高效 ...

  10. HTML 颜色输入框修改事件的触发,以及获取修改后的颜色

    HTML 颜色输入框修改事件的触发,以及获取修改后的颜色 <!DOCTYPE html> <html lang="en"> <head> < ...