AutoCAD ObjectARX 二次开发(2020版)--4,使用ARX向导创建CAD二次开发项目(编程框架)--
手动创建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 ObjectARX 二次开发(2020版)--4,使用ARX向导创建CAD二次开发项目(编程框架)--的更多相关文章
- AutoCAD二次开发(2020版)--4,使用ARX向导创建编程模板(框架)--
手动创建ObjectARX应用程序非常麻烦,在此步骤中,将介绍ObjectARX向导. 在这里,我们将使用ObjectARX向导创建我们的ObjectARX应用程序. 本节的程序的需求是,接收CAD用 ...
- 2,手动创建CAD二次开发项目--AutoCAD二次开发(2020版)
本项目使用手动创建,意为不使用SDK模板. 从Visual Studio的“文件”下拉菜单中,选择“新建”->“项目...”. 在出现的“新建项目”对话框的“项目类型:”树中,单击“ Visua ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(二)
[MyEclipse最新版下载] 二.创建一个Session EJB – Part 1 MyEclipse中的EJB 2.x开发使用了EJB向导和集成XDoclet支持的组合. 每个EJB由三个基本部 ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(三)
MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 三.配置XDoclet支持的项目 默认情况下,MyEclipse EJB项目未配置使用XDoclet功能. ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(一)
[MyEclipse最新版下载] 一.创建一个EJB项目 1. 选择File>New Project,选择EJB Project,然后单击Next. 2. 在Project name字段中输入f ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(五)
MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 六.部署到JBoss服务器 1. 右键单击Servers视图,然后选择New>Server,选择您安 ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(四)
MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 四.运行XDoclet代码生成 通常每次更改XDoclet EJB配置.应用程序服务器设置或修改任何EJB ...
- AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)
AutoCAD2007+vs2005 首先自己去网上搜索下载AutoCAD2007的ARX开发包. 解压后如下 打开后如下 classmap文件夹为C++类和.net类的框架图,是一个DWG文件. d ...
- AutoCAD ObjectARX(VC)开发基础与实例教程2014版光盘镜像
AutoCAD ObjectARX(VC)开发基础与实例教程2014,最新版,光盘镜像 作者:张帆 朱文俊 编著 出版社:中国电力出版社 出版时间:2014年6月 点击一下
- 1、AutoCAD ObjectARX开发版本对照表
ObjectARX开发版本对照表 序号 CAD版本 版本号 二进制兼容 .net框架 ObjectARX开发环境 VC版本号 MAC OS平台 WINDOWS平台 VC版本 _MSC_VER 1 R1 ...
随机推荐
- 26种source-map看花了眼?别急,理解这几个全弄懂
上一篇 webpack处理模块化源码 的文章中提到了 "source map",这一篇来详细说说. 有什么作用 source map 用于映射编译后的代码与源码,这样如果编译后的代 ...
- c# .NET 高级编程 高并发必备技巧 - 锁
锁 最为常见的应用就是 高并发的情况下,库存的控制.本次只做简单的单机锁介绍. 直接看代码: 每请求一次库存-1. 假如库存1000,在1000个人请求之后,库存将变为0. public int Re ...
- 利用AI点亮副业变现:5个变现实操案例的启示
整体思维导图: 在这里先分享五个实操案例: 宝宝起名服务 AI科技热点号 头像壁纸号 小说推广号 流量营销号 你们好,我是小梦. 最初我计划撰写一篇关于AI盈利策略的文章,对AI目前的技术走向.应用场 ...
- 如何实现IP话机接入交换机?
组网图形 简介 如果语音设备支持LLDP协议,并且支持通过network-policy TLV字段获取语音VLAN,可以在交换机上配置命令lldp tlv-enable med-tlv network ...
- Row Major
Smiling & Weeping ----昨天, 别人在我身旁大声说出你的名字, 这对于我, 像从敞开的窗口扔进了一朵玫瑰花. 思路:不客气地说,这是一道令人费解的题目,要求构造一个字符串, ...
- 利用BGP Anycast 实现DNS 服务的高可用测试
一.背景 根据当前某公司内部生产系统容器平台架构设计,在各生产线边缘机房部署容器平台,与数据中心容器平台形成纵向冗余,在此情况下,传统部署在数据中心机房的DNS系统成为容器平台业务服务的短板, ...
- java循环自动生成简单图片
import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import ...
- js合并对象常用方法
const person = { name: 'David Walsh', gender: 'Male' }; const tools = { computer: 'Mac', editor: 'At ...
- 2023-09-30:用go语言,给你一个整数数组 nums 和一个整数 k 。 nums 仅包含 0 和 1, 每一次移动,你可以选择 相邻 两个数字并将它们交换。 请你返回使 nums 中包含 k
2023-09-30:用go语言,给你一个整数数组 nums 和一个整数 k . nums 仅包含 0 和 1, 每一次移动,你可以选择 相邻 两个数字并将它们交换. 请你返回使 nums 中包含 k ...
- Host-Only模式下虚拟机无法联网问题
环境: 镜像:Linux CentOS7 \-----------------------------------------\ 问题描述: 虚拟设置了Host-Only模式的虚拟网卡VMNet4,并 ...