# Transformation wird nicht angewendet



## krel (20. Dez 2011)

Hallo zusammen,

ich habe derzeit ein etwas merkwürdiges Problem. Ich schreibe derzeit für meine Masterarbeit eine 3D Simulation eines Magnetfeldes in der sich eine Fläche befindet, die man in Größe und Winkel verändern soll. Das drehen und verändern hat auch super geklappt, nur jetzt habe ich den Code in eine eigene Klasse ausgelagert und nun klemmts. Ein kleiner Überblick. Die Hauptanwendung fügt das HomogeneousModel (extends JPanel) und das ControlPanel hinzu, beim verschieben der Slider, wird der Wert im HomogeneousModel geupdated und adjustTransform aufgerufen. Hier wird die neue Transformation berechnet udn der TransformGroup zugewiesen. Leider passiert da nichts. Die Transformationsmatrix ist richtig/verändert sich beim verschieben der Regler. Zuvor hatte ich halt alles in einer Klasse, da lief es. Jetzt leider nicht mehr.
Main
[JAVA=23]
    public Magnetsimu() {
        HomogeneousModel homogeneousModel = new HomogeneousModel();
        model.magneticModel = new HomogeneousModel();
        add(BorderLayout.CENTER, homogeneousModel);

        model.control = new ControlPanel();
        add(BorderLayout.EAST, model.control);
    }
[/code]
Auszug aus ControlPanel.java
[JAVA=40]
        angleSlider = new JSlider(0, 90);
        angleSlider.setValue(0);
        add(new Label("Winkel"));
        add(angleSlider);
        angleSlider.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                model.magneticModel.setAngle(angleSlider.getValue());
            }
        });
[/code]
HomogeneousModel createSceneGraph
[JAVA=112]
        cyl3d = new Transform3D();
        cyl = new Cylinder(0.5f, 0.02f, blueApp);
        transCyl = new TransformGroup(cyl3d);
        transCyl.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        transCyl.setCapabilityIsFrequent(TransformGroup.ALLOW_TRANSFORM_WRITE);
        transCyl.addChild(cyl);
        objRoot.addChild(transCyl);
[/code]
[JAVA=155]
    @Override
    public void setAngle(int angle) {
        this.angle = angle;
        adjustTransform();
    }

    @Override
    public void setRadius(int radius) {
        this.radius = radius;
        adjustTransform();
    }

    private void adjustTransform()
    {
        cyl3d.rotZ(angle * (Math.PI / 180d));
        cyl3d.setScale(new Vector3d(radius / 100d, 1d, radius / 100d));
        Transform3D test = new Transform3D();
        test.setTranslation(new Vector3d(5d, 1d, 1d));
        transCyl.setTransform(test);
    }
[/code]


----------



## Marco13 (20. Dez 2011)

Ist das transCyl im letzten Teil dasSELBE wie das, was oben erstellt wird?

System.out.println("Erstelle: "+System.identityHashCode(transCyl));
...
System.out.println("Verändere in "+System.identityHashCode(transCyl));


----------



## krel (20. Dez 2011)

Sollte dieselbe selbe sein. Zumindest erzeuge ich nirgendwo eine neue. Werde ich gleich prüfen, sobald ich wieder zu Hause bin.


----------



## krel (20. Dez 2011)

Danke für den Hinweis. Bei "Erstelle" wurden mir zwei verschiedene angezeigt. Und dann habe ich bemerkt, dass ich in der Main 2 HomogenousModel erzeuge und das falsche ins Model packe. Danke für den Denkanstoß!


----------

