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

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

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


person Mina Shakhloul    schedule 20.12.2014    source источник
comment
Тег STL упоминается в стандартной библиотеке шаблонов C++. ИМХО STL тут ни при чем с этим тегом.   -  person Serge Ballesta    schedule 21.12.2014


Ответы (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);
person José Pereda    schedule 20.12.2014
comment
Я уже просмотрел их в браузере, и с файлами все в порядке. Я действительно не знаю, где проблема в приложении, try-catch не помогает, потому что импорт проходит. - person Mina Shakhloul; 21.12.2014