2019-10-18 11:05:22 +00:00
# include <catch2/catch.hpp>
# include "libslic3r/Model.hpp"
# include "libslic3r/Format/STL.hpp"
using namespace Slic3r ;
static inline std : : string stl_path ( const char * path )
{
return std : : string ( TEST_DATA_DIR ) + " /test_stl/ " + path ;
}
SCENARIO ( " Reading an STL file " , " [stl] " ) {
GIVEN ( " umlauts in the path of a binary STL file, Czech characters in the file name " ) {
WHEN ( " STL file is read " ) {
Slic3r : : Model model ;
THEN ( " load should succeed " ) {
REQUIRE ( Slic3r : : load_stl ( stl_path ( " Geräte/20mmbox-čřšřěá.stl " ) . c_str ( ) , & model ) ) ;
REQUIRE ( is_approx ( model . objects . front ( ) - > volumes . front ( ) - > mesh ( ) . size ( ) , Vec3d ( 20 , 20 , 20 ) ) ) ;
}
}
}
GIVEN ( " in ASCII format " ) {
WHEN ( " line endings LF " ) {
Slic3r : : Model model ;
THEN ( " load should succeed " ) {
REQUIRE ( Slic3r : : load_stl ( stl_path ( " ASCII/20mmbox-LF.stl " ) . c_str ( ) , & model ) ) ;
REQUIRE ( is_approx ( model . objects . front ( ) - > volumes . front ( ) - > mesh ( ) . size ( ) , Vec3d ( 20 , 20 , 20 ) ) ) ;
}
}
WHEN ( " line endings CRLF " ) {
Slic3r : : Model model ;
THEN ( " load should succeed " ) {
REQUIRE ( Slic3r : : load_stl ( stl_path ( " ASCII/20mmbox-CRLF.stl " ) . c_str ( ) , & model ) ) ;
REQUIRE ( is_approx ( model . objects . front ( ) - > volumes . front ( ) - > mesh ( ) . size ( ) , Vec3d ( 20 , 20 , 20 ) ) ) ;
}
}
#if 0
// ASCII STLs ending with just carriage returns are not supported. These were used by the old Macs, while the Unix based MacOS uses LFs as any other Unix.
WHEN ( " line endings CR " ) {
Slic3r : : Model model ;
THEN ( " load should succeed " ) {
REQUIRE ( Slic3r : : load_stl ( stl_path ( " ASCII/20mmbox-CR.stl " ) . c_str ( ) , & model ) ) ;
REQUIRE ( is_approx ( model . objects . front ( ) - > volumes . front ( ) - > mesh ( ) . size ( ) , Vec3d ( 20 , 20 , 20 ) ) ) ;
}
}
2019-10-18 12:42:03 +00:00
2019-10-18 11:05:22 +00:00
# endif
2019-10-18 12:42:03 +00:00
WHEN ( " nonstandard STL file (text after ending tags, invalid normals, for example infinities) " ) {
Slic3r : : Model model ;
THEN ( " load should succeed " ) {
REQUIRE ( Slic3r : : load_stl ( stl_path ( " ASCII/20mmbox-nonstandard.stl " ) . c_str ( ) , & model ) ) ;
REQUIRE ( is_approx ( model . objects . front ( ) - > volumes . front ( ) - > mesh ( ) . size ( ) , Vec3d ( 20 , 20 , 20 ) ) ) ;
}
}
2019-10-18 11:05:22 +00:00
}
}