view src/samer/j3d/J3DViewer.java.not @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
line wrap: on
line source
/*
*/
package samer.j3d;

import samer.core.*;
import samer.maths.*;
import samer.tools.*;
import java.io.*;
import java.awt.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;

public class J3DViewer extends Util
{
	Shape3D	shape;
		
	public J3DViewer(Root root, Matrix P, VVector A) throws Exception
	{		
		if (P==null) {
			Shell.print("creating PointsMatrix");
			P=new Matrix("PointsMatrix",A.size(),4);
			new MatrixAgent(P).execute("load",Shell.env());
		}
		// create scene
		{
			int viewerType=Shell.getInt("viewerType",0);
			Shape3D shape;

			switch (viewerType) {
				case 1:
					shape=new Shape3D(new MatrixPointArrayAlpha(P,A), transparent(0,points()));
					break;
				case 2:
					shape=new Shape3D(new MatrixPoints4D(P,A), transparent(0,points()));
					break;
				case 3:
					Geometry geom=new PatchArrayAlpha(P,A);
					shape=new Shape3D(geom, rndr(flat(transparent(0,patch())),false));
					break;
				default: 
					shape=new Shape3D(new MatrixPointArray(P,A), points()); 
					addBackground(root,new Background(new Color3f(0.26f,0.23f,0.35f)));
					break;
			}
		}
	}

	public javax.media.j3d.Node getShape() { return rotaterise(shape); }
	
	private Appearance rndr(Appearance a, boolean ignore)
	{
		RenderingAttributes	ra=new RenderingAttributes();
		ra.setDepthBufferEnable(false);
		ra.setIgnoreVertexColors(ignore);
		a.setRenderingAttributes(ra);
		return a;
	}


	private static Group rotaterise(javax.media.j3d.Node n)
	{
		TransformGroup	tg = new TransformGroup();
		TransformGroup tg2=new TransformGroup();

		mouseRotate(tg);
		mouseTranslate(tg);
		mouseZoom(tg);
		addRotator(tg2,Shell.getInt("rotation.period",10000));
		tg.addChild(n);
		tg2.addChild(tg);
		return tg2;
	}
}