以项目实战讲解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++

通过向导生成的工程后

  1. 变更编译选项,团队项目编译一定要进行统一,譬如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>
  1. 需要把输入目录和中间临时目录改写到固定的路径,提交代码时记得别提交这些临时文件。
  2. 添加公共库和头文件、第三方库和头文件等
  3. 对于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

通过向导生成项目后

  1. 需要把输入目录和中间临时目录改写到固定的路径,提交代码时记得别提交这些临时文件。
  2. 引用改为程序相对目录的dll,“Copy Local"改为"false”。

启动程序

我们适配了多版本cad,那么我们应该也要有个启动器能够选择不同cad进行启动和自动加载arx插件。

  • 界面,采用了duilib这个库,网上有很多版本,这里附一个我认为比较通用小巧的duilib。当然也可以使用qt,我目前也在评估使用qt的好处和坏处,甚至是cad里面也在思考是否可用qt。
  • 自动加载,使用的是cad的自动加载机制。在arx子目录下面有加载文件,AutoCAD是ACAD.RX, BricsCAD的是autoload.rx。
    启动程序会通过注册表获取本机已经安装的cad版本,然后和程序已开发的cad版本进行匹配,显示到程序列表。

最后用户选择列表项启动后的过程:

  1. 添加对应cad支持搜索目录
  2. 启动对应cad
  3. 等待加载完成
  4. 按项目需要是否需要在卸载后自动清除支持目录。

后续的框架构想

  • 在线更新
  • 多语言,目前在外企,自然会有这种考虑。
  • 疫情常态,考虑数据云服务化
  • 每个人网络都会不同,云网络一旦出现问题,没有办法补救,所以还需要可离线操作。
  • 对于离线操作,可通过加密狗、加密文件解决。

总结

今天只介绍了一个项目的大概思路,下一章开始进行公共库应该怎么设计和一些通用功能的实现。

【以项目实战讲解CAD的二次开发】相关推荐

  1. Android项目实战(三十二):圆角对话框Dialog

    原文:Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对 ...

  2. 【深度学习】:《PyTorch入门到项目实战》(十二)卷积神经网络:填充(padding)和步幅(stride)

    [深度学习]:<PyTorch入门到项目实战>(十二)填充(padding)和步幅(stride) ✨本文收录于[深度学习]:<PyTorch入门到项目实战>专栏,此专栏主要记 ...

  3. 基于eclipse的android项目实战—博学谷(二十三)其他功能

    本项目是用eclipse软件编写,经过我的亲自实践,其真实有效,希望能给您有所帮助 项目版本:android5.1.1 ADT版本:23.0.6 SDK版本:24.4.1 运行模拟器:夜神模拟器 若有 ...

  4. 【PBL项目实战】户外智慧农场项目实战系列——3.云端可视化页面开发及设备数据源的配置与调试

    [PBL项目实战]户外智慧农场项目实战系列--3.云端可视化页面开发及设备数据源的配置与调试 原文链接  https://mp.weixin.qq.com/s/5OT57-_QlN7lwRMWvey4 ...

  5. 视频教程-【三月】微信小程序云开发项目实战课程 - T3租机械-微信开发

    [三月]微信小程序云开发项目实战课程 - T3租机械 宁夏酷申科技有限公司技术总监,计算机专业毕业后一直从事技术开发和架构工作 袁永刚 ¥366.00 立即订阅 扫码下载「CSDN程序员学院APP」, ...

  6. 视频教程-微信小程序项目实战:电影购票系统-微信开发

    微信小程序项目实战:电影购票系统 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN学院专家讲师,制作视频课程超过100 ...

  7. MUI+H5开发移动APP/网易邮箱大师项目实战/Android、IOS跨平台应用开发-王翠英-专题视频课程...

    MUI+H5开发移动APP/网易邮箱大师项目实战/Android.IOS跨平台应用开发-488人已学习 课程介绍         MUI从基础到精通的全方位讲解,系统介绍了移动APP开发基础.MUI各 ...

  8. php 数据采集模板,基于PHP实战帝国CMS系统二次开发(标签、模板、快速仿站、数据采集)...

    基于帝国CMS的网站开发是一套从入门至精通的帝国视频教程,该教程细腻入微的由服务器配置.帝国CMS安装.DIV+CSS模版制做,通过帝国CMS去实现模版的功... 基于帝国CMS的网站开发是一套从入门 ...

  9. 鼎捷ERP二次开发教程 Tiptop GP开发资料大全 Tipto开发实战经验 鼎捷开发实战例子 Tiptop GP二次开发项目例子 4GL开发Demo 鼎捷二次开发完整例子 鼎捷ERP二次开发入门

    本人在ERP实施公司做顾问四五年,参与企业实施ERP十多个项目,非常熟悉企业ERP流程,在实施过程遇到众多问题,提出了不少根据企业具体情况的解决方案. 曾经参与鼎捷Tiptop GP实施十多个项目,具 ...

最新文章

  1. Linux中的环境变量知多少?
  2. PouchContainer 发布 0.3.0 版本,支持 Kubernetes 拥抱 CNCF 生态
  3. C语言及程序设计进阶例程-17 认识链表
  4. Linux命令Man解释:useradd:帐号建立或更新
  5. Goldbach's Conjecture--POJ 2262
  6. bootstrap table 合并行_elementUI表格合并
  7. java开发安卓app_开发安卓app常用的三种开发语言
  8. Allegro导入Altium Designer的pcb文件
  9. 网络广告公司的恐慌 XSS广告终结者(html5新特性)
  10. 论文 查重 知网 万方 paperpass
  11. rpc调用 java_RPC调用的简单实现
  12. Geodatabase
  13. 设计模式【2.2】-- 工厂模式怎么演变成抽象工厂模式?
  14. matlab中size()函数的用法
  15. java下划线_转驼峰,小写转大写(亲写,亲测)
  16. Java中创建目录 或 创建文件
  17. 基于国产 ARM + FPGA+Codesys运动控制平台的智能人机交互系统设计
  18. 合泰HT32F52342/HT32F52352芯片Pack下载和工程例程下载
  19. 视频教程-【10天企业定制课】2019年PS软件photoshop/CC应用计划学习视频-UI
  20. 使用Android自带的DownloadManager下载ApK并安装

热门文章

  1. 计算机专业 发展,计算机专业发展趋势如何
  2. libevent mysql_libevent安装总结
  3. C#项目中使用日志框架Log4net
  4. 关于CentOS中jdk配置版本不一致的问题
  5. 嘿,你的产品好用吗?
  6. xmind在线预览,编辑,保存,本地xmind读取、远程xmind文件流链接读取
  7. Android使用EditView输入框输入身份证时,自动补全身份证最后一位验证位
  8. 洛谷 P3628 [APIO2010]特别行动队
  9. 从坦克聊聊代理模式之动态代理2
  10. 爬取免费代理IP并测试