Пример #1
0
bool TerosCam::twodconvert (double p1 [3], double p2 [3], double p3 [3], TerosObject obj, TerosPolygon cTerosPolygon)
{
	int nogo = 0;
    
	double pscale [3];
	double actpt [3];
    
	if (obj.putctrscale ())
	{
		pscale [0] = obj.centerx ();
		pscale [1] = obj.centery ();
		pscale [2] = obj.centerz ();
	}
	else
	{
		obj.cpyscalep (pscale);
	}
    
	applyrotation (cTerosPolygon.putpx (0), cTerosPolygon.putpy (0), cTerosPolygon.putpz (0), pscale, actpt, obj);
    
	if (actpt [0] < 0)
	{
		nogo++;
	}
    
	scalept (actpt[0], actpt [1], actpt [2], p1);
    
	applyrotation (cTerosPolygon.putpx (1), cTerosPolygon.putpy (1), cTerosPolygon.putpz (1), pscale, actpt, obj);
    
	if (actpt [0] < 0)
	{
		nogo++;
	}
    
	scalept (actpt[0], actpt [1], actpt [2], p2);
    
	applyrotation (cTerosPolygon.putpx (2), cTerosPolygon.putpy (2), cTerosPolygon.putpz (2), pscale, actpt, obj);
    
	if (actpt [0] < 0)
	{
		nogo++;
	}
    
	if (nogo >= 3)
	{
		return false;
	}
    
	scalept (actpt[0], actpt [1], actpt [2], p3);
    
	return true;
}
Пример #2
0
Memimage*
statgraph(Graph *g)
{
	int i, nbin, x, lo, hi, min, max, first;
	Memimage *m;
	Rectangle r;
	Statbin *b, bin[2000];	/* 32 kB, but whack is worse */

	needstack(8192);	/* double check that bin didn't kill us */
	
	if(g->wid <= MinWidth)
		g->wid = DefaultWidth;
	if(g->ht <= MinHeight)
		g->ht = DefaultHeight;
	if(g->wid > nelem(bin))
		g->wid = nelem(bin);
	if(g->fill < 0)
		g->fill = ((uint)(uintptr)g->arg>>8)%nelem(lofill);
	if(g->fill > nelem(lofill))
		g->fill %= nelem(lofill);
	
	nbin = g->wid - (Left+Right);
	binstats(g->fn, g->arg, g->t0, g->t1, bin, nbin);

	/*
	 * compute bounds
	 */
	min = g->min;
	max = g->max;
	if(min < 0 || max <= min){
		min = max = 0;
		first = 1;
		for(i=0; i<nbin; i++){
			b = &bin[i];
			if(b->nsamp == 0)
				continue;
			if(first || b->min < min)
				min = b->min;
			if(first || b->max > max)
				max = b->max;
			first = 0;
		}
	}

	qlock(&memdrawlock);
	ginit();
	if(smallfont==nil || black==nil || blue==nil || red==nil || hifill[0]==nil || lofill[0]==nil){
		werrstr("graphics initialization failed: %r");
		qunlock(&memdrawlock);
		return nil;
	}

	/* fresh image */
	m = allocmemimage(Rect(0,0,g->wid,g->ht), ABGR32);
	if(m == nil){
		qunlock(&memdrawlock);
		return nil;
	}
	r = Rect(Left, Top, g->wid-Right, g->ht-Bottom);
	memfillcolor(m, DTransparent);
	
	/* x axis */
	memimagedraw(m, Rect(r.min.x, r.max.y, r.max.x, r.max.y+1), black, ZP, memopaque, ZP, S);

	/* y labels */
	drawlabel(m, r.min, max);
	if(min != 0)
		drawlabel(m, Pt(r.min.x, r.max.y-smallfont->height), min);
	
	/* actual data */
	for(i=0; i<nbin; i++){
		b = &bin[i];
		if(b->nsamp == 0)
			continue;
		lo = scalept(b->min, min, max, r.max.y, r.min.y);
		hi = scalept(b->max, min, max, r.max.y, r.min.y);
		x = r.min.x+i;
		hi-=2;
		memimagedraw(m, Rect(x, hi, x+1,lo), hifill[g->fill%nelem(hifill)], ZP, memopaque, ZP, S);
		memimagedraw(m, Rect(x, lo, x+1, r.max.y), lofill[g->fill%nelem(lofill)], ZP, memopaque, ZP, S);
	}

	if(bin[nbin-1].nsamp)
		drawlabel(m, Pt(r.max.x, r.min.y+(Dy(r)-smallfont->height)/2), bin[nbin-1].avg);
	qunlock(&memdrawlock);
	return m;
}