IJCAD 2018 Mechanicalで座標を取得する時に図面から大きく離れた座標を取得してしまう
IJCAD 2018 MechanicalでC#で開発を行っております。
プログラム上で図面全体の矩形座標を取得する際に
図面からかなり離れた座標を取得してしまうことがあります。
対象の図面を開いてクイック選択をしたり、ZOOMコマンドでEを実行したりしても
その座標には何も存在しません。
PURGEコマンドを実行して図面を保存してから再度プログラムで処理を行っても
やはり大きい座標が取得されてしまいます。
図面の矩形座標を取得するプログラムは下記の通りです。
minX = double.MaxValue;
minY = double.MaxValue;
maxX = double.MinValue;
maxY = double.MinValue;
Document acDoc = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
try
{
// ドキュメントをロックする
using (acDoc.LockDocument())
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
using (LayerTable acLayTbl = acTrans.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite) as LayerTable)
{
// オブジェクトを取得
PromptSelectionResult acRes = acDoc.Editor.SelectAll();
if (acRes.Value.Count != 0)
{
foreach (ObjectId acObjId in acRes.Value.GetObjectIds())
{
using (Entity acEnt = acTrans.GetObject(acObjId, OpenMode.ForRead) as Entity)
{
// 非表示を除外する
if (acLayTbl.Has(acEnt.Layer))
{
using (LayerTableRecord acLyrTblRec = acTrans.GetObject(acLayTbl[acEnt.Layer], OpenMode.ForWrite) as LayerTableRecord)
{
if (acLyrTblRec.IsOff)
{
continue;
}
}
}
if (acEnt.Visible == false)
{
continue;
}
if (acEnt.Bounds.HasValue)
{
if (acEnt.GeometricExtents.MinPoint.X.CompareTo(minX) < 0)
{
minX = acEnt.GeometricExtents.MinPoint.X;
}
if (acEnt.GeometricExtents.MaxPoint.X.CompareTo(maxX) > 0)
{
// おかしな値を取得する
maxX = acEnt.GeometricExtents.MaxPoint.X;
}
if (acEnt.GeometricExtents.MinPoint.Y.CompareTo(minY) < 0)
{
minY = acEnt.GeometricExtents.MinPoint.Y;
}
if (acEnt.GeometricExtents.MaxPoint.Y.CompareTo(maxY) > 0)
{
// おかしな値を取得する
maxY = acEnt.GeometricExtents.MaxPoint.Y;
}
}
}
}
}
}
}
上記のプログラム上でmaxXやmaxYを見ると
500前後のオブジェクトに加えて7000近い値のオブジェクトが混ざってしまいます。
どのようにすれば図面からそのオブジェクトを削除する
あるいはプログラム上でそのオブジェクトを判断して除外することが
できるのでしょうか?