Как удалить отдельные рендерибли из сцены, используя кнопку, используя arcore и sceneform?

Я пытаюсь сделать кнопку, которая будет удалять 3d-модель со сцены после ее выбора.

Я знаю, что способ удалить 3D-объекты с помощью anchor.detach(). И я могу выбрать отдельные модели, используя node.select(). Тем не менее, я не уверен, как получить доступ к привязке после выбора узла.

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                deleteObject(//I'm not sure how to get the anchor from the selected node//);
            }
        });

private void deleteObject(Anchor anchor){
        anchor.detach();
    }

1 ответ

Решение

Если вы хотите удалить определенный Renderable и вы уже знаете Anchronode, что, как я полагаю, связано с вашим вопросом, тогда приведенный ниже код удалит Renderable и Anchornode:

private void removeAnchorNode(AnchorNode nodeToremove) {
        //Remove an anchor node
        if (nodeToremove != null) {
            arFragment.getArSceneView().getScene().removeChild(nodeToremove);
            nodeToremove.getAnchor().detach();
            nodeToremove.setParent(null);
            nodeToremove = null;
            Toast.makeText(LineViewMainActivity.this, "Test Delete - anchorNode removed", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(LineViewMainActivity.this, "Test Delete - markAnchorNode was null", Toast.LENGTH_SHORT).show();
        }
    }

Тост только для того, чтобы помочь тестированию, поэтому может быть удален или оставлен на ваше усмотрение.

У меня есть похожий вопрос к автору поста, но я не знаю, как получить выбранный AnchorNode, который я должен поставить для этой функции:

private void removeAnchorNode(AnchorNode nodeToremove) {
    //Remove an anchor node
    if (nodeToremove != null) {
        arFragment.getArSceneView().getScene().removeChild(nodeToremove);
        nodeToremove.getAnchor().detach();
        nodeToremove.setParent(null);
        nodeToremove = null;
        Toast.makeText(LineViewMainActivity.this, "Test Delete - anchorNode removed", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(LineViewMainActivity.this, "Test Delete - markAnchorNode was null", Toast.LENGTH_SHORT).show();
    }
}
Другие вопросы по тегам