Переопределяю отрисовку объектов в AutoCAD с помощью:
public class AlxdDrawOverrule : DrawableOverrule
{
public override bool WorldDraw(Drawable drawable, WorldDraw wd)
{
}
}
В частности, надо между двумя текстовыми (пока только текстовыми) объектами начертить линию, как бы показать между ними некую связь. Сделал вот так:
Vector3d normal = new Vector3d();
if (drawable is Autodesk.AutoCAD.DatabaseServices.MText)
{
normal = (drawable as Autodesk.AutoCAD.DatabaseServices.MText).Normal;
}
else
if (drawable is Autodesk.AutoCAD.DatabaseServices.DBText)
{
normal = (drawable as Autodesk.AutoCAD.DatabaseServices.DBText).Normal;
}
else
return base.WorldDraw(mydrawable, wd);
Extents3d extents1 = drawable.Bounds.Value;
Point3d midPoint = extents1.MaxPoint + extents1.MaxPoint.GetVectorTo(extents1.MinPoint).DivideBy(2);
if (validatedGroundElevations.Count > iofDistanceBetweenElevations)
{
Extents3d extents2 = validatedGroundElevations[iofDistanceBetweenElevations].Open(OpenMode.ForRead).Bounds.Value;
Point3d midPointGroundElevation = extents2.MaxPoint + extents2.MaxPoint.GetVectorTo(extents2.MinPoint).DivideBy(2);
wd.Geometry.WorldLine(midPoint, midPointGroundElevation);
}
if (validatedGroundElevations.Count > iofDistanceBetweenElevations + 1)
{
Extents3d extents2 = validatedGroundElevations[iofDistanceBetweenElevations + 1].Open(OpenMode.ForRead).Bounds.Value;
Point3d midPointGroundElevation = extents2.MaxPoint + extents2.MaxPoint.GetVectorTo(extents2.MinPoint).DivideBy(2);
wd.Geometry.WorldLine(midPoint, midPointGroundElevation);
}
Все отлично отрисовывается. Но очень некрасиво, что линии исходят из центра текстовых объектов. Как бы их так аккуратненько подрезать до границ (extent) текстовых объектов?
В моем случае есть Extents3d и две точки Point3d. Надо найти точку пересечения мнимой линии проходящей через указанные точки с экстентами. Сперва с экстентами первого текстового объекта, а потом с экстентами второго. Таким образом получить две новые точки и их использовать для построения линии связи.
Голову сломал, как вычислить точки не "городя огород".