首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何像Civil3D一样从API中获取AutoCAD Civil3D绘图范围?

如何像Civil3D一样从API中获取AutoCAD Civil3D绘图范围?
EN

Stack Overflow用户
提问于 2020-09-28 03:51:29
回答 1查看 96关注 0票数 0

我想使用设计自动化从Civil3D dwg中提取图形范围。

如果我使用下面的代码:

代码语言:javascript
复制
static public Extents3d GetExtents(Database db) {
  try {
    //db.UpdateExt(true);

    return new Extents3d(db.Extmin, db.Extmax);
  } catch {
    return new Extents3d();
  }
}

然后我得到以下正确的结果:

代码语言:javascript
复制
Min: [2538909.32, 330601.59, 0.00]
Max: [2540326.77, 331107.96, 0.00]

然而,如果我之前调用db.UpdateExt(true),或者如果我用下面的代码简单地迭代模型空间中的所有实体,我会得到一个位于原点的最小界限:

代码语言:javascript
复制
static public Extents3d GetExtents(Database db) {
  try {
    var TxMng = db.TransactionManager;

    using(var Tx = TxMng.StartTransaction()) {
      var btr = Tx.GetObject(
        db.CurrentSpaceId, OpenMode.ForRead)
      as BlockTableRecord;

      foreach(var id in btr) {
        var entity = Tx.GetObject(id, OpenMode.ForRead)
        as Entity;

        extents.AddExtents(entity.GeometricExtents);
      }

      Tx.Commit();
    }

    return extents;
  } catch {
    return new Extents3d();
  }
}

输出:

代码语言:javascript
复制
Min: [0.00, 0.00, 0.00]
Max: [2540326.77, 331107.96, 0.00]

此外,在AutoCAD vanilla中打开dwg并进行范围缩放将使用这种巨大/无效的范围。所以我认为Civil知道在计算范围时不应该包括一些实体,或者是其他的东西?

我希望能够使用第二种方法(至少是它的修改后的工作版本)来计算范围,因为它提供了更多的粒度,以确定我们想要考虑的实体,如果稍后我们有一些更高级的要求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-20 01:50:25

当迭代实体来计算扩展时,我们不包含实体AeccDbNetworkPartConnector是可以的。您可以使用entity.GetRXClass().Name接口获取名称AeccDbNetworkPartConnector,这有助于过滤出这些实体。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64092675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档