【以项目实战讲解CAD的二次开发】
以项目实战讲解CAD的二次开发
- 说明
- 背景目的
- 环境搭建
- c++
- .net
- 启动程序
- 后续的框架构想
- 总结
说明
这是我的第一个博客,之前也一直不敢写,本人能力有限,怕写错,误导一批新手。也很久没有较深入的开发ObjectARX了,最近一两年都在搞桌面客户端和服务端了。这次借疫情呆在家,公司也想做一个新项目之际,暂且先不管这项目能否批下来,又或者以后我还负不负责,希望此篇文章能开个好头。
背景目的
背景就不说了(后面有关项目或公司机密的都不会说明),说说目标吧,能够适应各种cad:AutoCAD、BricsCAD、中望、浩辰等等。每种cad都有自己的SDK,我们主要以两种为代表AutoCAD和BricsCAD来讲解。另外对于大型项目而言,底层开发语言优先选择C++,负责自定义实体和一些复杂算法。向上兼容C#、VB.Net等。整体程序目录应该如下:
程序主目录
sys目录下面的arx子目录
环境搭建
比较基础的关于ObjectARX的环境搭建,网上应该有很多资料,这里不赘述了。主要的就是去官网下载SDK和安装向导。记住安装向导C++和C#是分开的,这里附上一个链接,页面最底部应该就是向导了。ObjectARX和Wizards.msi
另外关于cad和visual studio的版本对应,可参照版本对应
c++
通过向导生成的工程后
- 变更编译选项,团队项目编译一定要进行统一,譬如Debug_R21、Release_R21等,同时说明Debug、Release和sdk版本。不过我用向导生成后,发现Debug和Release的预编译器是共用的,也就是说,改Release同时会更改Debug,这会给项目带来不便,有时我们需要在Debug的项目中输出一些临时信息。打开项目的.vcxproj文件,如下两行:
<PreprocessorDefinitions Condition="'$(Platform)'=='x64'">_WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(UseOfMfc)'=='Dynamic'">_AFXEXT;_ALLOW_RTCc_IN_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
更改为:
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_WIN64;_AFXEXT;_ALLOW_RTCc_IN_STL%(PreprocessorDefinitions)</PreprocessorDefinitions><PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_WIN64;_AFXEXT;_ALLOW_RTCc_IN_STL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
其实它本身这方面的工程文件配置很凌乱,Debug和Release全在一个ItemDefinitionGroup节点里面。这里我就给它重新改写了:
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_ARX21|x64'"></ItemDefinitionGroup><ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_BRX21|x64'"></ItemDefinitionGroup><ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_ARX21|x64'"></ItemDefinitionGroup><ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_BRX21|x64'"></ItemDefinitionGroup>
- 需要把输入目录和中间临时目录改写到固定的路径,提交代码时记得别提交这些临时文件。
- 添加公共库和头文件、第三方库和头文件等
- 对于managed的项目(供.net调用),记得添加AdditionalUsingDirectories。这里我们使用了代码引用cad的dll文件,使用这种方法,会有下面问题:
- 对于AutoCAD,先包含"arxHeaders.h",sdk会自动包含managed的部分接口,而这时<accoremgd.dll>等还未引用,导致编译失败。所以"arxHeaders.h"要放到后面。
- 对于BricsCAD,是没有限制的,但我们依靠BRX自带的__BRX宏就不可用了,需要我们在预处理自己定义。
#ifdef __BRX
#include "arxHeaders.h"
#using <brxmgd.dll>
#using <td_mgd.dll>
#include "util/type_mgd_brx.h"
#else
#using <accoremgd.dll>
#using <acdbmgd.dll>
#using <acmgd.dll>
#include "arxHeaders.h"
#include "util/type_mgd_arx.h"
#endif
.net
通过向导生成项目后
- 需要把输入目录和中间临时目录改写到固定的路径,提交代码时记得别提交这些临时文件。
- 引用改为程序相对目录的dll,“Copy Local"改为"false”。
启动程序
我们适配了多版本cad,那么我们应该也要有个启动器能够选择不同cad进行启动和自动加载arx插件。
- 界面,采用了duilib这个库,网上有很多版本,这里附一个我认为比较通用小巧的duilib。当然也可以使用qt,我目前也在评估使用qt的好处和坏处,甚至是cad里面也在思考是否可用qt。
- 自动加载,使用的是cad的自动加载机制。在arx子目录下面有加载文件,AutoCAD是ACAD.RX, BricsCAD的是autoload.rx。
启动程序会通过注册表获取本机已经安装的cad版本,然后和程序已开发的cad版本进行匹配,显示到程序列表。
最后用户选择列表项启动后的过程:
- 添加对应cad支持搜索目录
- 启动对应cad
- 等待加载完成
- 按项目需要是否需要在卸载后自动清除支持目录。
后续的框架构想
- 在线更新
- 多语言,目前在外企,自然会有这种考虑。
- 疫情常态,考虑数据云服务化
- 每个人网络都会不同,云网络一旦出现问题,没有办法补救,所以还需要可离线操作。
- 对于离线操作,可通过加密狗、加密文件解决。
总结
今天只介绍了一个项目的大概思路,下一章开始进行公共库应该怎么设计和一些通用功能的实现。
【以项目实战讲解CAD的二次开发】相关推荐
- Android项目实战(三十二):圆角对话框Dialog
原文:Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对 ...
- 【深度学习】:《PyTorch入门到项目实战》(十二)卷积神经网络:填充(padding)和步幅(stride)
[深度学习]:<PyTorch入门到项目实战>(十二)填充(padding)和步幅(stride) ✨本文收录于[深度学习]:<PyTorch入门到项目实战>专栏,此专栏主要记 ...
- 基于eclipse的android项目实战—博学谷(二十三)其他功能
本项目是用eclipse软件编写,经过我的亲自实践,其真实有效,希望能给您有所帮助 项目版本:android5.1.1 ADT版本:23.0.6 SDK版本:24.4.1 运行模拟器:夜神模拟器 若有 ...
- 【PBL项目实战】户外智慧农场项目实战系列——3.云端可视化页面开发及设备数据源的配置与调试
[PBL项目实战]户外智慧农场项目实战系列--3.云端可视化页面开发及设备数据源的配置与调试 原文链接 https://mp.weixin.qq.com/s/5OT57-_QlN7lwRMWvey4 ...
- 视频教程-【三月】微信小程序云开发项目实战课程 - T3租机械-微信开发
[三月]微信小程序云开发项目实战课程 - T3租机械 宁夏酷申科技有限公司技术总监,计算机专业毕业后一直从事技术开发和架构工作 袁永刚 ¥366.00 立即订阅 扫码下载「CSDN程序员学院APP」, ...
- 视频教程-微信小程序项目实战:电影购票系统-微信开发
微信小程序项目实战:电影购票系统 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN学院专家讲师,制作视频课程超过100 ...
- MUI+H5开发移动APP/网易邮箱大师项目实战/Android、IOS跨平台应用开发-王翠英-专题视频课程...
MUI+H5开发移动APP/网易邮箱大师项目实战/Android.IOS跨平台应用开发-488人已学习 课程介绍 MUI从基础到精通的全方位讲解,系统介绍了移动APP开发基础.MUI各 ...
- php 数据采集模板,基于PHP实战帝国CMS系统二次开发(标签、模板、快速仿站、数据采集)...
基于帝国CMS的网站开发是一套从入门至精通的帝国视频教程,该教程细腻入微的由服务器配置.帝国CMS安装.DIV+CSS模版制做,通过帝国CMS去实现模版的功... 基于帝国CMS的网站开发是一套从入门 ...
- 鼎捷ERP二次开发教程 Tiptop GP开发资料大全 Tipto开发实战经验 鼎捷开发实战例子 Tiptop GP二次开发项目例子 4GL开发Demo 鼎捷二次开发完整例子 鼎捷ERP二次开发入门
本人在ERP实施公司做顾问四五年,参与企业实施ERP十多个项目,非常熟悉企业ERP流程,在实施过程遇到众多问题,提出了不少根据企业具体情况的解决方案. 曾经参与鼎捷Tiptop GP实施十多个项目,具 ...
最新文章
- Linux中的环境变量知多少?
- PouchContainer 发布 0.3.0 版本,支持 Kubernetes 拥抱 CNCF 生态
- C语言及程序设计进阶例程-17 认识链表
- Linux命令Man解释:useradd:帐号建立或更新
- Goldbach's Conjecture--POJ 2262
- bootstrap table 合并行_elementUI表格合并
- java开发安卓app_开发安卓app常用的三种开发语言
- Allegro导入Altium Designer的pcb文件
- 网络广告公司的恐慌 XSS广告终结者(html5新特性)
- 论文 查重 知网 万方 paperpass
- rpc调用 java_RPC调用的简单实现
- Geodatabase
- 设计模式【2.2】-- 工厂模式怎么演变成抽象工厂模式?
- matlab中size()函数的用法
- java下划线_转驼峰,小写转大写(亲写,亲测)
- Java中创建目录 或 创建文件
- 基于国产 ARM + FPGA+Codesys运动控制平台的智能人机交互系统设计
- 合泰HT32F52342/HT32F52352芯片Pack下载和工程例程下载
- 视频教程-【10天企业定制课】2019年PS软件photoshop/CC应用计划学习视频-UI
- 使用Android自带的DownloadManager下载ApK并安装