bin am verzweifeln.

Status
Nicht offen für weitere Antworten.

Maf

Mitglied
Bin hier langsam am verzweifeln...
Irgendwie will das hier mit dem menü nichordentlich klappen

Das soll so sein, dass wenn ich auf Kegel drücke dieser der scene zugeaddet wird...
Das will aba nich.warum?
Hier der code:
Am besten die ganzen kommentare etc ignorieren, alles egal
Code:
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.behaviors.vp.*;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;




public class Transforma extends JFrame implements ActionListener
{
  boolean x;
  boolean y;
  public Canvas3D myCanvas3D;
  // Anfang Variablen

  private MenuBar jmb = new MenuBar();
  private Menu Korp = new Menu("Körper");
          MenuItem Con = new MenuItem("Kegel");
  private Menu Tran = new Menu("Transformieren");
private Menu Beenden = new Menu("Datei");
          MenuItem Ende = new MenuItem("Ende");
  // Ende Variablen

  public Transforma()
  {


   setMenuBar(jmb);
    jmb.add(Tran);
    jmb.add(Korp);
    Korp.add(Con);
    jmb.add(Beenden);
    Beenden.add(Ende);
Con.addActionListener (this);
     Ende.addActionListener (this);


    //Standardeinstellung fuer das Betrachteruniversum
    myCanvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());


    //Aufbau des SimpleUniverse:
    //Zuerst Erzeugen zusammen mit dem Canvas
    SimpleUniverse simpUniv = new SimpleUniverse(myCanvas3D);

    //Standardpositionierung des Betrachters
    simpUniv.getViewingPlatform().setNominalViewingTransform();

    //Die Szene wird in dieser Methode erzeugt.
    createSceneGraph(simpUniv);

    //Hinzufuegen von Licht
    addLight(simpUniv);


    //Hierdurch kann man mit der Maus den Betrachterstandpunkt veraendern
      OrbitBehavior ob = new OrbitBehavior(myCanvas3D);
      ob.setSchedulingBounds(new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE));
      simpUniv.getViewingPlatform().setViewPlatformBehavior(ob);


    //Darstellung des Canvas/Fensters:
    setTitle("Transformationen");
    setSize(1000,800);
    getContentPane().add("Center", myCanvas3D);
    setVisible(true);
  }

   public static void main(String[] args)
  {
     Transforma staticScene = new Transforma();
  }

  //In dieser Methode werden die Objekte der Szene aufgebaut und dem
  //SimpleUniverse su hinzugefuegt.
  public void createSceneGraph(SimpleUniverse su)
  {

   Appearance myApp = new Appearance();
   setToMyDefaultAppearance(myApp,new Color3f(0.0f,0.0f,0.8f),new Color3f(0.0f,0.0f,0.5f));
   Appearance rot = new Appearance();
   setToMyDefaultAppearance(rot,new Color3f(0.0f,0.8f,0.0f), new Color3f(0.0f,0.5f,0.0f));
   float Kante = 0.2f;
     Cone Cone = new Cone(0.1f,0.8f,myApp);

//*** Die Wurzel des Graphen, der die Szene enthaelt. ***
        BranchGroup scene = new BranchGroup();
             //Die folgenden drei Zeilen erzeugen einen weißen Hintergrund.
             Background bg = new Background(new Color3f(1.0f,1.0f,1.0f));
             BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE);
             bg.setApplicationBounds(bounds);
             scene.addChild(bg);
             scene.compile();
             su.addBranchGraph(scene);
       if
       (x==true)
       {
        scene.addChild(Cone);
       }
   }

    public static void setToMyDefaultAppearance(Appearance myApp, Color3f col, Color3f col2)
  {
    myApp.setMaterial(new Material(col,col2,col,col,100.0f));
  }


   public void addLight(SimpleUniverse su)
  {

    BranchGroup bgLight = new BranchGroup();

    BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), Double.MAX_VALUE);
    Color3f lightColour1 = new Color3f(1.0f,1.0f,1.0f);
    Vector3f lightDir1  = new Vector3f(-1.0f,0.0f,-0.5f);
    DirectionalLight light1 = new DirectionalLight(lightColour1, lightDir1);
    light1.setInfluencingBounds(bounds);


    Vector3f lightDir2  = new Vector3f(0.5f,0.0f,1.0f);
    DirectionalLight light2 = new DirectionalLight(lightColour1, lightDir2);
    light2.setInfluencingBounds(bounds);


    bgLight.addChild(light1);
    bgLight.addChild(light2);

    su.addBranchGraph(bgLight);
  }
  public void actionPerformed (ActionEvent e)
  { String Klick = e.getActionCommand();
    if (Klick == "Kegel")
    {
     x=true ;

    }
    if (Klick == "Ende")
    {
      System.exit(0);
    }
  }
}
 

Verjigorm

Top Contributor
So funktioniert das auch nicht, wie du das vorhast.
Alles nach scene.compile() in createSceneGraph() verändert die Scene nichtmehr.
Du kannst ausserdem der Szene Später nicht einfach einen Cone hinzufügen.
Man kann nämlich nur BranchGroups etc hinzufügen und dort dann als Child den Cone einhängen.
dazu musst du scene erlauben, dass man überhaupt erweiterungen einhängen (z.B. BranchGroups) darf ->
scene.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
Wobei der Quellcode eh alles andere als sauber und übersichtlich ist :)
Übernimmst du dich da nicht nen bissl? Erstmal ein paar mehr Grundlagen wären vermutlich nicht schlecht.
Ausserdem isses das falsche Forum :)

Anhängend ist der "korrigierte" Quellcode


Code:
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.behaviors.vp.*;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;




public class Transforma extends JFrame implements ActionListener
{
  boolean x;
  boolean y;
  public Canvas3D myCanvas3D;
  // Anfang Variablen

  private MenuBar jmb = new MenuBar();
  private Menu Korp = new Menu("Körper");
          MenuItem Con = new MenuItem("Kegel");
  private Menu Tran = new Menu("Transformieren");
private Menu Beenden = new Menu("Datei");
          MenuItem Ende = new MenuItem("Ende");
          Appearance myApp = new Appearance();
          BranchGroup scene = new BranchGroup();
  // Ende Variablen

  public Transforma()
  {


   setMenuBar(jmb);
    jmb.add(Tran);
    jmb.add(Korp);
    Korp.add(Con);
    jmb.add(Beenden);
    Beenden.add(Ende);
Con.addActionListener (this);
     Ende.addActionListener (this);


    //Standardeinstellung fuer das Betrachteruniversum
    myCanvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());


    //Aufbau des SimpleUniverse:
    //Zuerst Erzeugen zusammen mit dem Canvas
    SimpleUniverse simpUniv = new SimpleUniverse(myCanvas3D);

    //Standardpositionierung des Betrachters
    simpUniv.getViewingPlatform().setNominalViewingTransform();

    //Die Szene wird in dieser Methode erzeugt.
    createSceneGraph(simpUniv);

    //Hinzufuegen von Licht
    addLight(simpUniv);


    //Hierdurch kann man mit der Maus den Betrachterstandpunkt veraendern
      OrbitBehavior ob = new OrbitBehavior(myCanvas3D);
      ob.setSchedulingBounds(new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE));
      simpUniv.getViewingPlatform().setViewPlatformBehavior(ob);


    //Darstellung des Canvas/Fensters:
    setTitle("Transformationen");
    setSize(1000,800);
    getContentPane().add("Center", myCanvas3D);
    setVisible(true);
  }

   public static void main(String[] args)
  {
     Transforma staticScene = new Transforma();
  }

  //In dieser Methode werden die Objekte der Szene aufgebaut und dem
  //SimpleUniverse su hinzugefuegt.
  public void createSceneGraph(SimpleUniverse su)
  {

   setToMyDefaultAppearance(myApp,new Color3f(0.0f,0.0f,0.8f),new Color3f(0.0f,0.0f,0.5f));
   Appearance rot = new Appearance();
   setToMyDefaultAppearance(rot,new Color3f(0.0f,0.8f,0.0f), new Color3f(0.0f,0.5f,0.0f));
   float Kante = 0.2f;
     Cone Cone = new Cone(0.1f,0.8f,myApp);

//*** Die Wurzel des Graphen, der die Szene enthaelt. ***
        
             //Die folgenden drei Zeilen erzeugen einen weißen Hintergrund.
             Background bg = new Background(new Color3f(1.0f,1.0f,1.0f));
             BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE);
             bg.setApplicationBounds(bounds);
             scene.addChild(bg);
             scene.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
             scene.compile();
             su.addBranchGraph(scene);
   }

    public static void setToMyDefaultAppearance(Appearance myApp, Color3f col, Color3f col2)
  {
    myApp.setMaterial(new Material(col,col2,col,col,100.0f));
  }


   public void addLight(SimpleUniverse su)
  {

    BranchGroup bgLight = new BranchGroup();

    BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), Double.MAX_VALUE);
    Color3f lightColour1 = new Color3f(1.0f,1.0f,1.0f);
    Vector3f lightDir1  = new Vector3f(-1.0f,0.0f,-0.5f);
    DirectionalLight light1 = new DirectionalLight(lightColour1, lightDir1);
    light1.setInfluencingBounds(bounds);


    Vector3f lightDir2  = new Vector3f(0.5f,0.0f,1.0f);
    DirectionalLight light2 = new DirectionalLight(lightColour1, lightDir2);
    light2.setInfluencingBounds(bounds);


    bgLight.addChild(light1);
    bgLight.addChild(light2);

    su.addBranchGraph(bgLight);
  }
  public void actionPerformed (ActionEvent e)
  { String Klick = e.getActionCommand();
    if (Klick == "Kegel")
    {
     x=true ;
     BranchGroup conGroup = new BranchGroup();
     conGroup.addChild(new Cone(0.1f,0.8f,myApp));
     scene.addChild(conGroup);
    }
    if (Klick == "Ende")
    {
      System.exit(0);
    }
  }
}
 

tfa

Top Contributor
Dass man String lieber nicht mit == vergleicht, sondern equals() benutzen sollte, ist euch bekannt?
 

Verjigorm

Top Contributor
tfa hat gesagt.:
Dass man String lieber nicht mit == vergleicht, sondern equals() benutzen sollte, ist euch bekannt?

auf so Dinger hab ich garnicht geachtet, hab lediglich den Java3D-Teil lauffähig gemacht, da gibts noch vieles mehr zu korrigieren :)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben