手动创建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. 基本的sql 语句

    1,登陆数据库:mysql -u root -p2,退出数据库:exit quit ctr+d3,创建数据库:create database 数据库名 charset=utf84,使用数据库:use ...

  2. CSPS模拟 68

    令人kuku的一场考试, T1 令人kuku的贪心,反工了好几次,耗费了1h之久. T2 令人kuku的数据结构,到死也没调出来,还是细节问题,要积累. T3 令人kuku的二分答案. 先二分第一个答 ...

  3. 通俗易懂了解React生命周期

    1.前言 学习React时,学习组件的生命周期是非常重要的,了解了组件的"从无到有再到无"所经历的各个状态,对日后写高性能的组件会有很大的帮助. 2.生命周期图 React的生命周 ...

  4. PHP关于access_token失效问题

    PHP关于access_token失效问题 有时候PHP设置了缓存 明明就是没有过期 但却提示失效这情况一般就是1 多个appid和secrete 生成的access_token互相覆盖了 所以 这种 ...

  5. PHP结合SQL语句写一句话木马

    一.基础类的一句话--功能仅限于验证漏洞了,实际中太容易被查出出来: 1 <?php @eval($_GET["code"])?> 2 <?php @system ...

  6. 如何基于 PHP-X 快速开发一个 PHP 扩展

    0x01 起步 PHP-X本身基于C++11开发,使用cmake进行编译配置.首先,你需要确定所有依赖项已安装好.包括: gcc-4.8 或更高版本 PHP7.0 或更高版本,需要php7-dev 开 ...

  7. chrome中安装Vue调试工具vue-devtools

    一.前言 vue-devtools是一款基于浏览器的插件,用来调试vue应用.本篇文章将要总结的是如何在chrome中安装Vue的调试工具vue-devtools. 首先能想到的第一种方法就是直接在c ...

  8. nyoj 115-城市平乱 (BFS)

    115-城市平乱 内存限制:64MB 时间限制:1000ms 特判: No 通过数:5 提交数:8 难度:4 题目描述: 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维 ...

  9. thinking in JAVA 编译记录

    编辑/编译<thinking in JAVA>源代码 一.下载源代码 首先,我阅读的是<thinking in JAVA>第四版,因此按照书中提供的链接找到了mindview主 ...

  10. Rust 入门 (一)

    Rust 语言的介绍.特性什么的都不说了,如有需要,请自行了解.这里我们直接进去正题. 一.开发环境 mac或linux系统,在命令行安装 curl https://sh.rustup.rs -sSf ...