更改转换控制器允许的PlaneType

时间:2019-03-02 18:15:22

标签: android arcore

我想创建一些按钮,以允许用户选择他的手势可以在哪个平面(X,Y,Z)上移动我的可渲染对象。

下面是我尝试过的。它实际上确实更改了“ AllowedPlaneTypes”,但是可渲染对象无法移动。你知道为什么吗? 如果我直接在setImage()中设置所有平面,那么transformableNode将在每个平面上正常工作。

public class AugmentedImageNode extends AnchorNode {
    private AugmentedImage image;
    private BaseArFragment arFragment;
    private TransformableNode node;

    public void setImage(AugmentedImage image) {
        Pose translation = image.getCenterPose().makeTranslation(0.0f, 0.0f, 0.0f);
        setAnchor(image.createAnchor(image.getCenterPose().compose(translation)));

        this.node = new TransformableNode(arFragment.getTransformationSystem());
        node.getScaleController().setEnabled(false);
        node.getTranslationController().setAllowedPlaneTypes(EnumSet.noneOf(Plane.Type.class));
        node.getRotationController().setEnabled(false);


        //Node node = new Node();
        node.setWorldScale(new Vector3(1,1,1));

        node.setParent(this);
        node.setLocalRotation(Quaternion.axisAngle(new Vector3(1f, 0, 0), 90f));
        node.setRenderable(x.getNow(null));

    }



  public void setTransformablePlaneTypes(String buttonId){
      EnumSet<Plane.Type> allowedPlaneTypes = EnumSet.allOf(Plane.Type.class);
      switch (buttonId){
          case "X" :
              allowedPlaneTypes = EnumSet.of(Plane.Type.HORIZONTAL_DOWNWARD_FACING);
              this.node.getTranslationController().setAllowedPlaneTypes(allowedPlaneTypes);
              break;

          case "Y" :
              allowedPlaneTypes = EnumSet.of(Plane.Type.HORIZONTAL_UPWARD_FACING);
              this.node.getTranslationController().setAllowedPlaneTypes(allowedPlaneTypes);
              break;

          case "Z" :
              allowedPlaneTypes = EnumSet.of(Plane.Type.VERTICAL);
              this.node.getTranslationController().setAllowedPlaneTypes(allowedPlaneTypes);
              break;
      }
  }
}

非常感谢您的帮助。

0 个答案:

没有答案