package org.vorthmann.zome.app.impl;
import javax.vecmath.Vector3f;
import com.vzome.core.math.RealVector;
import com.vzome.core.math.symmetry.Axis;
import com.vzome.core.math.symmetry.OrbitSet;
import com.vzome.desktop.controller.CameraController;
public class SymmetrySnapper implements CameraController.Snapper
{
private final OrbitSet orbitSet;
public SymmetrySnapper( OrbitSet orbitSet )
{
this.orbitSet = orbitSet;
}
@Override
public void snapDirections( Vector3f lookDir, Vector3f upDir )
{
RealVector vector = new RealVector( lookDir .x, lookDir .y, lookDir .z );
Axis axis = orbitSet .getAxis( vector );
if ( axis == null )
return;
RealVector rv = axis .normal() .toRealVector();
lookDir .set( (float) rv.x, (float) rv.y, (float) rv.z );
vector = new RealVector( upDir .x, upDir .y, upDir .z );
axis = orbitSet .getAxis( vector );
rv = axis .normal() .toRealVector();
upDir .set( (float) rv.x, (float) rv.y, (float) rv.z );
Vector3f cross = new Vector3f();
cross .cross( lookDir, upDir );
upDir .cross( cross, lookDir );
}
}