Импорт файла STL в JavaFX

Моя проблема в том, что я пытаюсь импортировать 3D-модель из файла STL в приложение JavaFX. Я следовал за кодом в этой ссылке Как создать 3d форму из STL в JavaFX 8? и он работает только с файлом jewel, упомянутым там, но я пробовал с другими файлами STL, и он не работает!

Я не понимаю, почему он не работает с другими файлами. Кто-нибудь может объяснить это? Любая помощь, пожалуйста, как можно скорее!

1 ответ

Решение

Поскольку вы уже используете импортер STL с этого сайта, в том же Интернете вы найдете браузер 3D-моделей, который вы можете использовать для предварительного просмотра ваших моделей перед их импортом в приложение JavaFX.

Если их нельзя импортировать с помощью этого браузера, проблема может быть связана с неверным форматом STL в ваших файлах.

Если они импортированы, то проблема может быть в вашем приложении. Вставьте вызов в try-catch и опубликуйте исключение, которое вы можете включить.

StlMeshImporter stlImporter = new StlMeshImporter(); 

try {
    stlImporter.read(this.getClass().getResource("<STLfile>.stl"));
}
catch (ImportException e) {
    e.printStackTrace();
    return;
}

РЕДАКТИРОВАТЬ

Если при чтении модели не возникает исключение, следующим шагом будет вставка возвращенной сетки в MeshView и показать это на нашей сцене:

TriangleMesh mesh = stlImporter.getImport();
stlImporter.close();
MeshView mesh=new MeshView(cylinderHeadMesh);
Group root = new Group(mesh);
Scene scene = new Scene(root, 1024, 800, true);
Camera camera = new PerspectiveCamera();
scene.setCamera(camera);
primaryStage.setScene(scene);
primaryStage.show(); 

Поскольку модель может быть слишком маленькой или слишком большой для нашей сцены (связанной с камерой и используемой точкой обзора), мы должны напечатать ограничивающую рамку нашей модели, а затем соответственно увеличить или уменьшить ее:

System.out.println("mesh: "+mesh.getBoundsInLocal().toString());
mesh.setScaleX(1d);
mesh.setScaleY(1d);
mesh.setScaleZ(1d);

Или мы могли бы изменить параметры камеры:

double max = Math.max(mesh.getBoundsInLocal().getWidth(),
              Math.max(mesh.getBoundsInLocal().getHeight(),
                       mesh.getBoundsInLocal().getDepth()));
camera.setTranslateZ(-3*max);
Другие вопросы по тегам