我正在编写Java Applet唱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);
答案 0 :(得分:2)
有效。非常感谢!然而,在实施您提出的方法时,我意外地发现了一个更简单的方法。代码来自下面。 这个方法似乎适用于我的目的,也不需要父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());
}
});
答案 1 :(得分:0)
尝试一下:调用mouseRotate.setTransformGroup(modelGroup);
,然后调用mouseRotate.initialize();
。未经测试!
答案 2 :(得分:0)
抱歉,我的错误。似乎没有办法重置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);
}
});