Exemple #1
0
double rect_overlap(int x1, int y1, int x2, int y2, int X1, int Y1,
    int X2, int Y2) {
	double a, A, o;
	sraRegionPtr r, R;
	sraRectangleIterator *iter;
	sraRect rt;

	a = nabs((x2 - x1) * (y2 - y1));
	A = nabs((X2 - X1) * (Y2 - Y1));

	r = sraRgnCreateRect(x1, y1, x2, y2);
	R = sraRgnCreateRect(X1, Y1, X2, Y2);

	sraRgnAnd(r, R);
	
	o = 0.0;
	iter = sraRgnGetIterator(r);
	while (sraRgnIteratorNext(iter, &rt)) {
		o += nabs( (rt.x2 - rt.x1) * (rt.y2 - rt.y1) );
	}
	sraRgnReleaseIterator(iter);

	sraRgnDestroy(r);
	sraRgnDestroy(R);

	if (a < A) {
		o = o/a;
	} else {
		o = o/A;
	}
	return o;
}
Exemple #2
0
sraRectangleIterator *sraRgnGetReverseIterator(sraRegion *s,rfbBool reverseX,rfbBool reverseY)
{
  sraRectangleIterator *i = sraRgnGetIterator(s);
  if(reverseY) {
    i->sPtrs[1] = &(s->front);
    i->sPtrs[0] = &(s->back);
  }
  i->reverseX = reverseX;
  i->reverseY = reverseY;
  return(i);
}
Exemple #3
0
/* pipe the output to sort|uniq -u and you'll get the errors. */
int main(int argc, char** argv)
{
    sraRegionPtr region, region1, region2;
    sraRectangleIterator* i;
    sraRect rect;
    rfbBool b;

    region = sraRgnCreateRect(10, 10, 600, 300);
    region1 = sraRgnCreateRect(40, 50, 350, 200);
    region2 = sraRgnCreateRect(0, 0, 20, 40);

    sraRgnPrint(region);
    printf("\n[(10-300)[(10-600)]]\n\n");

    b = sraRgnSubtract(region, region1);
    printf("%s ",b?"true":"false");
    sraRgnPrint(region);
    printf("\ntrue [(10-50)[(10-600)](50-200)[(10-40)(350-600)](200-300)[(10-600)]]\n\n");

    sraRgnOr(region, region2);
    printf("%ld\n6\n\n", sraRgnCountRects(region));

    i = sraRgnGetIterator(region);
    while(sraRgnIteratorNext(i, &rect))
        printf("%dx%d+%d+%d ",
               rect.x2-rect.x1,rect.y2-rect.y1,
               rect.x1,rect.y1);
    sraRgnReleaseIterator(i);
    printf("\n20x10+0+0 600x30+0+10 590x10+10+40 30x150+10+50 250x150+350+50 590x100+10+200 \n\n");

    i = sraRgnGetReverseIterator(region,1,0);
    while(sraRgnIteratorNext(i, &rect))
        printf("%dx%d+%d+%d ",
               rect.x2-rect.x1,rect.y2-rect.y1,
               rect.x1,rect.y1);
    sraRgnReleaseIterator(i);
    printf("\n20x10+0+0 600x30+0+10 590x10+10+40 250x150+350+50 30x150+10+50 590x100+10+200 \n\n");

    i = sraRgnGetReverseIterator(region,1,1);
    while(sraRgnIteratorNext(i, &rect))
        printf("%dx%d+%d+%d ",
               rect.x2-rect.x1,rect.y2-rect.y1,
               rect.x1,rect.y1);
    sraRgnReleaseIterator(i);
    printf("\n590x100+10+200 250x150+350+50 30x150+10+50 590x10+10+40 600x30+0+10 20x10+0+0 \n\n");

    sraRgnDestroy(region);
    sraRgnDestroy(region1);
    sraRgnDestroy(region2);

    return(0);
}