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的坐标值。

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

相关文章:

  • 2022-12-23
  • 2021-12-19
  • 2022-12-23
  • 2022-12-23
  • 2023-02-18
  • 2022-12-23
  • 2021-07-31
猜你喜欢
  • 2021-09-22
  • 2021-07-14
  • 2021-11-22
  • 2021-07-25
  • 2022-12-23
  • 1970-01-01
  • 2021-06-25
相关资源
相似解决方案