ПроблемаAutoCAD Get Length from BlockReference.
им изо всех сил, чтобы получить длину от BlockReference в AutoCAD. Я как-то с математикой нуб получил Widh & Высота, но я не могу получить длину до сих пор BlockReference. Есть ли способ получить длину BlockReference. Ive просмотрел API AutoCad, но без succsess. Может быть, кто-то может показать мне направление.
Что Ive Done
public static double GetBlockWidthAndHeight(BlockReference blockReference) {
try {
var db = HostApplicationServices.WorkingDatabase;
var blockname = blockReference.Name;
double width = 0;
using (var tr = db.TransactionManager.StartTransaction()) {
var bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
if (!bt.Has(blockname)) {
return 0;
}
var btrec = (BlockTableRecord)tr.GetObject(bt[blockname], OpenMode.ForRead, false);
Extents3d? bounds;
bounds = btrec.Bounds;
if (bounds.HasValue) {
var ext = bounds.Value;
width = ext.MaxPoint.X - ext.MinPoint.X;
double height = ext.MaxPoint.Y - ext.MinPoint.Y;
}
else {
var bref = new BlockReference(Point3d.Origin, bt[blockname]);
bounds = bref.Bounds;
var ext = bounds.Value;
width = ext.MaxPoint.X - ext.MinPoint.X;
double height = ext.MaxPoint.Y - ext.MinPoint.Y;
bref.Dispose();
}
tr.Commit();
}
return width;
}
catch (Exception ex) {
Debug.WriteLine(ex.Message);
}
return 0;
}
спасибо за ваше время. У меня 2d рисунок. Спасибо за ссылку, есть способ получить длину с тем же методом? - –
Опять же, будучи 2D-объектом, вы не сможете использовать границы объекта, чтобы получить что-либо за пределами границ X и Оси Y, поскольку эта информация просто не существует. Ваш лучший выбор будет, если есть значение «Длина», определенное в свойствах ссылки на блок. Однако это полностью зависит; о том, как была сделана ссылка на блок, и вне зависимости от того, создал ли создатель это значение. –