Civil3D有哪些API

时间:2021-10-28 07:36:54

Civil3D主要有两种API:COM和.NET

COM API已经处于维护阶段,不再进行新Feature的开发以及Bug的修复。Civil3D二次推荐使用的是.NET API,后文中使用的都是.NET API。

.NET基本上覆盖了大部分的Civil3D的feature,但是还是会有部分功能的缺失,碰到这种情况怎么办呢?

第一步,用Reflector仔细查找所有暴露的属性和方向,看看有没有理解错误的情况。同时,可以在相关的feature里去查找一下,例如需要找某个Profile的属性,有可能会在Alignment里面找到。

第二步,,.NET API没有暴露,看看COM API有没有。如果有,混合着使用也是一种推荐的方法。

第三步,看看通过AutoCAD的方法能不能实现。例如我需要拿到Database中某一类Civil3D的entity,如果Civil3D的API没有暴露简单的方法,那么可以自己用AutoCAD API实现。方法也很简单,遍历Database的BlockTableRecord,打开每个对象并查看它的类型(GetType()),找出所有需要的类型的对象。另外也可以通过字符串来查找,例如DxfName,Civil3D TinSurface的DxfName是AECC_TIN_SURFACE。

第四步,尝试通过发命令的形式看看能不能做到,Document类里面有函数SendStringToExecute可以使用。例如你希望把某个Entity导出每个文件,但是没有这种API确有命令可以这样做,那么就通过发命令好了。

第五步,其他方法。我看到过的一个巧妙方法是,有个人需要拿到ViewFrame的四个角的坐标值,但是Civil3D的.NET和COM API都没有暴露,那么他就尝试着把ViewFrame炸开(Explode,AutoCAD有这个API),把炸开后得到的线段的端点拿出来,就是ViewFrame的坐标值。

还有其他办法吗?可以联系欧特克,让他们加。。