Civil 3D CustomDraw .NET混合项目设置

时间:2021-07-14 19:12:30

样例文件中的CustomDraw项目使用的是COM API,
但COM API不完整,
某些时候需要使用.NET API,
此时需要将C++项目设置成"公共语言运行时支持(/clr)"
但简单的设置并不能实现项目的顺利编译,
因此我试着使用ObjectARX Wizard向导创建.NET COM混合项目,
之后把C3DCustomDarw样例中的代码移植到新建项目中。

创建ObjectARX项目:

Civil 3D CustomDraw .NET混合项目设置

我自己汉化过的截面:

Civil 3D CustomDraw .NET混合项目设置

选择ObjectARX(AutoCAD扩展)

Civil 3D CustomDraw .NET混合项目设置

可能要用到MFC,所以选择共享MFC扩展DLL

Civil 3D CustomDraw .NET混合项目设置

我自己修改过的界面,
Civil 3D CustomDraw .NET混合项目设置

如果使用原生的向导,
这里可以选择"导入AutoCAD COM接口",
之后在StdAfx.h文件中添加需要引用的Civil 3D相关的.tlb文件。

例如:

Civil 3D CustomDraw .NET混合项目设置

选择.NET混合托管代码支持,
下面的AutoCAD Civil 3D也是我自己的向导中,
后续可以手工添加引用的Dll文件。

Civil 3D CustomDraw .NET混合项目设置

项目向导完成后,
首先编译一下,
看是否能成功编译,
因为导入tlb文件的原因,
第一次生成旺旺不能成功,
需要编译第二次。
我刚还原的系统,
VS安装有问题,
就遇到了缺少windows sdk 8.1之类的问题。
确保项目能顺利编译后再进行下一步的设置,
以免众多问题交织到一起,
导致问题难以解决。

增加引用路径:

Civil 3D CustomDraw .NET混合项目设置

Civil 3D CustomDraw .NET混合项目设置

样例文件夹中的Inc文件夹:

C:\Program Files\Autodesk\Autodesk AutoCAD Civil 3D 2014\Sample\Civil 3D API\COM\VC++\CustomDraw\Inc

添加库目录

C:\Program Files\Autodesk\Autodesk AutoCAD Civil 3D 2014\Sample\Civil 3D API\COM\VC++\CustomDraw\Lib
这个目录2014版中是缺失的,需要自行下载,
下载地址:
http://adndevblog.typepad.com/infrastructure/2013/08/autocad-civil-3d-2014-and-custom-draw-api.html
2016版之后是正常的,
不需单独下载。

Civil 3D CustomDraw .NET混合项目设置

添加附件依赖项

Civil 3D CustomDraw .NET混合项目设置

Civil 3D CustomDraw .NET混合项目设置

从样例文件的acrxEntryPoint.h文件中复制内容到项目的acrxEntryPoint.h。

Civil 3D CustomDraw .NET混合项目设置

Civil 3D CustomDraw .NET混合项目设置

上面截图中的代码有问题,过会儿再修改!

为了代码更清晰,
新建一个类,
Civil 3D CustomDraw .NET混合项目设置

在头文件中添加方法如下:

Civil 3D CustomDraw .NET混合项目设置

注意这里我使用了static字段。
方法如何实现,
过会儿再看!

添加另一个类,
注意这个类是托管类,
这个类中将使用.NET API操作Civil 3D对象。

Civil 3D CustomDraw .NET混合项目设置

Civil 3D CustomDraw .NET混合项目设置

添加简单的代码,
用.NET方法输出对象(这里的对象指的是路线)的句柄。
Civil 3D CustomDraw .NET混合项目设置

回过头完善C3DCustomDraw.cpp的代码:

Civil 3D CustomDraw .NET混合项目设置

修改acrxEntryPoint.cpp中的错误:
记住需要引用头文件
#include
"AeccCustomDraw.h"
#include
"C3DCustomDraw.h"

Civil 3D CustomDraw .NET混合项目设置

编译,加载,创建一条路线,程序将自动输出路线的句柄。

Civil 3D CustomDraw .NET混合项目设置
这是一个简单的测试,
其中项目设置的步骤很容易出错,
一不小心就可能掉进坑里,
造成程序无法编译。