K
KimWangLee
Gast
Hier erst mal der Code
Wie man aus dem Code vielleicht erkennen kann funktioniert das Vergrößern bzw. Verkleinern noch das Auslesen nicht. Ich weiß das man mit Transform3D bzw setScale den Würfel skalieren kann, aber wie soll ich die Transform3D an die TransformGroup bringen? Und wie kann ich auf den Würfel zugreifen, wenn ich mit getScale die Größe auslesen will.
Danke im Vorraus
Code:
import java.awt.GraphicsConfiguration;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.Geometry;
import javax.media.j3d.Group;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.vecmath.Vector3d;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.picking.PickZoomBehavior;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
public class MyUniverse implements ActionListener{
private JFrame f = new JFrame();
private JPanel p = new JPanel();
JButton b = new JButton("Erzeugen");
JButton bu = new JButton("Löschen");
//JButton but = new JButton("Dialogfeld");
JButton butt = new JButton("Vergrößern");
JButton butto = new JButton("Verkleinern");
JButton button = new JButton("Auslesen");
JTextField t = new JTextField();
private Canvas3D canvas;
private SimpleUniverse universe = null;
private BranchGroup Root = new BranchGroup();
public MyUniverse(){
f.setSize(630, 500);
f.setLocation(100, 100);
f.setTitle("Geometrische Körper Berechner");
f.setLayout(null);
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
canvas = new Canvas3D( config );
canvas.setBounds(130, 0, 500, 500);
universe = new SimpleUniverse( canvas );
universe.getViewingPlatform().setNominalViewingTransform();
b.setBounds(10, 10, 100, 40);
b.addActionListener(this);
bu.setBounds(10, 60, 100, 40);
bu.addActionListener(this);
//but.setBounds(10, 110, 80, 40);
//but.addActionListener(this);
butt.setBounds(10, 160, 100, 40);
butt.addActionListener(this);
butto.setBounds(10, 210, 100, 40);
butto.addActionListener(this);
button.setBounds(10, 260, 100, 40);
button.addActionListener(this);
t.setBounds(10, 310, 100, 30);
p.setLayout(null);
p.setBounds(0,0,130,500);
p.add(b);
p.add(bu);
//p.add(but);
p.add(butt);
p.add(butto);
p.add(button);
p.add(t);
f.add(p);
f.add(canvas);
f.setVisible(true);
}
public BranchGroup Würfel(String SeiteA){
BranchGroup Eltern = new BranchGroup();
TransformGroup tg = new TransformGroup();
BoundingSphere behaveBounds = new BoundingSphere();
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
tg.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
tg.setCapability(BranchGroup.ALLOW_DETACH);
PickZoomBehavior pickZoom = new PickZoomBehavior(Eltern, canvas, behaveBounds);
MouseRotate rotor = new MouseRotate();
rotor.setSchedulingBounds(new BoundingSphere());
rotor.setTransformGroup(tg);
ColorCube box = new ColorCube(Float.valueOf(SeiteA));
tg.addChild( box );
Eltern.addChild( tg );
Eltern.addChild( rotor );
Eltern.addChild(pickZoom);
return Eltern;
}
public Transform3D Skalieren(double scale){
Transform3D t3d = new Transform3D();
t3d.setScale(new Vector3d(scale,scale, scale));
return t3d;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b){
Root = Würfel(t.getText());
Root.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
Root.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
Root.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
Root.setCapability(BranchGroup.ALLOW_DETACH);
universe.addBranchGraph(Root);
}
if(e.getSource()==bu){
Root.detach();
}
if(e.getSource()==butt){
//Würfel vergrößern
}
if(e.getSource()==butto){
//Würfel verkleinern
}
if(e.getSource()==button){
//Größe von SeiteA ausgeben, auch nach veränderte Größe
}
}
public static void main(String[] args) {
new MyUniverse();
}
}
Wie man aus dem Code vielleicht erkennen kann funktioniert das Vergrößern bzw. Verkleinern noch das Auslesen nicht. Ich weiß das man mit Transform3D bzw setScale den Würfel skalieren kann, aber wie soll ich die Transform3D an die TransformGroup bringen? Und wie kann ich auf den Würfel zugreifen, wenn ich mit getScale die Größe auslesen will.
Danke im Vorraus