问题描述
我想使用Design Automation从Civil3D dwg提取工程图范围。
如果我使用以下代码:
n = 1000
beta0 = 2.1; beta1 = 0.7
set.seed(12345)
X = runif(n,10,20)
Y = beta0 + beta1*X + .4*X*rnorm(n)
library(quantreg)
fit.05 = rq(Y ~ X,tau = .05)
fit.95 = rq(Y ~ X,tau = .95)
Lower = fit.05$fitted.values
Upper = fit.95$fitted.values
plot(X,Y,main = "Scatterplot with 90% Prediction Limits")
points(X,Lower,pch=".",col="red")
points(X,Upper,col="red")
然后我得到以下正确的结果:
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();
}
}
也可以在AutoCAD vanilla中打开dwg并进行缩放范围将使用此巨大/无效范围。因此,我认为Civil知道在计算范围时不应该包括某些实体吗?还是其他的东西?
我希望能够使用第二种方法(至少是它的修改后的工作版本)来计算范围,因为如果稍后我们有一些更高级的要求,它可以为我们要考虑的实体提供更多的粒度。
解决方法
在迭代实体以计算扩展时,可以不包含实体AeccDbNetworkPartConnector。您可以使用API entity.GetRXClass().Name
来获取名称AeccDbNetworkPartConnector
,这可以帮助过滤掉这些实体。