두 도면 비교를 쉽게 하기 위해 BlockReference를 Explode 시키기로 했습니다.
Attribute를 제외한 다른 항목들은 Expolode한 결과를 그대로 사용하면 되는데 Attribute는 Explode한 결과가 Explode하기 전과 달랐습니다.
이를 해결하기 위해 여러 방법을 시도해 봤는데 그 결과가 만족스럽지 못했습니다.
Explode한 Attribute의 수가 화면에 보이는(Explode하기 전의) 수와 다를 경우도 있고, Attribute의 TAG를 찾지 못하는 경우도 있었습니다.
여러 방법을 시도하는 중 가장 합리적인 방법을 찾았습니다.
아래는 Attribute에 대응하는 Text를 생성하는 방법입니다.
Attribute를 제외한 다른 항목들은 Expolode한 결과를 그대로 사용하면 되는데 Attribute는 Explode한 결과가 Explode하기 전과 달랐습니다.
이를 해결하기 위해 여러 방법을 시도해 봤는데 그 결과가 만족스럽지 못했습니다.
Explode한 Attribute의 수가 화면에 보이는(Explode하기 전의) 수와 다를 경우도 있고, Attribute의 TAG를 찾지 못하는 경우도 있었습니다.
여러 방법을 시도하는 중 가장 합리적인 방법을 찾았습니다.
아래는 Attribute에 대응하는 Text를 생성하는 방법입니다.
var attributes = blkref.Attributes.Where(x => x.Value.Visible).ToList();
foreach(var attr in attributes)
{
var pt = attr.Value.InsertionPoint.Clone() as devDept.Geometry.Point3D;
var plane = attr.Value.Plane.Clone() as devDept.Geometry.Plane;
string TextString = attr.Value.Value;
#region 특수 문자 처리
TextString = TextString.Replace("%%", string.Empty);
#endregion
var txt = new Text(plane, pt, TextString, attr.Value.Height)
{
LayerName = LayerName,
Color = color != Color.Empty ? color : GetAttributeColor(Layers, GetEntColor(Layers, blkref), attr.Value)
ColorMethod = colorMethodType.byEntity,
StyleName = attr.Value.StyleName,
WidthFactor = attr.Value.WidthFactor,
Alignment = attr.Value.Alignment
};
/// 생성한 Text에 BlockReference의 Transformation을 적용해줘야 합니다.
txt.TransformBy(blkref.Transformation);
res.Add(txt);
}
댓글
댓글 쓰기