我想使用设计自动化从Civil3D dwg中提取图形范围。
如果我使用下面的代码:
static public Extents3d GetExtents(Database db) {
try {
//db.UpdateExt(true);
return new Extents3d(db.Extmin, db.Extmax);
} catch {
return new Extents3d();
}
}然后我得到以下正确的结果:
Min: [2538909.32, 330601.59, 0.00]
Max: [2540326.77, 331107.96, 0.00]然而,如果我之前调用db.UpdateExt(true),或者如果我用下面的代码简单地迭代模型空间中的所有实体,我会得到一个位于原点的最小界限:
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();
}
}输出:
Min: [0.00, 0.00, 0.00]
Max: [2540326.77, 331107.96, 0.00]此外,在AutoCAD vanilla中打开dwg并进行范围缩放将使用这种巨大/无效的范围。所以我认为Civil知道在计算范围时不应该包括一些实体,或者是其他的东西?
我希望能够使用第二种方法(至少是它的修改后的工作版本)来计算范围,因为它提供了更多的粒度,以确定我们想要考虑的实体,如果稍后我们有一些更高级的要求。
发布于 2020-10-20 01:50:25
当迭代实体来计算扩展时,我们不包含实体AeccDbNetworkPartConnector是可以的。您可以使用entity.GetRXClass().Name接口获取名称AeccDbNetworkPartConnector,这有助于过滤出这些实体。
https://stackoverflow.com/questions/64092675
复制相似问题