//(c) Copyright 2011, Scott Vorthmann.
package org.vorthmann.zome.render.java3d;
import javax.media.j3d.Geometry;
import javax.media.j3d.GeometryArray;
import javax.media.j3d.LineArray;
import javax.media.j3d.PointArray;
import javax.vecmath.Point3d;
import com.vzome.core.algebra.AlgebraicField;
import com.vzome.core.algebra.AlgebraicVector;
import com.vzome.core.math.RealVector;
import com.vzome.core.math.symmetry.Embedding;
import com.vzome.core.model.Connector;
import com.vzome.core.model.Manifestation;
import com.vzome.core.model.Strut;
import com.vzome.core.render.Colors;
import com.vzome.core.render.RenderedManifestation;
public class Java3dWireframeFactory extends Java3dFactory
{
public Java3dWireframeFactory( Colors colors, Boolean emissiveHighlights )
{
super( colors, emissiveHighlights );
}
@Override
Geometry makeSolidGeometry( RenderedManifestation rm )
{
Manifestation man = rm .getManifestation();
if ( man instanceof Strut )
return makeLineGeometry( (Strut) man, rm .getShape() .getField(), rm .getEmbedding() );
else if ( man instanceof Connector )
return makePointGeometry( (Connector) man, rm .getShape() .getField(), rm .getEmbedding() );
else
// panels have polyhedron shapes
return super .makeSolidGeometry( rm );
}
LineArray makeLineGeometry( Strut strut, AlgebraicField field, Embedding embedding )
{
LineArray result = new LineArray( 2, GeometryArray.COORDINATES );
Point3d pt = null;
AlgebraicVector gv = null;
RealVector v = null;
gv = strut .getLocation();
v = embedding .embedInR3( gv );
pt = new Point3d();
pt.x = v.x; pt.y = v.y; pt.z = v.z;
result .setCoordinate( 0, pt );
gv = strut .getEnd();
v = embedding .embedInR3( gv );
pt = new Point3d();
pt.x = v.x; pt.y = v.y; pt.z = v.z;
result .setCoordinate( 1, pt );
return result;
}
PointArray makePointGeometry( Connector ball, AlgebraicField field, Embedding embedding )
{
PointArray result = new PointArray( 1, GeometryArray.COORDINATES );
Point3d pt = new Point3d();
AlgebraicVector gv = null;
RealVector v = null;
gv = ball .getLocation();
v = embedding .embedInR3( gv );
pt.x = v.x; pt.y = v.y; pt.z = v.z;
result .setCoordinate( 0, pt );
return result;
}
}