Импорт файла 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);