This is what I'm trying to do: I have a list of line pairs that share their start or end points, and I want to draw the angular dimension between them. I want the dimension to be drawn to a distance of a fourth of the shortest line from the origin.
I used your function and I think the only thing that's wrong is the ArcPoint, the rest looks fine.
public static void CreateAngularDimensions(List<(ObjectId, ObjectId)> linePairs, Point3d origin, Transaction trans, BlockTableRecord btr) {
Matrix3d oldUcs = Editor.CurrentUserCoordinateSystem;
foreach ((ObjectId l1, ObjectId l2) in linePairs) {
Line line1 = trans.GetObject(l1, OpenMode.ForRead) as Line;
Line line2 = trans.GetObject(l2, OpenMode.ForRead) as Line;
Vector3d vec1;
Vector3d vec2;
Point3d end1, end2;
Matrix3d newUcs;
if (line1.StartPoint.Equals(origin)) {
vec1 = origin.GetVectorTo(line1.EndPoint);
end1 = line1.EndPoint;
} else {
vec1 = origin.GetVectorTo(line1.StartPoint);
end1 = line1.StartPoint;
}
if (line2.StartPoint.Equals(origin)) {
vec2 = origin.GetVectorTo(line2.EndPoint);
end2 = line2.EndPoint;
} else {
vec2 = origin.GetVectorTo(line2.StartPoint);
end2 = line2.StartPoint;
}
newUcs = Ucs3Points(origin, end1, end2);
Editor.CurrentUserCoordinateSystem = newUcs;
LineAngularDimension2 dimension = new LineAngularDimension2();
dimension.XLine1Start = origin;
dimension.XLine2Start = origin;
dimension.XLine2Start = end1;
dimension.XLine2End = end2;
Vector3d dimVec1 = dimension.XLine1Start.GetVectorTo(dimension.XLine1End);
Vector3d dimVec2 = dimension.XLine2Start.GetVectorTo(dimension.XLine2End);
Vector3d bisectorVec = dimVec1.Add(dimVec2).GetNormal();
dimension.ArcPoint = origin.Add(bisectorVec.MultiplyBy(Math.Min(line1.Length, line2.Length) / 4));
dimension.DimensionStyle = Database.Dimstyle;
CreateLayer("Cotas");
dimension.Layer = "Cotas";
btr.AppendEntity(dimension);
trans.AddNewlyCreatedDBObject(dimension, true);
}
Editor.CurrentUserCoordinateSystem = oldUcs;
}