Sorry for the delay. Here's my final code:
private List<DimensionInfo> dumpDimension(Dimension dimension)
{
Curve curve = dimension.Curve;
Line line = curve as Line;
XYZ point1 = null;
XYZ point2 = null;
XYZ direction = null;
IntersectionResult projection = null;
XYZ ortho = null;
BcGeCurve geCurve = null;
if(line != null)
{
if(line.IsBound)
{
point1 = line.GetEndPoint(0);
direction = line.Direction;
geCurve = createLine(point1, direction, false, Transform.Identity);
}
else
{
point1 = line.Origin;
direction = line.Direction;
geCurve = createLine(point1, direction, true, Transform.Identity);
}
}
else
{
geCurve = createCurve(curve.Tessellate(), Transform.Identity);
}
//dump dimension (segments) info
List<DimensionInfo> dimensionInfos = new List<DimensionInfo>();
if(dimension.Segments.Size == 0)
{
projection = line.Project(dimension.LeaderEndPosition);
ortho = dimension.LeaderEndPosition.Subtract(projection.XYZPoint);
//TODO: find the correct leader point
point1 = dimension.Origin.Subtract(direction.Multiply((double)dimension.Value / 2.0));
point2 = point1.Add(direction.Multiply((double)dimension.Value));
DimensionInfo dimensionInfo = new DimensionInfo(point1.Add(ortho), point2.Add(ortho), point1, dimension.TextPosition, dimension.ValueString)
dimensionInfos.Add(dimensionInfo);
}
else
{
foreach(DimensionSegment segment in dimension.Segments)
{
projection = line.Project(segment.LeaderEndPosition);
ortho = segment.LeaderEndPosition.Subtract(projection.XYZPoint);
//TODO: find the correct leader point
point1 = segment.Origin.Subtract(direction.Multiply((double)segment.Value / 2.0));
point2 = point1.Add(direction.Multiply((double)segment.Value));
DimensionInfo dimensionInfo = new DimensionInfo(point1.Add(ortho), point2.Add(ortho), point1, segment.TextPosition, segment.ValueString)
dimensionInfos.Add(dimensionInfo);
}
}
return dimensionInfos;
}
The "xlinePoint1" and "xlinePoint2" is not correct yet.
I'm looking forward for a solution.
--
Jonathan