//(c) Copyright 2011, Scott Vorthmann.
package com.vzome.desktop.controller;
import java.awt.image.RenderedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.vzome.core.render.RenderedModel;
import com.vzome.core.render.RenderingChanges;
import com.vzome.core.viewing.Lights;
import com.vzome.core.viewing.ThumbnailRenderer;
import com.vzome.core.viewing.Camera;
public class ThumbnailRendererImpl implements ThumbnailRenderer
{
private final RenderingChanges scene;
private final RenderingViewer viewer;
private final CameraController vpm;
private static final Logger logger = Logger.getLogger( "org.vorthmann.zome.thumbnails" );
public ThumbnailRendererImpl( RenderingViewer.Factory rvFactory, Lights sceneLighting )
{
vpm = new CameraController( new Camera() );
scene = rvFactory .createRenderingChanges( sceneLighting, false, vpm );
viewer = rvFactory .createRenderingViewer( scene, null );
vpm .addViewer( viewer );
}
/* (non-Javadoc)
* @see org.vorthmann.ui3d.ThumbnailRenderer#captureSnapshot(org.vorthmann.zome.render.RenderedModel, org.vorthmann.zome.viewing.ViewModel, int, org.vorthmann.ui3d.ThumbnailRendererImpl.Listener)
*/
@Override
public void captureSnapshot( RenderedModel snapshot, Camera view, int maxSize, final Listener callback )
{
vpm .restoreView( view );
scene .reset();
if ( logger .isLoggable( Level.FINER ) )
{
logger .finer( "%%%%%%%%%%%%%%%%%%%%%%%%%% START THUMBNAIL" );
}
synchronized ( snapshot )
{
RenderedModel .renderChange( new RenderedModel( null, null ), snapshot, scene );
}
if ( logger .isLoggable( Level.FINER ) )
{
logger .finer( "%%%%%%%%%%%%%%%%%%%%%%%%%% END THUMBNAIL" );
}
viewer .captureImage( 80, new RenderingViewer.ImageCapture()
{
@Override
public void captureImage( RenderedImage image )
{
callback .thumbnailReady( image );
}
} );
}
}