var basePoint = Point3d.Origin;
foreach (var objId in idList)
{
var pair = entMap[objId];
var ent = (Entity)trans.GetObject(pair.Value, OpenMode.ForWrite);
Extents3d extent;
if (AutoCAD.Utilites.TryGetExtent(ent, out extent))
{
ent.TransformBy(Matrix3d.Displacement(new Vector3d(extent.MinPoint.X * -1, extent.MinPoint.Y * -1, 0)));// В начало координат
ent.TransformBy(Matrix3d.Displacement(basePoint.GetVectorTo(insPoint))); // В точку вставки
}
}
public static bool TryGetExtent(Entity entity, out Extents3d extent)
{
try
{
// получаем позицию элемента в зависимости от типа элемента
if (entity is DBText)
{
var pos = ((DBText)entity).Position;
extent = new Extents3d(pos, pos);
}
else if (entity.Bounds != null)
{
extent = entity.Bounds.Value;
}
else if (entity is BlockReference)
{
extent = ((BlockReference)entity).GeometryExtentsBestFit();
}
else
{
extent = entity.GeometricExtents;
}
}
catch (Exception)
{
// а если и его не получили - значит феил
extent = new Extents3d();
return false;
}
return true;
}