在对工程图中所有尺寸进行自动球标标注时,对尺寸位置的排序是一个很关键的问题。基本思路:
- 按视图位置从左到右、从上到下排序
- 以当前视图中心为原点建立极坐标系,按逆时针排序
- 对于相邻尺寸位置顺序进行优化
- 按视图位置排序
这里面存在一个问题:当视图为局部显示的时候,视图中心并非实际显示的中心,这时候会出现一些异常,例如:当 AB 两个视图在图纸上是上下对齐,A 在上 B 在下,按正常排序 A 中尺寸序号应该在 B 中尺寸序号的前面,如果这时候其中一个使用了局部视图,导致视图中心 A 在 B 的右侧,这样 B 中尺寸序号就会排在 A 中尺寸序号的前面。
这个异常影响不会太大,而且单个试图内序号排序都是正常的。
bool SortByView(const DimensionStruct &td1, const DimensionStruct &td2)
{
DimensionStruct d1, d2;
d1 = td1;
d2 = td2;
float vcx1, vcx2, vcy1, vcy2;
vcx1 = d1.GetViewCenter()->get(0);
vcx2 = d2.GetViewCenter()->get(0);
vcy1 = d1.GetViewCenter()->get(1);
vcy2 = d2.GetViewCenter()->get(1);
if (vcx1 > vcx2)
{
return false; //视图中心:d1在d2的右侧
}
else if (IsEqual(vcx1, vcx2) && (vcy1 < vcy2))
{