Ejemplo n.º 1
0
void
arrow::grow_extent( extent& world)
{
	if (degenerate())
		return;
	double hl, hw, len, sw;
	effective_geometry( hw, sw, len, hl, 1.0);
	vector x = axis.cross(up).norm() * 0.5;
	vector y = axis.cross(x).norm() * 0.5;
	vector base = pos + axis.norm()*(len-hl);
	for(int i=-1; i<=+1; i+=2)
		for(int j=-1; j<=+1; j+=2) {
			world.add_point( pos + x*(i*sw) + y*(j*sw) );
			world.add_point( base + x*(i*hw) + y*(j*hw) );
		}
	world.add_point( pos + axis);
	world.add_body();
}
Ejemplo n.º 2
0
void
cone::grow_extent( extent& e)
{
	if (degenerate())
		return;
	e.add_circle( pos, axis.norm(), radius );
	e.add_point( pos + axis);
	e.add_body();
}
Ejemplo n.º 3
0
void
convex::grow_extent( extent& world)
{
	if (degenerate())
		return;

	long check = checksum();
	if (check != last_checksum) {
		recalc();
	}
	assert( hull.size() != 0);

	for (std::vector<face>::const_iterator f = hull.begin(); f != hull.end(); ++f) {
		world.add_point( f->corner[0]);
		world.add_point( f->corner[1]);
		world.add_point( f->corner[2]);
	}
	world.add_body();
}
Ejemplo n.º 4
0
void
faces::grow_extent( extent& world)
{
	const double* pos_i = pos.data();
	const double* pos_end = pos.data( count - count%3 );
	while (pos_i < pos_end) {
		world.add_point( vector(pos_i));
		pos_i += 3; // 3 doubles per vector point
	}
	world.add_body();
}
Ejemplo n.º 5
0
void label::grow_extent( extent& e)
{
	e.add_point( pos );
}