Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在sceneform ARcore中将选定模型的节点放置在平面上并限制模型复制_Java_Android_Arcore_Sceneform - Fatal编程技术网

Java 如何在sceneform ARcore中将选定模型的节点放置在平面上并限制模型复制

Java 如何在sceneform ARcore中将选定模型的节点放置在平面上并限制模型复制,java,android,arcore,sceneform,Java,Android,Arcore,Sceneform,我正在使用ARCore sceneform在增强现实上创建一个应用程序,在这个应用程序中,我在一个列表中有多个来自服务器的对象,并将这些模型放置在一个平面上(已实现)。现在我想删除放置在平面上的特定模型。每次尝试删除模型时,我都会删除最后放置的模型,而不是选定的模型 如何获取模型的选定特定节点并删除该模型 如何限制模型的复制,使其只产生一次,而不考虑点击次数 arFragment.setOnTapArPlaneListener((hitResult,plane, motionEvent)

我正在使用ARCore sceneform在增强现实上创建一个应用程序,在这个应用程序中,我在一个列表中有多个来自服务器的对象,并将这些模型放置在一个平面上(已实现)。现在我想删除放置在平面上的特定模型。每次尝试删除模型时,我都会删除最后放置的模型,而不是选定的模型

  • 如何获取模型的选定特定节点并删除该模型

  • 如何限制模型的复制,使其只产生一次,而不考虑点击次数

      arFragment.setOnTapArPlaneListener((hitResult,plane, motionEvent) -> {
        placeModel(hitResult.createAnchor());
    
    });
    
  • //放置AR模型

             private void placeModel(Anchor anchor) {
    
            ModelRenderable.builder()
                    .setSource(ARScreenActivity.this, RenderableSource.builder()
                            .setSource(ARScreenActivity.this,
                                    Uri.parse(ar_preview_model.trim()),
                                    RenderableSource.SourceType.GLB)
                            .setScale(0.05f)
                            .setRecenterMode(RenderableSource.RecenterMode.ROOT)
                            .build()
                    )
                    .setRegistryId(ar_preview_model.trim())
                    .build()
                    .thenAccept(modelRenderable -> addNoteToScene(modelRenderable, anchor))
                    .exceptionally(throwable -> {
                        AlertDialog.Builder builder = new AlertDialog.Builder(ARScreenActivity.this);
                        builder.setMessage(throwable.getMessage()).show();
                        return null;
    
                    });
    
    }
    
    
      private void addNoteToScene(ModelRenderable modelRenderable, Anchor anchor) {
    
       anchorNode = new AnchorNode(anchor);
        //anchorNode.setRenderable(modelRenderable);
        anchorNode.setParent(arFragment.getArSceneView().getScene());
        // arFragment.getArSceneView().getScene().addChild(anchorNode);
    
    
        // Create the transformable andy and add it to the anchor.
        node = new TransformableNode(arFragment.getTransformationSystem());
        // Node node = new Node();
    
        //  getCardPosition(node);
        //set rotation in direction (x,y,z) in degrees 90
        node.setLocalRotation(Quaternion.axisAngle(new Vector3(0f, 90f, 0f), 0f));
        node.setLocalScale(new Vector3(x_axis, y_axis, z_axis));
        node.setParent(anchorNode);
        node.setRenderable(modelRenderable);
    
    
    }
    
    //从列表中删除

              private void deleteSpecificProduct() {
    
        JSONObject params = new JSONObject();
    
        try {
            params.put("Product", modelId);
        } catch (JSONException e) {
            e.getMessage();
        }
    
    
        WebServiceFactory.getInstance().removePreview(params.toString()).enqueue(new Callback<RemovePreview>() {
            @Override
            public void onResponse(Call<RemovePreview> call, Response<RemovePreview> response) {
                if (response.body().getStatus() == 1) {
                    arObjectImageAdapter.notifyItemRemoved(positionForDeletion);
                    arObjectImageAdapter.notifyDataSetChanged();
                    removeARObject(anchorNode);
    
    
                } else {
    
                    finish();
                    productImageRecyclercview.setVisibility(View.GONE);
    
    
                }
            }
    
            @Override
            public void onFailure(Call<RemovePreview> call, Throwable t) {
    
            }
        });
    }
    
    //多AR模型我必须限制这些模型中的每一个都应该一次显示,并且想要得到这些模型的节点

      private void removeARObject(Node nodeRemove) {
    
     
        if(nodeRemove instanceof  AnchorNode){
    
            if(((AnchorNode)nodeRemove).getAnchor() != null) {
                ((AnchorNode) nodeRemove).getAnchor().detach();
            }
        }
    
        if (!(nodeRemove instanceof Camera) && !(nodeRemove instanceof Sun)) {
            nodeRemove.setParent(null);
        }
        //Remove an anchor node
        /*if (anchorNode != null) {
            arFragment.getArSceneView().getScene().removeChild(anchorNode);
            anchorNode.getAnchor().detach();
            anchorNode.setParent(null);
            anchorNode = null;
            getPreviewData();
        }
       */
        /*
    
        transformableNode.setParent(anchorNode );
        transformableNode.setRenderable(anchorNode.getRenderable());
        transformableNode.select();
        transformableNode.setOnTapListener((HitTestResult hitTestResult, MotionEvent Event) ->
        {
    
            Node nodeToRemove = hitTestResult.getNode();
            anchorNode.removeChild(nodeToRemove );
    
        });
         */
    
    
    }