public class DimensionAdderStrategy : IDimensionAdderStrategy
{
public void AddDimensions(List<DimensionLine> dimensionLines)
{
using (Transaction tr = Active.Database.TransactionManager.StartTransaction())
{
BlockTableRecord ms = Active.Database.ModelSpace(OpenMode.ForWrite);
ObjectId
[] dimensions
= new ObjectId
[dimensionLines
.Count]; int index = 0;
foreach (DimensionLine dimensionLine in dimensionLines)
{
RotatedDimension rotatedDimension
= new RotatedDimension
(); double angle = AngleFromXAxis(dimensionLine.Start, dimensionLine.End);
rotatedDimension.XLine1Point = dimensionLine.Start;
rotatedDimension.XLine2Point = dimensionLine.End;
rotatedDimension.Rotation = angle;
rotatedDimension.DimLinePoint = PolarPoint(dimensionLine.End, angle + Math.PI / 2, dimensionLine.Offset);
rotatedDimension.DimensionStyle = Active.Database.DimStyleTableId;
dimensions[index] = ms.AppendEntity(rotatedDimension);
tr.AddNewlyCreatedDBObject(rotatedDimension, true);
index++;
}
tr.Commit();
SelectionSet selectionSet = SelectionSet.FromObjectIds(dimensions);
Active.Editor.Command("MSPACE", "", selectionSet, "", "CHSPACE", "");
}
}
private double AngleFromXAxis(Point3d start, Point3d end)
{
return new Vector2d
(end
.X - start
.X, end
.Y - start
.Y).Angle; }
public Point3d PolarPoint(Point3d basePoint, double angle, double offset)
{
return new Point3d
(basePoint
.X + (offset
* Math
.Cos(angle
)), basePoint
.Y + (offset
* Math
.Sin(angle
)), basePoint
.Z); }
}