Всем добрый день,
Нужно определить пересечение блока с полилинией. Тестовый чертеж прилагается.
Тестовый код:
[CommandMethod("Test")]
public void Test ()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Database db = doc.Database;
using (var t = db.TransactionManager.StartTransaction() )
{
var prompt = ed.GetEntity("Выбери полилинию");
if (prompt.Status != PromptStatus.OK || prompt.ObjectId.ObjectClass.Name != "AcDbPolyline")
{
ed.WriteMessage("Не выбрана полилиния");
return;
}
var poly = t.GetObject(prompt.ObjectId, OpenMode.ForRead) as Polyline;
prompt = ed.GetEntity("Выбери блок");
if (prompt.Status != PromptStatus.OK || prompt.ObjectId.ObjectClass.Name != "AcDbBlockReference")
{
ed.WriteMessage("Не выбран блок");
return;
}
var blRef = t.GetObject(prompt.ObjectId, OpenMode.ForRead) as BlockReference;
// Проверить - пересекаются ли блок и полилиния
bool isIntersect = false;
using (var pts = new Point3dCollection())
{
poly.IntersectWith(blRef, Intersect.ExtendBoth, pts, IntPtr.Zero, IntPtr.Zero);
isIntersect = pts.Count > 0;
}
ed.WriteMessage("\nПересекаются {0}", isIntersect);
t.Commit();
}
}
Такой способ норм работал. Но попался странный блок, на котором это не работает. На тестовом чертеже он подписан "Проблемный".
Есть предположения, что может быть с этим блоком не так?
Спасибо!