Есть у меня в проекте перерисовка внешнего вида объекта в чертеже с помощью DrawableOverrule. Все отлично работало, но только до того момента, когда этот объект попытались напечатать - AutoCAD стабильно падает с фатальной ошибкой. Отладка показала, что вылет происходит в методе WorldDraw в строке 21 (код основательно упростил, чтобы показать суть):
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.GraphicsInterface;
using System.Collections.Generic;
namespace AcadTests
{
class DrawableOverruleTest : DrawableOverrule
{
public override bool WorldDraw(Drawable drawable, WorldDraw wd)
{
if (drawable is Entity)
{
Entity drawEnt = drawable as Entity;
List<Entity> ents = GetOverruleObjectsForEntity(drawEnt);
foreach (Entity ent in ents)
{
using (ent)
{
wd.Geometry.Draw(ent);
}
}
}
return true;
}
private List<Entity> GetOverruleObjectsForEntity(Entity ent)
{
List<Entity> ret = new List<Entity>();
/// ***
/// Тут идет код, в котором создаются различные объекты для
/// отрисовки: отрезки, блоки, тексты, мтексты...
/// Эти объекты помещаются в список ret
/// ***
return ret;
}
}
}
Но, если заменить
на
то ошибка пропадает. Опыты показали, что это актуально для созданных для отрисовки блоков, текстов и мультитекстов. Подозреваю, что здесь как-то замешана аннотативность. В чем же разница между этими методами? Я всегда считал, что они идентичны.