Как сбросить вращение мыши в Java3D? - PullRequest
1 голос
/ 24 декабря 2011

Я пишу Java-апплет на Java3D и хотел бы сбросить вращение мыши в поведении MouseRotate при нажатии кнопки.Соответствующие коды следующие:

BoundingSphere bound =
            new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);    

        MouseRotate mouseRotate = new MouseRotate();
                    TransformGroup modelGroup = new TransformGroup();
                    mouseRotate.setTransformGroup(modelGroup);  
                    modelGroup.addChild(mouseRotate);
                    mouseRotate.setSchedulingBounds(bound);

Ответы [ 3 ]

2 голосов
/ 25 декабря 2011

Работает.Большое спасибо!Однако при реализации предложенного вами способа я случайно нашел более простой.Код приведен ниже.Этот метод, кажется, работает для моей цели, и нет необходимости в родительском TransformGrop.Метод очевиден, и я думал, что попробовал это раньше.Возможно, я попробовал это, но по другим причинам это не сработало.Ура, Хасан

TransformGroup modelGroup = new TransformGroup();
modelGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
modelGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

JButton resetButton = new JButton();
resetButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
    modelGroup.setTransform( new Transform3D());
}
});
0 голосов
/ 25 декабря 2011

Извините, моя ошибка.Кажется, что нет способа сбросить MouseRotate без перезаписи.

Вторая попытка: Включите еще один TransformGroup в качестве родителя modelGroup в граф сцены и установите его преобразование в инвертированное преобразованиеmodelGroup при сбросе запрещено.

TransformGroup modelGroupReset = new TransformGroup();
TransformGroup modelGroup = new TransformGroup();
modelGroupReset.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
modelGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
modelGroupReset.addChild(modelGroup);

JButton resetButton = new JButton();
resetButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        Transform3D t3d = new Transform3D();
        modelGroup.getTransform(t3d);
        t3d.invert();
        modelGroupReset.setTransform(t3d);
    }
});

;

0 голосов
/ 24 декабря 2011

Попробуйте: вспомните mouseRotate.setTransformGroup(modelGroup);, а затем mouseRotate.initialize();.Не проверено!

...