При проверке файлов, нормоконтролер помечает (обводит) неправильные фрагменты, к таким фрагментам относятся, в том числе, и сломанные поля.
И если найти все поля в чертеже не проблема, найти сломанные поля, так же не сложно, найти внутри каких объектов находятся поля так же не сложно, то вот как найти координаты самих полей, вот тут у меня затык.
К сожалению координаты и границы объекта внутри которого находится сломанное поле не подходят, так как это может быть MText, с портянкой на 2-3 страницы.
Собственно вопрос в заголовке темы, как найти координаты поля или как найти координаты любой буквы в тексте
P.S.
Я порылся в методах и свойствах как самого класса Field, так и его родителя DBObject, но все что там могло мне помочь, это Bounds, но естественно эти поля не заполнены.
App.Document doc = App.Application.DocumentManager.MdiActiveDocument;
if (doc == null) { return; }
Db.Database db = doc.Database;
Ed.Editor ed = doc.Editor;
var opt = new Ed.PromptEntityOptions("\nSelect an MText object containing field(s): ");
opt.SetRejectMessage("\nObject must be MText.");
opt.AddAllowedClass(typeof(Db.MText), false);
Ed.PromptEntityResult res = ed.GetEntity(opt);
if (res.Status != Ed.PromptStatus.OK) { return; }
using (Db.Transaction Tx = db.TransactionManager.StartTransaction())
{
var mtext = Tx.GetObject(res.ObjectId, Db.OpenMode.ForRead) as Db.MText;
if (!mtext.HasFields)
{
ed.WriteMessage("\nObject does not contain fields.");
return;
}
Db.ObjectId id = mtext.GetField();
Db.Field fieldBase = Tx.GetObject(id, Db.OpenMode.ForRead) as Db.Field;
var fields = fieldBase.GetChildren();
foreach (var field in fields)
{
if (field.EvaluationStatus.Status != Db.FieldEvaluationStatus.Success)
{
if (field.Bounds != null)
{
//он всегда null
var pnt = field.Bounds.Value.MinPoint;
}
if(field.Drawable.Bounds != null)
{
// и этот всегда null
}
ed.WriteMessage("\nЕсть проблемки!");
}
}
Tx.Commit();
}