Hello World

[email protected] Thu, 22 Jul 2004 22:54:33 -0400
Newsgroups gmane.comp.graphics.fluidiom
Message-ID <[email protected]>
I am considering using Fluidiom in my research but there is quite a 
bit of customization I need to make to the current code. I have been 
trying to get a simple HelloWorld example to work where I create a 
cube and set down a plane but the code seems to be fairly coupled. I 
figured I would then play around this getting the intervals to flex.

I have the cube but I am unable to get the Floor to show up. Any ideas?

Two files are included:
MyFabricFactory.java & HellowWorld.java

MyFabicFactory just builds a fabric object consisting of 8 verticies 
and 12 elastics.

Oh, one more thing, when I was running this, why did only two of the 
verticies have "balls" for the joints? 


//HelloWorld.java
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Set;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import nl.beautifulcode.fluidiom.fabric.Fabric;
import nl.beautifulcode.fluidiom.fabric.FabricShell;
import nl.beautifulcode.fluidiom.fabric.Interval;
import nl.beautifulcode.fluidiom.fabric.IntervalList;
import nl.beautifulcode.fluidiom.fabric.Joint;
import nl.beautifulcode.fluidiom.fabric.JointList;
import nl.beautifulcode.fluidiom.fabric.MuscleActivator;
import nl.beautifulcode.fluidiom.factory.TriangleFactory;
import nl.beautifulcode.fluidiom.gui.PhysicsPanel;
import nl.beautifulcode.fluidiom.gui.Util;
import nl.beautifulcode.fluidiom.gui.ViewPanel;
import nl.beautifulcode.fluidiom.jogl.JoglFabric;
import nl.beautifulcode.fluidiom.jogl.JoglFabricView;

public class HelloWorld {
	private static JFrame fabricFrame;
	private static JoglFabricView joglFabricView;
	
	private static void createDemoFrame() {
		Dimension screen = Toolkit.getDefaultToolkit
().getScreenSize();
		
		joglFabricView = new JoglFabricView();
		joglFabricView.getFabric().setViewMode
(JoglFabric.VIEW_MODE_ELLIPSOID_CYLINDER);
		
		fabricFrame = new JFrame();
			fabricFrame.getContentPane().add
(joglFabricView,BorderLayout.CENTER);
			
		FabricShell.get().addFabricListener(joglFabricView);
		fabricFrame.setSize(screen.width,screen.height);
		fabricFrame.addWindowListener(new WindowKiller());
		
	}
	
	private static void show() {
		new MuscleActivator(FabricShell.get());
		fabricFrame.setVisible(true);
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				joglFabricView.start();
			}
		});
	}
	
	private static class WindowKiller extends WindowAdapter {
		public void windowClosing(WindowEvent e) {
			joglFabricView.stop();
			System.exit(0);
		}
	}
	
	public static void main(String[] args) {
		
		FabricShell fs = FabricShell.get();
		Fabric fabric = MyFabricFactory.newInstance(); 
		fs.setFabric(fabric);

		createDemoFrame();
		show();
	}
}

//MyFabricFactory.java
import nl.beautifulcode.fluidiom.fabric.Fabric;
import nl.beautifulcode.fluidiom.fabric.FabricOccupant;
import nl.beautifulcode.fluidiom.fabric.Interval;
import nl.beautifulcode.fluidiom.fabric.IntervalList;
import nl.beautifulcode.fluidiom.fabric.Joint;
import nl.beautifulcode.fluidiom.fabric.JointList;
import nl.beautifulcode.fluidiom.fabric.Physics;

public class MyFabricFactory {
	
	public static Fabric newInstance(){
		Fabric fabric = new Fabric();
		
		fabric.physics = new Physics();
		fabric.physics.gravityOn = true;
		
		fabric.jointList = new JointList();
		fabric.intervalList = new IntervalList();

//four lower joints formig a square
		Joint joint1 = createJoint(fabric,0,0,1);
		fabric.jointList.add(joint1);
		Joint joint2 = createJoint(fabric,0,1,1);
		fabric.jointList.add(joint2);
		Joint joint3 = createJoint(fabric,1,1,1);
		fabric.jointList.add(joint3);
		Joint joint4 = createJoint(fabric,1,0,1);
		fabric.jointList.add(joint4);
		
//four upper joints completing the verticies ofthe cube
		Joint joint5 = createJoint(fabric,0,0,2);
		fabric.jointList.add(joint1);
		Joint joint6 = createJoint(fabric,0,1,2);
		fabric.jointList.add(joint2);
		Joint joint7 = createJoint(fabric,1,1,2);
		fabric.jointList.add(joint3);
		Joint joint8 = createJoint(fabric,1,0,1);
		fabric.jointList.add(joint4);

//bottom
		Interval interval = createInterval(fabric, joint1, 
joint2);
		fabric.intervalList.add(interval);
		interval = createInterval(fabric, joint2, joint3);
		fabric.intervalList.add(interval);
		interval = createInterval(fabric, joint3, joint4);
		fabric.intervalList.add(interval);
		interval = createInterval(fabric, joint1, joint4);
		fabric.intervalList.add(interval);
		
// top
		interval = createInterval(fabric, joint5, joint8);
		fabric.intervalList.add(interval);
		interval = createInterval(fabric, joint5, joint6);
		fabric.intervalList.add(interval);
		interval = createInterval(fabric, joint6, joint7);
		fabric.intervalList.add(interval);
		interval = createInterval(fabric, joint7, joint8);
		fabric.intervalList.add(interval);
		
		
//sides
		interval = createInterval(fabric, joint1, joint5);
		fabric.intervalList.add(interval);
		interval = createInterval(fabric, joint2, joint6);
		fabric.intervalList.add(interval);
		interval = createInterval(fabric, joint3, joint7);
		fabric.intervalList.add(interval);
		interval = createInterval(fabric, joint4, joint8);
		fabric.intervalList.add(interval);
		
		fabric.intervalList.add(createInterval
(fabric,fabric.jointList.content[0],fabric.jointList.content[1]));

		fabric.run();
		return fabric;
	}
	
	private static Joint createJoint(Fabric theFabric, float 
theX, float theY, float theZ) {
		Joint joint = new Joint();
		joint.run();
		theFabric.put(joint.id,joint);
		joint.locus.set(theX,theY,theZ);
		joint.put(Joint.OCCUPANT_KEY,null);
		return(joint);
	}

	private static Interval createInterval(Fabric theFabric, 
Joint theAlpha, Joint theOmega) {
		Interval interval = new Interval(theAlpha,theOmega);
		interval.run();
		theFabric.put(interval.id,interval);
		return(interval);
	}
}


========================
Rob Leclerc
Yale University
email: [email protected]
email: [email protected]
webpage: www.cpsc.ucalgary.ca/~leclerc
========================


-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click