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