/* BBBeakerCamera.m				 
 *
 * Here is the view that shows us the nice molecules.
 *
 * For more interface-info see the header file. More in depth information
 * can be found in the source-code.
 *
 * Written by: 		Thomas Engel
 * Created:    		28.10.1993 (Copyleft)
 * Last modified: 	25.05.1994
 */

#import "BBBeakerCamera.h"
#import "BBAppManager.h"
#import "Preferences.subproj/BBPreferencesManager.h"
#import "Preferences.subproj/BBDefaultCamera.h"
#import "Rotator.subproj/BBRotator.h"
#import "BBBeaker.h"
#import "BBBeakerShape.h"
#import "BBBackgroundShape.h"

@implementation BBBeakerCamera

- createWorldFor:aBeaker	
{
	// Let's setup some basics. First the Lights. Ambient and Spotlight
	// Then some color and other settings.
	
	RtPoint	fromPoint;
	RtPoint	toPoint;
	NXColor	background;
	id		aShape;
	
	// Here is the camera..
	
	fromPoint[0] = 0.0;
	fromPoint[1] = 0.0;
	fromPoint[2] = -40.0;

	toPoint[0] = 0.0;
	toPoint[1] = 0.0;
	toPoint[2] = 0.0;

	// Here we create the WorldShape and delete the old one.
	// We will use no clipping by default!
	
	beakerShape = [BBBeakerShape new];
	[[self setWorldShape:beakerShape] free];

	[self setEyeAt:fromPoint toward:toPoint roll:0.0];
	[self setProjection:N3D_Perspective];
	[self setClipPlanesNear:RI_EPSILON far:RI_INFINITY];
	
	// Now some Background coloring...
	
	background = [[[[NXApp delegate] preferences]
									 findDefaultFor:self]
									 backgroundColor];
									 
	[self setBackgroundColor:background];
	[self setDrawBackgroundColor:YES];

	// This is a real hack for printing other colors than black background!
	// Only use it if you really have to. It really is stupid. But it works.
	
	if( [[[[NXApp delegate] preferences]
							findDefaultFor:self]
							doesPrintBackgroundColor] )
	{
		aShape = [BBBackgroundShape new];
		[aShape setBackgroundColor:background];
		[aShape group:beakerShape];
	}
	[self setHider:N3D_HiddenRendering];
	
	[self display];
	return self;
}

- addShape:aShape
{
	[aShape group:beakerShape];
	return self;
}

- renderSelf:(RtToken)context
{
	return self;
}

@end

/*
 * History: 24.05.94 Added background color hack.
 *
 *			07.05.94 Fits new naming style and has new init method.
 *
 *			27.03.94 Cleaned up the init method.
 *
 *			26.03.94 Removed the setEyeZ method and switched to the original
 *					 NeXT methods getEyeAt....
 *
 *			17.01.94 Moved the camera and light to the -z side.
 *
 *			28.12.93 Removed the rotator settings and moved them to the
 *					 cameraWindow.
 *
 *
 * Bugs: - Yes.
 */