Как удалить отдельные рендерибли из сцены, используя кнопку, используя arcore и sceneform? - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь создать кнопку, которая удалит 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();
    }

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

У меня есть похожий вопрос к автору поста, но я не знаю, как получить выбранный 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();
    }
}
0 голосов
/ 14 января 2019

Если вы хотите удалить определенный 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();
        }
    }

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

...