文件名称:C++代码中关于文字标注冲突解决的代码
文件大小:6KB
文件格式:RTF
更新时间:2012-06-23 17:16:31
搜索
在文字标记中搜索的代码
在指定的一个矩形区域内((0,0)-(SizeX,SizeY))添加标牌,每个标牌都是大小固定的矩形(sx,sy),每个标牌有个初始指定的左上方位置,如果该标牌没有与已经放置的其它标牌重叠的话,便就放置在该位置,否则在离该初始位置最近的空隙地方放置该标牌,直到没有地方放置为止(返回一个代表没有空闲位置的返回值)。
int x0,y0; //当前目标点中心坐标
int x,y; //当前标牌左上角坐标
int n; //目标总数
int dmax=100; //标牌与目标间容许最大间隔
int dmin=5; //标牌与目标间容许最小间隔
HRGN hComRgn; //已绘各标牌区域的并
HRGN hRgn; //当前标牌区域
HRGN hIntersectRgn;
//绘第一个目标的标牌
●获取第一个目标的x0,y0
x=x0+dmin; //将第一个标牌定在目标右方
if(x+sx>SizeX)x=x0-sx-dmin;//将第一个标牌改定在目标左方
y=y0-sy/2.;
if(y<0)y=0;
if(y+sy>SizeY)y=SizeY-sy;
●在(x,y)处输出第一个标牌
hComRgn=CreateRectRgn(x,y,x+sx,y+sy);
//绘其余各目标的标牌
for(int i=1;i<=n;i++)
{
int cross;
●获取第i个目标的x0,y0
x=x0+dmin;
if(x+sx>SizeX)x=x0-sx-dmin;
y=y0-sy/2.;
if(y<0)y=0;
if(y+sy>SizeY)y=SizeY-sy;
hRgn=CreateRectRgn(x,y,x+sx,y+sy);
hIntersectRgn=CreateRectRgn(0,0,0,0);
cross=CombineRgn(hIntersectRgn,hComRgn,hRgn,RGN_AND); //求交测试
if(cross!=NULLREGION)
{
int xmin,xmax,ymin,ymax;
int delta=2;
int d=dmin;
while(d