No special functions, but in that case you only need to rotate two vertex to complete the shape.

Code:
#include <acknex.h>

#define PRAGMA_POINTER

void vec2d_rotate ( VECTOR *_v, var angle )
{
	var x = fcos(angle,_v->x) - fsin(angle,_v->y);
	_v->y = fsin(angle,_v->x) + fcos(angle,_v->y);
	_v->x = x;
}

void main ()
{
	wait(1);
	level_load ( "" );
	
	VECTOR vPoint;
	vec_set ( &vPoint, vector(300,240,100) );
	
	VECTOR vMax, vMin;
	vec_set ( &vMax, vector(400,200,200) );
	vec_set ( &vMin, vector(0,0,0) );
	
	VECTOR vCenter, vBounds;
	vec_lerp ( &vCenter, &vMax, &vMin, 0.5 );
	vec_diff ( &vBounds, &vMax, &vCenter );
	
	while ( !key_esc )
	{
		camera->pan = ang ( camera->pan + mickey.x * 0.3 );
		camera->tilt = clamp ( camera->tilt + mickey.y * 0.3, -85, 85 );
		vec_for_angle ( &camera->x, &camera->pan );
		vec_scale ( &camera->x, -1000 );
		VECTOR vMove;
		vec_set ( &vMove, vector(key_force.y,-key_force.x,0) );
		vec_normalize ( &vMove, 10*time_step );
		vec2d_rotate ( &vMove, camera->pan );
		vec_add ( &vPoint, &vMove );
		vec_add ( &camera->x, &vPoint );
		
		var nRotation = total_ticks * 2;
		
		VECTOR vOffset;
		vec_diff ( &vOffset, &vPoint, &vCenter );
		vec2d_rotate ( &vOffset, -nRotation );
		COLOR colCube;
		if ( ( abs(vOffset.x) < abs(vBounds.x) ) && ( abs(vOffset.y) < abs(vBounds.y) ) && ( abs(vOffset.z) < abs(vBounds.z) ) )
			vec_set ( &colCube, COLOR_GREEN );
		else
			vec_set ( &colCube, COLOR_RED );
		
		VECTOR vP1, vP2;
		vec_set ( &vP1, &vBounds );
		vec_set ( &vP2, vector(vBounds.x,-vBounds.y,-vBounds.z) );
		vec2d_rotate ( &vP1, nRotation );
		vec2d_rotate ( &vP2, nRotation );
		
		draw_point3d ( &vPoint, COLOR_WHITE, 100, 16 );
		
		draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, vCenter.z+vP1.z), NULL,     100 );  
		draw_line3d ( vector ( vCenter.x+vP2.x, vCenter.y+vP2.y, vCenter.z+vP1.z), &colCube, 100 );
		draw_line3d ( vector ( vCenter.x-vP1.x, vCenter.y-vP1.y, vCenter.z+vP1.z), &colCube, 100 ); 
		draw_line3d ( vector ( vCenter.x-vP2.x, vCenter.y-vP2.y, vCenter.z+vP1.z), &colCube, 100 ); 
		draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, vCenter.z+vP1.z), &colCube, 100 );
		draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, vCenter.z+vP2.z), &colCube, 100 );
		
		draw_line3d ( vector ( vCenter.x-vP1.x, vCenter.y-vP1.y, vCenter.z+vP2.z), NULL,     100 ); 
		draw_line3d ( vector ( vCenter.x-vP2.x, vCenter.y-vP2.y, vCenter.z+vP2.z), &colCube, 100 ); 
		draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, vCenter.z+vP2.z), &colCube, 100 );
		draw_line3d ( vector ( vCenter.x+vP2.x, vCenter.y+vP2.y, vCenter.z+vP2.z), &colCube, 100 );
		draw_line3d ( vector ( vCenter.x-vP1.x, vCenter.y-vP1.y, vCenter.z+vP2.z), &colCube, 100 ); 
		draw_line3d ( vector ( vCenter.x-vP1.x, vCenter.y-vP1.y, vCenter.z+vP1.z), &colCube, 100 ); 
		
		draw_line3d ( vector ( vCenter.x+vP2.x, vCenter.y+vP2.y, vCenter.z+vP2.z), NULL,     100 );
		draw_line3d ( vector ( vCenter.x+vP2.x, vCenter.y+vP2.y, vCenter.z+vP1.z), &colCube, 100 );
		
		draw_line3d ( vector ( vCenter.x-vP2.x, vCenter.y-vP2.y, vCenter.z+vP2.z), NULL,     100 );
		draw_line3d ( vector ( vCenter.x-vP2.x, vCenter.y-vP2.y, vCenter.z+vP1.z), &colCube, 100 );
		
		wait(1);
	}
	
	sys_exit ( NULL );
}



Salud!