From 77c65947bb5f4c456f41f774268992fd73443841 Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Wed, 24 Feb 2016 16:43:40 +0100 Subject: [PATCH] Add support of multi STL solids loading --- src/gmio_core/internal/helper_stream.h | 22 + src/gmio_core/internal/stringstream.c | 1 + src/gmio_core/internal/stringstream.h | 33 +- src/gmio_stl/internal/stla_infos_get.c | 10 +- src/gmio_stl/internal/stlb_infos_get.c | 15 +- src/gmio_stl/internal/stlb_infos_get.h | 6 +- src/gmio_stl/stl_infos.c | 11 + src/gmio_stl/stl_infos.h | 9 + src/gmio_stl/stla_read.c | 32 +- src/gmio_stl/stlb_read.c | 26 +- tests/main_test_stl.c | 19 + tests/models/solid_4meshs.le_stlb | Bin 0 -> 11820 bytes tests/models/solid_4meshs.stla | 1607 ++++++++++++++++++++++++ tests/stl_utils.c | 10 + tests/stl_utils.h | 2 + tests/test_stl_io.c | 64 +- 16 files changed, 1817 insertions(+), 50 deletions(-) create mode 100644 tests/models/solid_4meshs.le_stlb create mode 100644 tests/models/solid_4meshs.stla diff --git a/src/gmio_core/internal/helper_stream.h b/src/gmio_core/internal/helper_stream.h index ed3c833..615d1b0 100644 --- a/src/gmio_core/internal/helper_stream.h +++ b/src/gmio_core/internal/helper_stream.h @@ -28,10 +28,16 @@ GMIO_INLINE int gmio_stream_error(struct gmio_stream* stream); GMIO_INLINE size_t gmio_stream_read( struct gmio_stream* stream, void *ptr, size_t size, size_t count); +GMIO_INLINE size_t gmio_stream_read_bytes( + struct gmio_stream* stream, void *ptr, size_t count); + /*! Safe and convenient function for gmio_stream::func_write() */ GMIO_INLINE size_t gmio_stream_write( struct gmio_stream* stream, const void *ptr, size_t size, size_t count); +GMIO_INLINE size_t gmio_stream_write_bytes( + struct gmio_stream* stream, const void *ptr, size_t count); + /*! Safe and convenient function for gmio_stream::func_size() */ GMIO_INLINE gmio_streamsize_t gmio_stream_size(struct gmio_stream* stream); @@ -75,6 +81,14 @@ size_t gmio_stream_read( return 0; } +size_t gmio_stream_read_bytes( + struct gmio_stream* stream, void *ptr, size_t count) +{ + if (stream != NULL && stream->func_read != NULL) + return stream->func_read(stream->cookie, ptr, 1, count); + return 0; +} + size_t gmio_stream_write( struct gmio_stream* stream, const void *ptr, size_t size, size_t count) { @@ -83,6 +97,14 @@ size_t gmio_stream_write( return 0; } +size_t gmio_stream_write_bytes( + struct gmio_stream* stream, const void *ptr, size_t count) +{ + if (stream != NULL && stream->func_write != NULL) + return stream->func_write(stream->cookie, ptr, 1, count); + return 0; +} + gmio_streamsize_t gmio_stream_size(struct gmio_stream* stream) { if (stream != NULL && stream->func_size != NULL) diff --git a/src/gmio_core/internal/stringstream.c b/src/gmio_core/internal/stringstream.c index e1da743..804df17 100644 --- a/src/gmio_core/internal/stringstream.c +++ b/src/gmio_core/internal/stringstream.c @@ -23,6 +23,7 @@ struct gmio_stringstream gmio_stringstream( struct gmio_stringstream sstream = {0}; sstream.stream = stream; sstream.strbuff = strbuff; + sstream.func_stream_read = gmio_stringstream_default_func_read; gmio_stringstream_init_pos(&sstream); return sstream; } diff --git a/src/gmio_core/internal/stringstream.h b/src/gmio_core/internal/stringstream.h index f39c00b..29e9a15 100644 --- a/src/gmio_core/internal/stringstream.h +++ b/src/gmio_core/internal/stringstream.h @@ -41,12 +41,12 @@ struct gmio_stringstream /*! Position indicator in strbuff */ const char* strbuff_at; - /*! User data to be passed to callback func_stream_read_hook */ + /*! Data to be passed to callback func_stream_read */ void* cookie; - /*! Pointer on user function called each time next contents is read */ - void (*func_stream_read_hook)( - void* cookie, const struct gmio_string* strbuff); + /*! Pointer on a function called each time next contents has to be read */ + size_t (*func_stream_read)( + void* cookie, struct gmio_stream* stream, char* ptr, size_t len); }; /*! Returns an initialized gmio_stringstream object */ @@ -57,6 +57,10 @@ struct gmio_stringstream gmio_stringstream( /*! Initializes position indicator */ void gmio_stringstream_init_pos(struct gmio_stringstream* sstream); +/*! Default function for gmio_stringstream::func_stream_read */ +GMIO_INLINE size_t gmio_stringstream_default_func_read( + void* cookie, struct gmio_stream* stream, char* ptr, size_t len); + /*! Returns the char where the iterator is currently pointing at */ GMIO_INLINE const char* gmio_stringstream_current_char( const struct gmio_stringstream* sstream); @@ -142,6 +146,13 @@ const char* gmio_stringstream_current_char( NULL; } +size_t gmio_stringstream_default_func_read( + void* cookie, struct gmio_stream* stream, char* ptr, size_t len) +{ + GMIO_UNUSED(cookie); + return gmio_stream_read(stream, ptr, 1, len); +} + const char *gmio_stringstream_next_char(struct gmio_stringstream *sstream) { ++(sstream->strbuff_at); @@ -151,15 +162,13 @@ const char *gmio_stringstream_next_char(struct gmio_stringstream *sstream) /* Read next chunk of data */ sstream->strbuff_at = sstream->strbuff.ptr; sstream->strbuff.len = - gmio_stream_read( - &sstream->stream, sstream->strbuff.ptr, 1, sstream->strbuff.max_len); + sstream->func_stream_read( + sstream->cookie, + &sstream->stream, + sstream->strbuff.ptr, + sstream->strbuff.max_len); sstream->strbuff_end = sstream->strbuff.ptr + sstream->strbuff.len; - if (sstream->strbuff.len > 0) { - if (sstream->func_stream_read_hook != NULL) - sstream->func_stream_read_hook(sstream->cookie, &sstream->strbuff); - return sstream->strbuff.ptr; - } - return NULL; + return sstream->strbuff.len > 0 ? sstream->strbuff.ptr : NULL; } struct gmio_stringstream* gmio_stringstream_move_next_char( diff --git a/src/gmio_stl/internal/stla_infos_get.c b/src/gmio_stl/internal/stla_infos_get.c index f011306..bfc7114 100644 --- a/src/gmio_stl/internal/stla_infos_get.c +++ b/src/gmio_stl/internal/stla_infos_get.c @@ -50,12 +50,14 @@ static bool gmio_stringstream_icase_eat( } /* Callback invoked by gmio_stringstream */ -static void gmio_stringstream_update_streamsize( - void* cookie, const struct gmio_string* strbuff) +static size_t gmio_stringstream_read( + void* cookie, struct gmio_stream* stream, char* ptr, size_t len) { gmio_streamsize_t* ptr_size = (gmio_streamsize_t*)(cookie); + const size_t len_read = gmio_stream_read_bytes(stream, ptr, len); if (ptr_size != NULL) - *ptr_size += strbuff->len; + *ptr_size += len_read; + return len_read; } int gmio_stla_infos_get( @@ -88,7 +90,7 @@ int gmio_stla_infos_get( if (flag_size) { infos->size = 0; sstream.cookie = &infos->size; - sstream.func_stream_read_hook = gmio_stringstream_update_streamsize; + sstream.func_stream_read = gmio_stringstream_read; } gmio_stringstream_init_pos(&sstream); diff --git a/src/gmio_stl/internal/stlb_infos_get.c b/src/gmio_stl/internal/stlb_infos_get.c index b769bf1..f96495f 100644 --- a/src/gmio_stl/internal/stlb_infos_get.c +++ b/src/gmio_stl/internal/stlb_infos_get.c @@ -57,13 +57,16 @@ int gmio_stlb_infos_get( memcpy(infos->stlb_header.data, buff, GMIO_STLB_HEADER_SIZE); if (flags & GMIO_STL_INFO_FLAG_FACET_COUNT) infos->facet_count = facet_count; - if (flags & GMIO_STL_INFO_FLAG_SIZE) { - infos->size = - GMIO_STLB_HEADER_SIZE - + sizeof(uint32_t) - + facet_count * GMIO_STLB_TRIANGLE_RAWSIZE; - } + if (flags & GMIO_STL_INFO_FLAG_SIZE) + infos->size = gmio_stlb_infos_size(facet_count); } return GMIO_ERROR_OK; } + +gmio_streamsize_t gmio_stlb_infos_size(uint32_t facet_count) +{ + return GMIO_STLB_HEADER_SIZE + + sizeof(uint32_t) + + facet_count * GMIO_STLB_TRIANGLE_RAWSIZE; +} diff --git a/src/gmio_stl/internal/stlb_infos_get.h b/src/gmio_stl/internal/stlb_infos_get.h index 3a721b3..cbf7af1 100644 --- a/src/gmio_stl/internal/stlb_infos_get.h +++ b/src/gmio_stl/internal/stlb_infos_get.h @@ -19,11 +19,15 @@ #include "../stl_infos.h" #include "../../gmio_core/endian.h" -/*! Find infos from a STL binary stream */ +/*! Finds infos from a STL binary stream */ int gmio_stlb_infos_get( struct gmio_stl_infos* infos, struct gmio_stream stream, unsigned flags, const struct gmio_stl_infos_get_options* opts); +/*! Returns the size(in bytes) of the whole STL binary data given some facet + * count */ +gmio_streamsize_t gmio_stlb_infos_size(uint32_t facet_count); + #endif /* GMIO_INTERNAL_STLB_INFOS_GET_H */ diff --git a/src/gmio_stl/stl_infos.c b/src/gmio_stl/stl_infos.c index fbf3c8f..651114f 100644 --- a/src/gmio_stl/stl_infos.c +++ b/src/gmio_stl/stl_infos.c @@ -73,3 +73,14 @@ label_end: gmio_memblock_helper_release(&mblock_helper); return error; } + +gmio_streamsize_t gmio_stla_infos_get_streamsize( + struct gmio_stream *stream, struct gmio_memblock *stream_memblock) +{ + struct gmio_stl_infos infos = {0}; + struct gmio_stl_infos_get_options options = {0}; + options.stream_memblock = *stream_memblock; + options.format_hint = GMIO_STL_FORMAT_ASCII; + gmio_stl_infos_get(&infos, *stream, GMIO_STL_INFO_FLAG_SIZE, &options); + return infos.size; +} diff --git a/src/gmio_stl/stl_infos.h b/src/gmio_stl/stl_infos.h index 006cbb2..a00c92f 100644 --- a/src/gmio_stl/stl_infos.h +++ b/src/gmio_stl/stl_infos.h @@ -117,6 +117,15 @@ int gmio_stl_infos_get( unsigned flags, /*!< Bitor combination of gmio_stl_info_flag values */ const struct gmio_stl_infos_get_options* options); +/*! Returns the size(in bytes) of next STL ascii solid in \p stream + * + * It is a facade over gmio_stl_infos_get() for gmio_stl_infos::size only + */ +GMIO_LIBSTL_EXPORT +gmio_streamsize_t gmio_stla_infos_get_streamsize( + struct gmio_stream* stream, + struct gmio_memblock* stream_memblock); + GMIO_C_LINKAGE_END #endif /* GMIO_STL_INFOS_H */ diff --git a/src/gmio_stl/stla_read.c b/src/gmio_stl/stla_read.c index 6745296..b23b2c9 100644 --- a/src/gmio_stl/stla_read.c +++ b/src/gmio_stl/stla_read.c @@ -82,19 +82,24 @@ */ -/* Callback used for gmio_stringstream::func_stream_read_hook */ -static void gmio_stringstream_stla_read_hook( - void* cookie, const struct gmio_string* strbuff) +/* Callback used for gmio_stringstream::func_stream_read */ +static size_t gmio_stringstream_stla_read( + void* cookie, struct gmio_stream* stream, char* ptr, size_t len) { - struct gmio_stringstream_stla_cookie* tcookie = + struct gmio_stringstream_stla_cookie* stlac = (struct gmio_stringstream_stla_cookie*)(cookie); - if (tcookie != NULL) { - const struct gmio_task_iface* task = tcookie->task; - tcookie->stream_offset += strbuff->len; - tcookie->is_stop_requested = gmio_task_iface_is_stop_requested(task); + if (stlac != NULL) { + const struct gmio_task_iface* task = stlac->task; + const size_t to_read = + GMIO_MIN(len, stlac->stream_size - stlac->stream_offset + 1); + const size_t len_read = gmio_stream_read_bytes(stream, ptr, to_read); + stlac->stream_offset += len_read; + stlac->is_stop_requested = gmio_task_iface_is_stop_requested(task); gmio_task_iface_handle_progress( - task, tcookie->stream_offset, tcookie->stream_size); + task, stlac->stream_offset, stlac->stream_size); + return len_read; } + return 0; } /* Root function, parses a whole solid */ @@ -127,7 +132,7 @@ int gmio_stla_read( parse_data.strstream.strbuff.ptr = mblock->ptr; parse_data.strstream.strbuff.max_len = mblock->size; parse_data.strstream.cookie = &parse_data.strstream_cookie; - parse_data.strstream.func_stream_read_hook = gmio_stringstream_stla_read_hook; + parse_data.strstream.func_stream_read = gmio_stringstream_stla_read; gmio_stringstream_init_pos(&parse_data.strstream); parse_data.token_str = gmio_string(fixed_buffer, 0, sizeof(fixed_buffer)); @@ -532,8 +537,11 @@ int gmio_stla_parse_solidname_beg(struct gmio_stla_parse_data* data) int parse_solidname_end(struct gmio_stla_parse_data* data) { - GMIO_UNUSED(data); - /* TODO: parse according to retrieved solid name */ + struct gmio_stringstream* sstream = &data->strstream; + /* Eat whole line after "endsolid" */ + const char* c = gmio_stringstream_current_char(sstream); + while (c != NULL && *c != '\n' && *c != '\r') + c = gmio_stringstream_next_char(sstream); return 0; } diff --git a/src/gmio_stl/stlb_read.c b/src/gmio_stl/stlb_read.c index d2ed88c..1f3725f 100644 --- a/src/gmio_stl/stlb_read.c +++ b/src/gmio_stl/stlb_read.c @@ -28,6 +28,7 @@ #include "../gmio_core/internal/helper_memblock.h" #include "../gmio_core/internal/helper_stream.h" #include "../gmio_core/internal/helper_task_iface.h" +#include "../gmio_core/internal/min_max.h" #include "../gmio_core/internal/safe_cast.h" #include @@ -98,19 +99,18 @@ int gmio_stlb_read( struct gmio_memblock_helper mblock_helper = gmio_memblock_helper(opts != NULL ? &opts->stream_memblock : NULL); struct gmio_memblock* mblock = &mblock_helper.memblock; - void* mblock_ptr = mblock->ptr; const struct gmio_task_iface* task = opts != NULL ? &opts->task_iface : NULL; struct gmio_stlb_header header; uint32_t i_facet = 0; /* Facet counter */ uint32_t total_facet_count = 0; /* Facet count, as declared in the stream */ - int error = GMIO_ERROR_OK; /* Helper to store function result error code */ + int error = GMIO_ERROR_OK; /* Function result(error code) */ /* Constants */ const func_gmio_stlb_decode_facets_t func_decode_facets = byte_order != GMIO_ENDIANNESS_HOST ? gmio_stlb_decode_facets_byteswap : gmio_stlb_decode_facets; const uint32_t max_facet_count_per_read = - gmio_size_to_uint32(mblock->size / GMIO_STLB_TRIANGLE_RAWSIZE); + gmio_size_to_uint32(mblock->size / GMIO_STLB_TRIANGLE_RAWSIZE); /* Check validity of input parameters */ if (!gmio_check_memblock_size(&error, mblock, GMIO_STLB_MIN_CONTENTS_SIZE)) @@ -119,22 +119,17 @@ int gmio_stlb_read( goto label_end; /* Read header */ - if (gmio_stream_read(&stream, &header, GMIO_STLB_HEADER_SIZE, 1) - != 1) - { + if (gmio_stream_read(&stream, &header, GMIO_STLB_HEADER_SIZE, 1) != 1) { error = GMIO_STL_ERROR_HEADER_WRONG_SIZE; goto label_end; } /* Read facet count */ - if (gmio_stream_read(&stream, mblock_ptr, sizeof(uint32_t), 1) - != 1) - { + if (gmio_stream_read(&stream, mblock->ptr, sizeof(uint32_t), 1) != 1) { error = GMIO_STL_ERROR_FACET_COUNT; goto label_end; } - - memcpy(&total_facet_count, mblock_ptr, sizeof(uint32_t)); + memcpy(&total_facet_count, mblock->ptr, sizeof(uint32_t)); if (byte_order != GMIO_ENDIANNESS_HOST) total_facet_count = gmio_uint32_bswap(total_facet_count); @@ -153,13 +148,16 @@ int gmio_stlb_read( /* Read triangles */ gmio_task_iface_handle_progress(task, 0, total_facet_count); while (gmio_no_error(error) && i_facet < total_facet_count) { + const uint32_t facet_count_to_read = + GMIO_MIN(max_facet_count_per_read, + total_facet_count - i_facet); const uint32_t read_facet_count = gmio_size_to_uint32( gmio_stream_read( &stream, - mblock_ptr, + mblock->ptr, GMIO_STLB_TRIANGLE_RAWSIZE, - max_facet_count_per_read)); + facet_count_to_read)); if (gmio_stream_error(&stream) != 0) error = GMIO_ERROR_STREAM; @@ -170,7 +168,7 @@ int gmio_stlb_read( if (gmio_no_error(error)) { func_decode_facets( - &mesh_creator, mblock_ptr, read_facet_count, i_facet); + &mesh_creator, mblock->ptr, read_facet_count, i_facet); i_facet += read_facet_count; if (gmio_task_iface_is_stop_requested(task)) error = GMIO_ERROR_TRANSFER_STOPPED; diff --git a/tests/main_test_stl.c b/tests/main_test_stl.c index 2e08dd1..8cb43a6 100644 --- a/tests/main_test_stl.c +++ b/tests/main_test_stl.c @@ -15,6 +15,8 @@ #include "utest_lib.h" +#include "../src/gmio_core/memblock.h" + const char* test_stl_coords_packing(); const char* test_stl_triangle_packing(); const char* test_stl_triangle_compute_normal(); @@ -24,6 +26,7 @@ const char* test_stl_internal__rw_common(); const char* test_stl_infos(); const char* test_stl_read(); +const char* test_stl_read_multi_solid(); const char* test_stla_write(); const char* test_stlb_write_header(); const char* test_stlb_write(); @@ -31,10 +34,21 @@ const char* test_stlb_write(); const char* test_stlb_header_str(); const char* test_stlb_header_to_printable_str(); +void generate_stlb_tests_models(); + +/* Static memblock */ +struct gmio_memblock gmio_memblock_for_tests() +{ + static uint8_t buff[1024]; /* 1KB */ + return gmio_memblock(buff, sizeof(buff), NULL); +} + const char* all_tests() { UTEST_SUITE_START(); + gmio_memblock_set_default_constructor(gmio_memblock_for_tests); + UTEST_RUN(test_stl_coords_packing); UTEST_RUN(test_stl_triangle_packing); UTEST_RUN(test_stl_triangle_compute_normal); @@ -44,6 +58,7 @@ const char* all_tests() UTEST_RUN(test_stl_infos); UTEST_RUN(test_stl_read); + UTEST_RUN(test_stl_read_multi_solid); UTEST_RUN(test_stla_write); UTEST_RUN(test_stlb_write_header); UTEST_RUN(test_stlb_write); @@ -51,6 +66,10 @@ const char* all_tests() UTEST_RUN(test_stlb_header_str); UTEST_RUN(test_stlb_header_to_printable_str); +#if 0 + generate_stlb_tests_models(); +#endif + return NULL; } UTEST_MAIN(all_tests) diff --git a/tests/models/solid_4meshs.le_stlb b/tests/models/solid_4meshs.le_stlb new file mode 100644 index 0000000000000000000000000000000000000000..dfcb84544b7f615f52acc01d7c2ba2ac208132c3 GIT binary patch literal 11820 zcmb_id3aPswm+Q^2m}Usk?o;@_t+tbf`I9!tC*IhQBX2LAs{+Y8$pN*Nkn-p=|I>` zG$HJ=81cmbB4|L3sS;2GiRe5AHR=bEU{s8Q0a-+msdMX|aC+W1|H=1VsE>2c`JJjd zzhB>4(nA?jZh=4UPtb&VB-}=PI=a9Az@^!GV&I8D`p;7WD|fv!q(eex0N_5SjsMzb z(-44l-jDr9@2vB`a&fkPxx?hZ@-Lrs-pXR$ksc4g*1;`%-yrJG&ep9KjSo!Tli_%9 z??{gwKWA6mv9_gXc7C>A(Q{OwO|Qos5AGf5aercjv(0GozjpR$8Pok##*oXxIyZ%s>uJ?9qeN12PqBLUR>deU#6 zip$4lYaW-sg(E$o%WxOttqY}t5BIu3;e4QFh-=|^k&&9d{6&R%{JXB3^Kbis^Z#_* z-7ZFc(#QVMch*(BZK?$8>VDS}nF+6}&*NGP^Qh$uX8qfKL{?>~sol=E_piX(1y-*- zlgNI|*jpuD+~pBFr-n3-#cOxa_t}Byk(q(s?Hd0X;9_Bw`2L(n44e_ty_n^hB?}x* zIBzj*fP%~-kvy$bytFK&d0bxY?T$Sb*fu-I#kl9)BC+6+QgL}+NdNx##{wH&3(tge z6JXq)EdS=o)uL);D1w8WA8#zaC$QbSz{Pmrp_%@pxz%Fovmw2fS$HNqLx8tGOHzx^ z9}x>oRy;0eRKJ-bFs8*^7h_VgS7qcJ5uz}pxrJxKBLPfWsMWL$8KTeAA9h23dF}Tw?%oS7;S}Ekpg9VKFE!XDw#9@@$fe@j+Ot-8w@Zf69&(S$HOh zL8=6BI44OpS#?BpS!2hF)PS=VM|%0vzAnaBVXu0k?1&nfYv+81YvGx29Rry0W0pT| zb+uZw)Xq8S5@#(|OkU&uE=GsoO#h&1)vCz~Tf1c8neYq&;$J8dMQcjc6SHmYk}h%9 zV&&KDzTL$*v#m(1zpGRoSY$a!7M=-aNIC`}R#l1Vt39gNR0)sEIUm7b__nl4+;r8W zlBb6>xA083jsaAZc9)%o2gRhXy#LRG^doR)QK0LTIf3$#0iz|emUWji76--ob6$;> zX2z0iES3LQ?q~_V#jydRCfAC?*GJ0}qkWpI0cY)|Ls@|>H!XEB#vH5_%i2cEU448y z*R>!9&xGrkQMgvh|Kq$wIi|#?d0fugTe_tL5?3sDF-Bdd{SU25lza1h8Z8}-1u=Lg zT*m+!&&yX`ns=1Gu|Cb?a@G!8)IV@^TCR&R;jMgin@W(am-%#W*Mb;46Ru+bU7wEE z@9ZiU<6?ag>cd%k&)!af@e|WsjQ3{6>%Uc&i`TAtHCp_}f*3p#o*_V+-)_>VCBJ;> z)jTd|Ek??G=?)iTnenJS8#ida@jy$eu^t1iYu7?cUuF@Vb9`RZ>UCFqX|?O2ieaMt2T=Y5voVm$m!zFK)Y zK}S!rbDm)=G**-e&k*3v0m^^>rbK;diJf!OCC*x`nDsAqb}@#YQU1@f6ZMs1Te~^N zf*3p#oO9AKfVS&u#ZUdBb!HD+yQDsxwOIN4R(V~FnVV`w^QdUuc%;waAX*TEXM(j$ zkpTWLue&_hIjDAC^g0|Q_2EqA3^uIY*j@H54ysMnUQHIn;F%x?DH6adQ&Z&SxH)3h zeouo3ssU$h&%?_D?;j5bZuo7X(UPWPQ)H)MbHs-yJo*M>dDFGrqzfD^!M8Xzz`}x7 z^2M~Svd?`{PR~h~IBQc^%?doSFyF<9+ucfjV>~>!MrpL9x)z=ZW=J{)aAt75|DDsR z^5N4_n#bj=-IJXh2>i9c#h43c{X>3Dm3JPB(%ix`;W`G;Z+n?a_}`#>_vt7{eMpx$ zYojmq4lMX;iHq^yC(2aJ<3TyEB1(UM@tTF>VTPn*0B2*py5v-yn0m#dd0fug;O5qW zLtCD3F&>EX>Pf%UiR_;|8ZA3q3(th>7{Jo)_c>b9d!NTq2GS+29~kMz2_syLk6e$k zy%vKkJQMUL9Rv8_PhNexu1<}tw-}@bTt6_weZ#xB80lt>*$*Y|5Bf90#K~>!)!FrR zD&bd;GyWwm8t)zEP1gkr{oJ5#wLi)ke^MB(1UP#S$#^&KGgr#g#^-~&bdIef zvhd#F_>(poK8&sRzjQTKA3tF0h_sF?0ajuAbM0J=4L{cV2cAyV{c0^A$ig$h3`rXS z<`uV+wV7S@D>qv{kk)Y}KsHSb-0EViFKH#`CwJ99jEi!3O%|RB@`1DwAa;C;Jb!++ zI&;#~plGNa#C~jZRRFl_p%i&3d5%hZ-=qJF=>^Y(GDO`1xI8RfcI=ZUUY`_JJQi1i z*M0eci&^sn%?|7|9!+Gr9O26o=d;6#Tb7p=Ir@ZeacskfS3Aqs4kXD%?Q;~5%ave0 z%n3X)puojA{B~zKXn&IY{7hI)VHS?Zwb86MTE~im-LhoTu^h$YawX`weN15c$RZbG zpg&f0>Xjv5-)XWkmQAjOXM&MP8vz1^m1|Wmuu* zBiF(+;o1l=eAi4zpHjw$6_3kVi;=GG8s=hf4{qU^pf_nFK;buI^pa*VI>ltg<8szw zhP9t`bTMj9j?sJKV)T|5!_HV8b}bx_M*?_kNu|2&(KMa7A;%dj(mKvs9O-4#Teuj9 z->Oudr={tRqwJhN=~{RuI98-%0Kc`36{mV<>DX88oRj)+)?&r9D~fk9ZuG^9tzENp z+~0GY+WmcnweU=Mh5$=;b(SLzC+SWywI8R;vYgo-=+~%1e2T8{O#^07D+ea4) z{DI-IIBTiBH|e<167={qs!$9(5!}Nq=#Be3_!h?oI5@1QENVW)>{S7f2PzI{EwwF1 zrtvuFdXSc&g}iy&D%|wb&Bfg3a6b%yVxfhzmf990<-6u0&v;Ba)@3(ZP)pE4-q9R0o4%p@p-S+7@Gn@%YSm+;Z>YJ)|XQA#ZAvjsa}=VVvHwsHuZNu@Hl^ zmf9BMUE}ef@n|(=&p@=GmY{{au}#>v9{|}J#|i&XEW#lD!2id##rRhbvXD2vMc5X@ z?T3RyvCx89k$zCyVno-C({&4*Iv$uWY6->Vc$6W4J0Fe*#X<}mUD6L~Ta4>>9aRU~ zPSq{sfk9|NEkO%;W1FyTKX%x{9#!b< z)*+vX+vJTH)V3IR81*Uk=ZUZH4+|a(-@GN_8h-O5JS4_CW~=$XJ>i*aFV=wIxNtF-v(%*uNrLg zNC4*s$BMOGv*f{}IfBQ<8N_c9#K2zzTsK*a`R$xv9NF{L9KkI-6Vej&26*AkO68fB zCQsazBY0e_MEn-PxA1qjz^t1r#whd4x&F~KS-&nv;O`w-I37kK9Rrwaew`n09wXkBH?p^P+*GsrDG6VehpRs}Lv{H0fxKEA`wIcgMIIBT(D@LR%S z;1_acw=7-sS&mb?WZ`(2A?X+Zt{D4UY5zn1#ua07d1o2ipQK-}3p;#3-NU?z{n)1O z6Px#VvwFxskfhsp$Z>d$-y3M*y(4|HV{@ljp)B>~sjudS9bTjEp@r)RR|S9$!_#Ga zVxB6P6c)I4A-&+4@C?oR`@s~sEM<Eck7s6jTU;5L)touQ6pc=LB<-zC zG8SCTAs)WPu>oStit*dzuCn>~D9Ph;C7`_+i}9FQl{R{+tDMj`O48m6V(?73HUhLW zE8mIVr^@1Qqa=^Zm4NnmEJoka_5QgqLGFD&O48m6V(?5b5@{nqH?x9&ohn`~&-To1GvB11*TbGeK`$ zH`!{>ZRXX$VzozPq zhwPk_)^XO-evHL9>8tmDWcFZEPTShWeGtUpneYq&674Rg{;9vMT~aj8TH5Wf7|jcv zol?DWVwA%{+#^N|o(azo;M0^8DFS9krP||gkkp5Bo--I=$fGIpAI;{dO=ix?f*3p# zS~uCTI&5~8t2YNl(`s*n2jekrT_lgoSxaX`7Gt+L z*?FO&T(tPzE9uM!F$fRe;yM;_-sC6)=@QouI(xDh73REYz}DN#9{kc`;OP-!@J!Gf z_lRvjE|^oW>6PWmoPsr|4~-SEmQHpo#yE4*cI=IEwV{a}D?B|S48+5?C_{@;`gXqB zSCOCxEwf`qaXD-0?8##EFeipz$92@{W9^*dnGcN>;^AAgpKCErm{ZBP)rq=&o}F{j zCC*wpd$JhE+A06<^Ahz=7I(5$5pgtIvn2K%AV1SaX-DQ)Z zLAAxqIav^cXF|GSG19kIi8ro#MBnM51`o`avzG3z6izj_EFgYOmGErwh(j46Nq146 zF%~*e$G12(z{#yeBK59PacNOV^0=I}bmPQgJiER~jNVWxUjCnuBnx8jOt_8#v>f5w zJ`m>if#h*HYw5;`#aQ)emfyd=TC86Zl4L;)!o#VxyaSxa|UY(Lhl)2eV= zhNzekl5`gZ`@u7z46zm>?!ibNm+J@JiLn?v%{`dnk_Yz8n`$xeE(&7sOt_8#;O(6D z2Q!qpo#SAT8gTufJ24jHl(_-)+~y2bWqM9`Q3wNX(coKjc5VCN-ZE06(2fMNJ9Dd*xh>_)Ii6kPd~nuc#o*l) zi?Q!OmcRayYL&Ut)-K*fK@6S=on2du`Fo4RmC2>*`+2r@QGJMms1n$wyDJu>=QBlO z#k5lO;Zn;%yi-IL@4qnB+s}<@wx1ZXV*G+Or5NV1H4x8 z`_Mi(V;?WEL1Zj;S+N$T=J5FNdHf%+yRvo^uk`~nB=!Peb?+VF+%a|P m3U9b#KX|1__G9d}FZ|}Ic#hqb{nvibO)}dLTg89u-~R;sGDV{R literal 0 HcmV?d00001 diff --git a/tests/models/solid_4meshs.stla b/tests/models/solid_4meshs.stla new file mode 100644 index 0000000..fb7dff8 --- /dev/null +++ b/tests/models/solid_4meshs.stla @@ -0,0 +1,1607 @@ +solid mesh1 +facet normal 0.146978E+00 0.437754E-01 -0.988171E+00 + outer loop + vertex 0.600648E+02 0.582387E+02 0.589680E+01 + vertex 0.610294E+02 0.550000E+02 0.589680E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + endloop +endfacet +facet normal 0.101186E+00 0.115379E+00 -0.988154E+00 + outer loop + vertex 0.575270E+02 0.604644E+02 0.589680E+01 + vertex 0.600649E+02 0.582387E+02 0.589680E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + endloop +endfacet +facet normal 0.208742E-01 0.152508E+00 -0.988082E+00 + outer loop + vertex 0.541319E+02 0.609291E+02 0.589680E+01 + vertex 0.575270E+02 0.604644E+02 0.589680E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + endloop +endfacet +facet normal -0.629667E-01 0.140237E+00 -0.988114E+00 + outer loop + vertex 0.510406E+02 0.595411E+02 0.589680E+01 + vertex 0.541319E+02 0.609291E+02 0.589680E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + endloop +endfacet +facet normal -0.129415E+00 0.823123E-01 -0.988168E+00 + outer loop + vertex 0.492226E+02 0.566827E+02 0.589680E+01 + vertex 0.510407E+02 0.595412E+02 0.589680E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + endloop +endfacet +facet normal -0.153390E+00 0.452030E-05 -0.988166E+00 + outer loop + vertex 0.492226E+02 0.533171E+02 0.589680E+01 + vertex 0.492227E+02 0.566827E+02 0.589680E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + endloop +endfacet +facet normal -0.129419E+00 -0.823026E-01 -0.988169E+00 + outer loop + vertex 0.510406E+02 0.504586E+02 0.589680E+01 + vertex 0.492227E+02 0.533172E+02 0.589680E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + endloop +endfacet +facet normal -0.171880E+00 0.171880E+00 0.970007E+00 + outer loop + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + vertex 0.549999E+02 0.549999E+02 0.500000E+01 + vertex 0.541319E+02 0.490708E+02 0.589680E+01 + endloop +endfacet +facet normal -0.629632E-01 -0.140235E+00 -0.988114E+00 + outer loop + vertex 0.541319E+02 0.490708E+02 0.589680E+01 + vertex 0.510407E+02 0.504587E+02 0.589680E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + endloop +endfacet +facet normal 0.110832E+00 -0.110832E+00 -0.987640E+00 + outer loop + vertex 0.549999E+02 0.549999E+02 0.500000E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + vertex 0.575270E+02 0.495355E+02 0.589680E+01 + endloop +endfacet +facet normal 0.208696E-01 -0.152507E+00 -0.988082E+00 + outer loop + vertex 0.575270E+02 0.495354E+02 0.589680E+01 + vertex 0.541319E+02 0.490708E+02 0.589680E+01 + vertex 0.549999E+02 0.549999E+02 0.500000E+01 + endloop +endfacet +facet normal -0.106762E+00 0.106762E+00 0.988536E+00 + outer loop + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + vertex 0.549999E+02 0.549999E+02 0.500000E+01 + vertex 0.600649E+02 0.517612E+02 0.589680E+01 + endloop +endfacet +facet normal 0.101184E+00 -0.115378E+00 -0.988155E+00 + outer loop + vertex 0.600648E+02 0.517611E+02 0.589680E+01 + vertex 0.575270E+02 0.495355E+02 0.589680E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + endloop +endfacet +facet normal 0.145553E+00 -0.145553E+00 -0.978585E+00 + outer loop + vertex 0.549999E+02 0.549999E+02 0.500000E+01 + vertex 0.550000E+02 0.550000E+02 0.500000E+01 + vertex 0.610294E+02 0.550000E+02 0.589680E+01 + endloop +endfacet +facet normal 0.146979E+00 -0.437652E-01 -0.988171E+00 + outer loop + vertex 0.610293E+02 0.550000E+02 0.589680E+01 + vertex 0.600649E+02 0.517612E+02 0.589680E+01 + vertex 0.549999E+02 0.549999E+02 0.500000E+01 + endloop +endfacet +facet normal 0.425304E+00 0.126658E+00 -0.896144E+00 + outer loop + vertex 0.610294E+02 0.550000E+02 0.589680E+01 + vertex 0.600649E+02 0.582387E+02 0.589680E+01 + vertex 0.644555E+02 0.610713E+02 0.838090E+01 + endloop +endfacet +facet normal 0.424957E+00 0.126907E+00 -0.896274E+00 + outer loop + vertex 0.644554E+02 0.610713E+02 0.838090E+01 + vertex 0.662685E+02 0.550000E+02 0.838090E+01 + vertex 0.610293E+02 0.550000E+02 0.589680E+01 + endloop +endfacet +facet normal 0.291905E+00 0.332850E+00 -0.896662E+00 + outer loop + vertex 0.600649E+02 0.582387E+02 0.589680E+01 + vertex 0.575270E+02 0.604644E+02 0.589680E+01 + vertex 0.597081E+02 0.652435E+02 0.838090E+01 + endloop +endfacet +facet normal 0.292483E+00 0.332821E+00 -0.896484E+00 + outer loop + vertex 0.597080E+02 0.652434E+02 0.838090E+01 + vertex 0.644555E+02 0.610713E+02 0.838090E+01 + vertex 0.600648E+02 0.582387E+02 0.589680E+01 + endloop +endfacet +facet normal 0.599893E-01 0.438283E+00 -0.896833E+00 + outer loop + vertex 0.575270E+02 0.604644E+02 0.589680E+01 + vertex 0.541319E+02 0.609291E+02 0.589680E+01 + vertex 0.533835E+02 0.661146E+02 0.838090E+01 + endloop +endfacet +facet normal 0.603975E-01 0.438521E+00 -0.896689E+00 + outer loop + vertex 0.533834E+02 0.661146E+02 0.838090E+01 + vertex 0.597081E+02 0.652435E+02 0.838090E+01 + vertex 0.575270E+02 0.604644E+02 0.589680E+01 + endloop +endfacet +facet normal -0.181487E+00 0.404217E+00 -0.896477E+00 + outer loop + vertex 0.541319E+02 0.609291E+02 0.589680E+01 + vertex 0.510407E+02 0.595412E+02 0.589680E+01 + vertex 0.476164E+02 0.635130E+02 0.838090E+01 + endloop +endfacet +facet normal -0.181951E+00 0.403339E+00 -0.896778E+00 + outer loop + vertex 0.476164E+02 0.635130E+02 0.838090E+01 + vertex 0.533835E+02 0.661146E+02 0.838090E+01 + vertex 0.541319E+02 0.609291E+02 0.589680E+01 + endloop +endfacet +facet normal -0.374072E+00 0.237909E+00 -0.896365E+00 + outer loop + vertex 0.510407E+02 0.595412E+02 0.589680E+01 + vertex 0.492227E+02 0.566827E+02 0.589680E+01 + vertex 0.442062E+02 0.581544E+02 0.838090E+01 + endloop +endfacet +facet normal -0.374086E+00 0.238070E+00 -0.896316E+00 + outer loop + vertex 0.442061E+02 0.581543E+02 0.838090E+01 + vertex 0.476164E+02 0.635130E+02 0.838090E+01 + vertex 0.510406E+02 0.595411E+02 0.589680E+01 + endloop +endfacet +facet normal -0.443759E+00 0.000000E+00 -0.896146E+00 + outer loop + vertex 0.492227E+02 0.566827E+02 0.589680E+01 + vertex 0.492227E+02 0.533172E+02 0.589680E+01 + vertex 0.442062E+02 0.518455E+02 0.838090E+01 + endloop +endfacet +facet normal -0.443765E+00 0.697642E-05 -0.896143E+00 + outer loop + vertex 0.442061E+02 0.518455E+02 0.838090E+01 + vertex 0.442062E+02 0.581544E+02 0.838090E+01 + vertex 0.492226E+02 0.566827E+02 0.589680E+01 + endloop +endfacet +facet normal -0.374180E+00 -0.237978E+00 -0.896301E+00 + outer loop + vertex 0.492227E+02 0.533172E+02 0.589680E+01 + vertex 0.510407E+02 0.504587E+02 0.589680E+01 + vertex 0.476164E+02 0.464869E+02 0.838090E+01 + endloop +endfacet +facet normal -0.374037E+00 -0.238036E+00 -0.896345E+00 + outer loop + vertex 0.476164E+02 0.464869E+02 0.838090E+01 + vertex 0.442062E+02 0.518455E+02 0.838090E+01 + vertex 0.492226E+02 0.533171E+02 0.589680E+01 + endloop +endfacet +facet normal -0.181163E+00 -0.403496E+00 -0.896868E+00 + outer loop + vertex 0.510407E+02 0.504587E+02 0.589680E+01 + vertex 0.541319E+02 0.490708E+02 0.589680E+01 + vertex 0.533835E+02 0.438853E+02 0.838090E+01 + endloop +endfacet +facet normal -0.182136E+00 -0.403728E+00 -0.896565E+00 + outer loop + vertex 0.533834E+02 0.438852E+02 0.838090E+01 + vertex 0.476164E+02 0.464869E+02 0.838090E+01 + vertex 0.510406E+02 0.504586E+02 0.589680E+01 + endloop +endfacet +facet normal 0.600409E-01 -0.438660E+00 -0.896645E+00 + outer loop + vertex 0.541319E+02 0.490708E+02 0.589680E+01 + vertex 0.575270E+02 0.495355E+02 0.589680E+01 + vertex 0.597081E+02 0.447564E+02 0.838090E+01 + endloop +endfacet +facet normal 0.603715E-01 -0.438318E+00 -0.896790E+00 + outer loop + vertex 0.597080E+02 0.447564E+02 0.838090E+01 + vertex 0.533835E+02 0.438853E+02 0.838090E+01 + vertex 0.541319E+02 0.490708E+02 0.589680E+01 + endloop +endfacet +facet normal 0.292214E+00 -0.333203E+00 -0.896430E+00 + outer loop + vertex 0.575270E+02 0.495355E+02 0.589680E+01 + vertex 0.600649E+02 0.517612E+02 0.589680E+01 + vertex 0.644555E+02 0.489286E+02 0.838090E+01 + endloop +endfacet +facet normal 0.292335E+00 -0.332631E+00 -0.896603E+00 + outer loop + vertex 0.644554E+02 0.489286E+02 0.838090E+01 + vertex 0.597081E+02 0.447564E+02 0.838090E+01 + vertex 0.575270E+02 0.495354E+02 0.589680E+01 + endloop +endfacet +facet normal 0.424982E+00 -0.126558E+00 -0.896311E+00 + outer loop + vertex 0.600649E+02 0.517612E+02 0.589680E+01 + vertex 0.610294E+02 0.550000E+02 0.589680E+01 + vertex 0.662685E+02 0.550000E+02 0.838090E+01 + endloop +endfacet +facet normal 0.425132E+00 -0.126950E+00 -0.896184E+00 + outer loop + vertex 0.662685E+02 0.550000E+02 0.838090E+01 + vertex 0.644555E+02 0.489286E+02 0.838090E+01 + vertex 0.600648E+02 0.517611E+02 0.589680E+01 + endloop +endfacet +facet normal 0.654949E+00 0.195580E+00 -0.729925E+00 + outer loop + vertex 0.662685E+02 0.550000E+02 0.838090E+01 + vertex 0.644555E+02 0.610713E+02 0.838090E+01 + vertex 0.679673E+02 0.633517E+02 0.121430E+02 + endloop +endfacet +facet normal 0.654472E+00 0.195833E+00 -0.730285E+00 + outer loop + vertex 0.679673E+02 0.633516E+02 0.121429E+02 + vertex 0.704664E+02 0.550000E+02 0.121430E+02 + vertex 0.662685E+02 0.550000E+02 0.838090E+01 + endloop +endfacet +facet normal 0.449997E+00 0.512036E+00 -0.731657E+00 + outer loop + vertex 0.644555E+02 0.610713E+02 0.838090E+01 + vertex 0.597081E+02 0.652435E+02 0.838090E+01 + vertex 0.614469E+02 0.690911E+02 0.121430E+02 + endloop +endfacet +facet normal 0.450747E+00 0.512078E+00 -0.731166E+00 + outer loop + vertex 0.614468E+02 0.690911E+02 0.121429E+02 + vertex 0.679673E+02 0.633517E+02 0.121430E+02 + vertex 0.644554E+02 0.610713E+02 0.838090E+01 + endloop +endfacet +facet normal 0.928077E-01 0.673827E+00 -0.733037E+00 + outer loop + vertex 0.597081E+02 0.652435E+02 0.838090E+01 + vertex 0.533835E+02 0.661146E+02 0.838090E+01 + vertex 0.527873E+02 0.702894E+02 0.121430E+02 + endloop +endfacet +facet normal 0.932928E-01 0.674185E+00 -0.732647E+00 + outer loop + vertex 0.527873E+02 0.702893E+02 0.121429E+02 + vertex 0.614469E+02 0.690911E+02 0.121430E+02 + vertex 0.597080E+02 0.652434E+02 0.838090E+01 + endloop +endfacet +facet normal -0.280266E+00 0.621279E+00 -0.731754E+00 + outer loop + vertex 0.533835E+02 0.661146E+02 0.838090E+01 + vertex 0.476164E+02 0.635130E+02 0.838090E+01 + vertex 0.448821E+02 0.667106E+02 0.121430E+02 + endloop +endfacet +facet normal -0.280711E+00 0.620090E+00 -0.732591E+00 + outer loop + vertex 0.448820E+02 0.667106E+02 0.121429E+02 + vertex 0.527873E+02 0.702894E+02 0.121430E+02 + vertex 0.533834E+02 0.661146E+02 0.838090E+01 + endloop +endfacet +facet normal -0.576052E+00 0.366598E+00 -0.730596E+00 + outer loop + vertex 0.476164E+02 0.635130E+02 0.838090E+01 + vertex 0.442062E+02 0.581544E+02 0.838090E+01 + vertex 0.401888E+02 0.593392E+02 0.121430E+02 + endloop +endfacet +facet normal -0.576092E+00 0.366797E+00 -0.730464E+00 + outer loop + vertex 0.401888E+02 0.593391E+02 0.121429E+02 + vertex 0.448821E+02 0.667106E+02 0.121430E+02 + vertex 0.476164E+02 0.635130E+02 0.838090E+01 + endloop +endfacet +facet normal -0.683534E+00 0.000000E+00 -0.729919E+00 + outer loop + vertex 0.442062E+02 0.581544E+02 0.838090E+01 + vertex 0.442062E+02 0.518455E+02 0.838090E+01 + vertex 0.401888E+02 0.506606E+02 0.121430E+02 + endloop +endfacet +facet normal -0.683541E+00 0.834160E-05 -0.729912E+00 + outer loop + vertex 0.401888E+02 0.506605E+02 0.121429E+02 + vertex 0.401888E+02 0.593392E+02 0.121430E+02 + vertex 0.442061E+02 0.581543E+02 0.838090E+01 + endloop +endfacet +facet normal -0.576190E+00 -0.366686E+00 -0.730442E+00 + outer loop + vertex 0.442062E+02 0.518455E+02 0.838090E+01 + vertex 0.476164E+02 0.464869E+02 0.838090E+01 + vertex 0.448821E+02 0.432893E+02 0.121430E+02 + endloop +endfacet +facet normal -0.576002E+00 -0.366717E+00 -0.730575E+00 + outer loop + vertex 0.448820E+02 0.432892E+02 0.121429E+02 + vertex 0.401888E+02 0.506606E+02 0.121430E+02 + vertex 0.442061E+02 0.518455E+02 0.838090E+01 + endloop +endfacet +facet normal -0.279837E+00 -0.620328E+00 -0.732724E+00 + outer loop + vertex 0.476164E+02 0.464869E+02 0.838090E+01 + vertex 0.533835E+02 0.438853E+02 0.838090E+01 + vertex 0.527873E+02 0.397105E+02 0.121430E+02 + endloop +endfacet +facet normal -0.281047E+00 -0.620767E+00 -0.731888E+00 + outer loop + vertex 0.527873E+02 0.397104E+02 0.121429E+02 + vertex 0.448821E+02 0.432893E+02 0.121430E+02 + vertex 0.476164E+02 0.464869E+02 0.838090E+01 + endloop +endfacet +facet normal 0.928759E-01 -0.674322E+00 -0.732574E+00 + outer loop + vertex 0.533835E+02 0.438853E+02 0.838090E+01 + vertex 0.597081E+02 0.447564E+02 0.838090E+01 + vertex 0.614469E+02 0.409088E+02 0.121430E+02 + endloop +endfacet +facet normal 0.932298E-01 -0.673841E+00 -0.732971E+00 + outer loop + vertex 0.614468E+02 0.409087E+02 0.121429E+02 + vertex 0.527873E+02 0.397105E+02 0.121430E+02 + vertex 0.533834E+02 0.438852E+02 0.838090E+01 + endloop +endfacet +facet normal 0.450402E+00 -0.512496E+00 -0.731086E+00 + outer loop + vertex 0.597081E+02 0.447564E+02 0.838090E+01 + vertex 0.644555E+02 0.489286E+02 0.838090E+01 + vertex 0.679673E+02 0.466482E+02 0.121430E+02 + endloop +endfacet +facet normal 0.450443E+00 -0.511750E+00 -0.731583E+00 + outer loop + vertex 0.679673E+02 0.466482E+02 0.121429E+02 + vertex 0.614469E+02 0.409088E+02 0.121430E+02 + vertex 0.597080E+02 0.447564E+02 0.838090E+01 + endloop +endfacet +facet normal 0.654523E+00 -0.195449E+00 -0.730342E+00 + outer loop + vertex 0.644555E+02 0.489286E+02 0.838090E+01 + vertex 0.662685E+02 0.550000E+02 0.838090E+01 + vertex 0.704664E+02 0.550000E+02 0.121430E+02 + endloop +endfacet +facet normal 0.654770E+00 -0.195935E+00 -0.729990E+00 + outer loop + vertex 0.704664E+02 0.550000E+02 0.121429E+02 + vertex 0.679673E+02 0.466482E+02 0.121430E+02 + vertex 0.644554E+02 0.489286E+02 0.838090E+01 + endloop +endfacet +facet normal 0.825831E+00 0.247116E+00 -0.506889E+00 + outer loop + vertex 0.704664E+02 0.550000E+02 0.121430E+02 + vertex 0.679673E+02 0.633517E+02 0.121430E+02 + vertex 0.703968E+02 0.649351E+02 0.168731E+02 + endloop +endfacet +facet normal 0.825501E+00 0.247334E+00 -0.507321E+00 + outer loop + vertex 0.703967E+02 0.649350E+02 0.168731E+02 + vertex 0.733734E+02 0.550000E+02 0.168731E+02 + vertex 0.704664E+02 0.550000E+02 0.121429E+02 + endloop +endfacet +facet normal 0.568642E+00 0.646021E+00 -0.509219E+00 + outer loop + vertex 0.679673E+02 0.633517E+02 0.121430E+02 + vertex 0.614469E+02 0.690911E+02 0.121430E+02 + vertex 0.626478E+02 0.717625E+02 0.168731E+02 + endloop +endfacet +facet normal 0.569184E+00 0.646025E+00 -0.508606E+00 + outer loop + vertex 0.626478E+02 0.717624E+02 0.168731E+02 + vertex 0.703968E+02 0.649351E+02 0.168731E+02 + vertex 0.679673E+02 0.633516E+02 0.121429E+02 + endloop +endfacet +facet normal 0.117792E+00 0.851238E+00 -0.511389E+00 + outer loop + vertex 0.614469E+02 0.690911E+02 0.121430E+02 + vertex 0.527873E+02 0.702894E+02 0.121430E+02 + vertex 0.523757E+02 0.731880E+02 0.168731E+02 + endloop +endfacet +facet normal 0.118165E+00 0.851490E+00 -0.510884E+00 + outer loop + vertex 0.523757E+02 0.731880E+02 0.168731E+02 + vertex 0.626478E+02 0.717625E+02 0.168731E+02 + vertex 0.614468E+02 0.690911E+02 0.121429E+02 + endloop +endfacet +facet normal -0.354837E+00 0.783800E+00 -0.509655E+00 + outer loop + vertex 0.527873E+02 0.702894E+02 0.121430E+02 + vertex 0.448821E+02 0.667106E+02 0.121430E+02 + vertex 0.429922E+02 0.689307E+02 0.168731E+02 + endloop +endfacet +facet normal -0.355218E+00 0.782944E+00 -0.510704E+00 + outer loop + vertex 0.429921E+02 0.689307E+02 0.168731E+02 + vertex 0.523757E+02 0.731880E+02 0.168731E+02 + vertex 0.527873E+02 0.702893E+02 0.121429E+02 + endloop +endfacet +facet normal -0.726699E+00 0.462682E+00 -0.507773E+00 + outer loop + vertex 0.448821E+02 0.667106E+02 0.121430E+02 + vertex 0.401888E+02 0.593392E+02 0.121430E+02 + vertex 0.374075E+02 0.601619E+02 0.168731E+02 + endloop +endfacet +facet normal -0.726736E+00 0.462840E+00 -0.507576E+00 + outer loop + vertex 0.374075E+02 0.601618E+02 0.168731E+02 + vertex 0.429922E+02 0.689307E+02 0.168731E+02 + vertex 0.448820E+02 0.667106E+02 0.121429E+02 + endloop +endfacet +facet normal -0.862023E+00 0.000000E+00 -0.506869E+00 + outer loop + vertex 0.401888E+02 0.593392E+02 0.121430E+02 + vertex 0.401888E+02 0.506606E+02 0.121430E+02 + vertex 0.374075E+02 0.498380E+02 0.168731E+02 + endloop +endfacet +facet normal -0.862027E+00 0.000000E+00 -0.506862E+00 + outer loop + vertex 0.374075E+02 0.498380E+02 0.168731E+02 + vertex 0.374075E+02 0.601619E+02 0.168731E+02 + vertex 0.401888E+02 0.593391E+02 0.121429E+02 + endloop +endfacet +facet normal -0.726788E+00 -0.462745E+00 -0.507588E+00 + outer loop + vertex 0.401888E+02 0.506606E+02 0.121430E+02 + vertex 0.448821E+02 0.432893E+02 0.121430E+02 + vertex 0.429922E+02 0.410691E+02 0.168731E+02 + endloop +endfacet +endsolid mesh1 + +solid mesh2 +facet normal -0.726662E+00 -0.462780E+00 -0.507738E+00 + outer loop + vertex 0.429921E+02 0.410690E+02 0.168731E+02 + vertex 0.374075E+02 0.498380E+02 0.168731E+02 + vertex 0.401888E+02 0.506605E+02 0.121429E+02 + endloop +endfacet +facet normal -0.354560E+00 -0.783187E+00 -0.510789E+00 + outer loop + vertex 0.448821E+02 0.432893E+02 0.121430E+02 + vertex 0.527873E+02 0.397105E+02 0.121430E+02 + vertex 0.523757E+02 0.368119E+02 0.168731E+02 + endloop +endfacet +facet normal -0.355453E+00 -0.783472E+00 -0.509730E+00 + outer loop + vertex 0.523757E+02 0.368119E+02 0.168731E+02 + vertex 0.429922E+02 0.410691E+02 0.168731E+02 + vertex 0.448820E+02 0.432892E+02 0.121429E+02 + endloop +endfacet +facet normal 0.117837E+00 -0.851557E+00 -0.510847E+00 + outer loop + vertex 0.527873E+02 0.397105E+02 0.121430E+02 + vertex 0.614469E+02 0.409088E+02 0.121430E+02 + vertex 0.626478E+02 0.382374E+02 0.168731E+02 + endloop +endfacet +facet normal 0.118129E+00 -0.851230E+00 -0.511325E+00 + outer loop + vertex 0.626478E+02 0.382374E+02 0.168731E+02 + vertex 0.523757E+02 0.368119E+02 0.168731E+02 + vertex 0.527873E+02 0.397104E+02 0.121429E+02 + endloop +endfacet +facet normal 0.568901E+00 -0.646315E+00 -0.508555E+00 + outer loop + vertex 0.614469E+02 0.409088E+02 0.121430E+02 + vertex 0.679673E+02 0.466482E+02 0.121430E+02 + vertex 0.703968E+02 0.450648E+02 0.168731E+02 + endloop +endfacet +facet normal 0.568979E+00 -0.645775E+00 -0.509154E+00 + outer loop + vertex 0.703967E+02 0.450648E+02 0.168731E+02 + vertex 0.626478E+02 0.382374E+02 0.168731E+02 + vertex 0.614468E+02 0.409087E+02 0.121429E+02 + endloop +endfacet +facet normal 0.825562E+00 -0.247032E+00 -0.507369E+00 + outer loop + vertex 0.679673E+02 0.466482E+02 0.121430E+02 + vertex 0.704664E+02 0.550000E+02 0.121430E+02 + vertex 0.733734E+02 0.550000E+02 0.168731E+02 + endloop +endfacet +facet normal 0.825734E+00 -0.247383E+00 -0.506918E+00 + outer loop + vertex 0.733733E+02 0.550000E+02 0.168731E+02 + vertex 0.703968E+02 0.450648E+02 0.168731E+02 + vertex 0.679673E+02 0.466482E+02 0.121429E+02 + endloop +endfacet +facet normal 0.926849E+00 0.277688E+00 -0.252668E+00 + outer loop + vertex 0.733734E+02 0.550000E+02 0.168731E+02 + vertex 0.703968E+02 0.649351E+02 0.168731E+02 + vertex 0.716166E+02 0.657304E+02 0.222217E+02 + endloop +endfacet +facet normal 0.926743E+00 0.277796E+00 -0.252937E+00 + outer loop + vertex 0.716166E+02 0.657304E+02 0.222217E+02 + vertex 0.748331E+02 0.550000E+02 0.222217E+02 + vertex 0.733733E+02 0.550000E+02 0.168731E+02 + endloop +endfacet +facet normal 0.639382E+00 0.725688E+00 -0.254101E+00 + outer loop + vertex 0.703968E+02 0.649351E+02 0.168731E+02 + vertex 0.626478E+02 0.717625E+02 0.168731E+02 + vertex 0.632505E+02 0.731043E+02 0.222217E+02 + endloop +endfacet +facet normal 0.639569E+00 0.725635E+00 -0.253783E+00 + outer loop + vertex 0.632504E+02 0.731043E+02 0.222217E+02 + vertex 0.716166E+02 0.657304E+02 0.222217E+02 + vertex 0.703967E+02 0.649350E+02 0.168731E+02 + endloop +endfacet +facet normal 0.132894E+00 0.957623E+00 -0.255533E+00 + outer loop + vertex 0.626478E+02 0.717625E+02 0.168731E+02 + vertex 0.523757E+02 0.731880E+02 0.168731E+02 + vertex 0.521691E+02 0.746439E+02 0.222217E+02 + endloop +endfacet +facet normal 0.133046E+00 0.957674E+00 -0.255262E+00 + outer loop + vertex 0.521691E+02 0.746438E+02 0.222217E+02 + vertex 0.632505E+02 0.731043E+02 0.222217E+02 + vertex 0.626478E+02 0.717624E+02 0.168731E+02 + endloop +endfacet +facet normal -0.399561E+00 0.880670E+00 -0.254501E+00 + outer loop + vertex 0.523757E+02 0.731880E+02 0.168731E+02 + vertex 0.429922E+02 0.689307E+02 0.168731E+02 + vertex 0.420434E+02 0.700459E+02 0.222217E+02 + endloop +endfacet +facet normal -0.399786E+00 0.880398E+00 -0.255088E+00 + outer loop + vertex 0.420433E+02 0.700458E+02 0.222217E+02 + vertex 0.521691E+02 0.746439E+02 0.222217E+02 + vertex 0.523757E+02 0.731880E+02 0.168731E+02 + endloop +endfacet +facet normal -0.815979E+00 0.519683E+00 -0.253197E+00 + outer loop + vertex 0.429922E+02 0.689307E+02 0.168731E+02 + vertex 0.374075E+02 0.601619E+02 0.168731E+02 + vertex 0.360110E+02 0.605751E+02 0.222217E+02 + endloop +endfacet +facet normal -0.815979E+00 0.519730E+00 -0.253098E+00 + outer loop + vertex 0.360110E+02 0.605750E+02 0.222217E+02 + vertex 0.420434E+02 0.700459E+02 0.222217E+02 + vertex 0.429921E+02 0.689307E+02 0.168731E+02 + endloop +endfacet +facet normal -0.967564E+00 0.000000E+00 -0.252627E+00 + outer loop + vertex 0.374075E+02 0.601619E+02 0.168731E+02 + vertex 0.374075E+02 0.498380E+02 0.168731E+02 + vertex 0.360110E+02 0.494248E+02 0.222217E+02 + endloop +endfacet +facet normal -0.967564E+00 0.000000E+00 -0.252627E+00 + outer loop + vertex 0.360110E+02 0.494248E+02 0.222217E+02 + vertex 0.360110E+02 0.605751E+02 0.222217E+02 + vertex 0.374075E+02 0.601618E+02 0.168731E+02 + endloop +endfacet +facet normal -0.816003E+00 -0.519692E+00 -0.253100E+00 + outer loop + vertex 0.374075E+02 0.498380E+02 0.168731E+02 + vertex 0.429922E+02 0.410691E+02 0.168731E+02 + vertex 0.420434E+02 0.399540E+02 0.222217E+02 + endloop +endfacet +facet normal -0.815962E+00 -0.519710E+00 -0.253194E+00 + outer loop + vertex 0.420433E+02 0.399539E+02 0.222217E+02 + vertex 0.360110E+02 0.494248E+02 0.222217E+02 + vertex 0.374075E+02 0.498380E+02 0.168731E+02 + endloop +endfacet +facet normal -0.399486E+00 -0.880527E+00 -0.255113E+00 + outer loop + vertex 0.429922E+02 0.410691E+02 0.168731E+02 + vertex 0.523757E+02 0.368119E+02 0.168731E+02 + vertex 0.521691E+02 0.353560E+02 0.222217E+02 + endloop +endfacet +facet normal -0.399855E+00 -0.880541E+00 -0.254487E+00 + outer loop + vertex 0.521691E+02 0.353559E+02 0.222217E+02 + vertex 0.420434E+02 0.399540E+02 0.222217E+02 + vertex 0.429921E+02 0.410690E+02 0.168731E+02 + endloop +endfacet +facet normal 0.132904E+00 -0.957701E+00 -0.255234E+00 + outer loop + vertex 0.523757E+02 0.368119E+02 0.168731E+02 + vertex 0.626478E+02 0.382374E+02 0.168731E+02 + vertex 0.632505E+02 0.368956E+02 0.222217E+02 + endloop +endfacet +facet normal 0.133038E+00 -0.957606E+00 -0.255524E+00 + outer loop + vertex 0.632504E+02 0.368955E+02 0.222217E+02 + vertex 0.521691E+02 0.353560E+02 0.222217E+02 + vertex 0.523757E+02 0.368119E+02 0.168731E+02 + endloop +endfacet +facet normal 0.639443E+00 -0.725758E+00 -0.253747E+00 + outer loop + vertex 0.626478E+02 0.382374E+02 0.168731E+02 + vertex 0.703968E+02 0.450648E+02 0.168731E+02 + vertex 0.716166E+02 0.442695E+02 0.222217E+02 + endloop +endfacet +facet normal 0.639520E+00 -0.725571E+00 -0.254087E+00 + outer loop + vertex 0.716166E+02 0.442695E+02 0.222217E+02 + vertex 0.632505E+02 0.368956E+02 0.222217E+02 + vertex 0.626478E+02 0.382374E+02 0.168731E+02 + endloop +endfacet +facet normal 0.926784E+00 -0.277666E+00 -0.252931E+00 + outer loop + vertex 0.703968E+02 0.450648E+02 0.168731E+02 + vertex 0.733734E+02 0.550000E+02 0.168731E+02 + vertex 0.748331E+02 0.550000E+02 0.222217E+02 + endloop +endfacet +facet normal 0.926807E+00 -0.277805E+00 -0.252693E+00 + outer loop + vertex 0.748330E+02 0.550000E+02 0.222217E+02 + vertex 0.716166E+02 0.442695E+02 0.222217E+02 + vertex 0.703967E+02 0.450648E+02 0.168731E+02 + endloop +endfacet +facet normal 0.957891E+00 0.287133E+00 0.000000E+00 + outer loop + vertex 0.748331E+02 0.550000E+02 0.222217E+02 + vertex 0.716166E+02 0.657304E+02 0.222217E+02 + vertex 0.716166E+02 0.657304E+02 0.277782E+02 + endloop +endfacet +facet normal 0.957891E+00 0.287131E+00 -0.119729E-04 + outer loop + vertex 0.716166E+02 0.657304E+02 0.277782E+02 + vertex 0.748331E+02 0.549999E+02 0.277782E+02 + vertex 0.748330E+02 0.550000E+02 0.222217E+02 + endloop +endfacet +facet normal 0.661221E+00 0.750192E+00 0.000000E+00 + outer loop + vertex 0.716166E+02 0.657304E+02 0.222217E+02 + vertex 0.632505E+02 0.731043E+02 0.222217E+02 + vertex 0.632505E+02 0.731043E+02 0.277782E+02 + endloop +endfacet +facet normal 0.661216E+00 0.750195E+00 0.000000E+00 + outer loop + vertex 0.632504E+02 0.731043E+02 0.277782E+02 + vertex 0.716166E+02 0.657304E+02 0.277782E+02 + vertex 0.716166E+02 0.657304E+02 0.222217E+02 + endloop +endfacet +facet normal 0.137613E+00 0.990486E+00 0.000000E+00 + outer loop + vertex 0.632505E+02 0.731043E+02 0.222217E+02 + vertex 0.521691E+02 0.746439E+02 0.222217E+02 + vertex 0.521691E+02 0.746439E+02 0.277782E+02 + endloop +endfacet +facet normal 0.137605E+00 0.990487E+00 -0.245621E-05 + outer loop + vertex 0.521691E+02 0.746438E+02 0.277782E+02 + vertex 0.632505E+02 0.731043E+02 0.277782E+02 + vertex 0.632504E+02 0.731043E+02 0.222217E+02 + endloop +endfacet +facet normal -0.413461E+00 0.910522E+00 0.000000E+00 + outer loop + vertex 0.521691E+02 0.746439E+02 0.222217E+02 + vertex 0.420434E+02 0.700459E+02 0.222217E+02 + vertex 0.420434E+02 0.700459E+02 0.277782E+02 + endloop +endfacet +facet normal -0.413465E+00 0.910520E+00 -0.162526E-04 + outer loop + vertex 0.420433E+02 0.700458E+02 0.277782E+02 + vertex 0.521691E+02 0.746439E+02 0.277782E+02 + vertex 0.521691E+02 0.746438E+02 0.222217E+02 + endloop +endfacet +facet normal -0.843439E+00 0.537226E+00 0.000000E+00 + outer loop + vertex 0.420434E+02 0.700459E+02 0.222217E+02 + vertex 0.360110E+02 0.605751E+02 0.222217E+02 + vertex 0.360110E+02 0.605751E+02 0.277782E+02 + endloop +endfacet +facet normal -0.843441E+00 0.537222E+00 0.546594E-05 + outer loop + vertex 0.360110E+02 0.605750E+02 0.277782E+02 + vertex 0.420434E+02 0.700459E+02 0.277782E+02 + vertex 0.420433E+02 0.700458E+02 0.222217E+02 + endloop +endfacet +facet normal -0.100000E+01 0.000000E+00 0.000000E+00 + outer loop + vertex 0.360110E+02 0.605751E+02 0.222217E+02 + vertex 0.360110E+02 0.494248E+02 0.222217E+02 + vertex 0.360110E+02 0.494248E+02 0.277782E+02 + endloop +endfacet +facet normal -0.100000E+01 0.000000E+00 0.000000E+00 + outer loop + vertex 0.360110E+02 0.494248E+02 0.277782E+02 + vertex 0.360110E+02 0.605751E+02 0.277782E+02 + vertex 0.360110E+02 0.605750E+02 0.222217E+02 + endloop +endfacet +facet normal -0.843439E+00 -0.537226E+00 0.000000E+00 + outer loop + vertex 0.360110E+02 0.494248E+02 0.222217E+02 + vertex 0.420434E+02 0.399540E+02 0.222217E+02 + vertex 0.420434E+02 0.399540E+02 0.277782E+02 + endloop +endfacet +facet normal -0.843445E+00 -0.537215E+00 0.000000E+00 + outer loop + vertex 0.420433E+02 0.399539E+02 0.277782E+02 + vertex 0.360110E+02 0.494248E+02 0.277782E+02 + vertex 0.360110E+02 0.494248E+02 0.222217E+02 + endloop +endfacet +facet normal -0.413461E+00 -0.910522E+00 0.000000E+00 + outer loop + vertex 0.420434E+02 0.399540E+02 0.222217E+02 + vertex 0.521691E+02 0.353560E+02 0.222217E+02 + vertex 0.521691E+02 0.353560E+02 0.277782E+02 + endloop +endfacet +facet normal -0.413468E+00 -0.910519E+00 0.236328E-04 + outer loop + vertex 0.521691E+02 0.353559E+02 0.277782E+02 + vertex 0.420434E+02 0.399540E+02 0.277782E+02 + vertex 0.420433E+02 0.399539E+02 0.222217E+02 + endloop +endfacet +facet normal 0.137614E+00 -0.990486E+00 0.000000E+00 + outer loop + vertex 0.521691E+02 0.353560E+02 0.222217E+02 + vertex 0.632505E+02 0.368956E+02 0.222217E+02 + vertex 0.632505E+02 0.368956E+02 0.277782E+02 + endloop +endfacet +facet normal 0.137606E+00 -0.990487E+00 0.176799E-04 + outer loop + vertex 0.632504E+02 0.368955E+02 0.277782E+02 + vertex 0.521691E+02 0.353560E+02 0.277782E+02 + vertex 0.521691E+02 0.353559E+02 0.222217E+02 + endloop +endfacet +facet normal 0.661221E+00 -0.750192E+00 0.000000E+00 + outer loop + vertex 0.632505E+02 0.368956E+02 0.222217E+02 + vertex 0.716166E+02 0.442695E+02 0.222217E+02 + vertex 0.716166E+02 0.442695E+02 0.277782E+02 + endloop +endfacet +facet normal 0.661221E+00 -0.750192E+00 0.158811E-05 + outer loop + vertex 0.716166E+02 0.442695E+02 0.277782E+02 + vertex 0.632505E+02 0.368956E+02 0.277782E+02 + vertex 0.632504E+02 0.368955E+02 0.222217E+02 + endloop +endfacet +facet normal 0.957891E+00 -0.287131E+00 -0.512521E-05 + outer loop + vertex 0.716166E+02 0.442695E+02 0.222217E+02 + vertex 0.748331E+02 0.550000E+02 0.222217E+02 + vertex 0.748331E+02 0.549999E+02 0.277782E+02 + endloop +endfacet +facet normal 0.957893E+00 -0.287125E+00 0.000000E+00 + outer loop + vertex 0.748330E+02 0.549999E+02 0.277782E+02 + vertex 0.716166E+02 0.442695E+02 0.277782E+02 + vertex 0.716166E+02 0.442695E+02 0.222217E+02 + endloop +endfacet +facet normal 0.926808E+00 0.277814E+00 0.252677E+00 + outer loop + vertex 0.748331E+02 0.549999E+02 0.277782E+02 + vertex 0.716166E+02 0.657304E+02 0.277782E+02 + vertex 0.703968E+02 0.649351E+02 0.331268E+02 + endloop +endfacet +facet normal 0.926784E+00 0.277678E+00 0.252914E+00 + outer loop + vertex 0.703967E+02 0.649350E+02 0.331268E+02 + vertex 0.733734E+02 0.549999E+02 0.331268E+02 + vertex 0.748330E+02 0.549999E+02 0.277782E+02 + endloop +endfacet +facet normal 0.639518E+00 0.725569E+00 0.254099E+00 + outer loop + vertex 0.716166E+02 0.657304E+02 0.277782E+02 + vertex 0.632505E+02 0.731043E+02 0.277782E+02 + vertex 0.626477E+02 0.717625E+02 0.331268E+02 + endloop +endfacet +facet normal 0.639433E+00 0.725767E+00 0.253746E+00 + outer loop + vertex 0.626477E+02 0.717624E+02 0.331268E+02 + vertex 0.703968E+02 0.649351E+02 0.331268E+02 + vertex 0.716166E+02 0.657304E+02 0.277782E+02 + endloop +endfacet +facet normal 0.133045E+00 0.957605E+00 0.255522E+00 + outer loop + vertex 0.632505E+02 0.731043E+02 0.277782E+02 + vertex 0.521691E+02 0.746439E+02 0.277782E+02 + vertex 0.523757E+02 0.731880E+02 0.331268E+02 + endloop +endfacet +facet normal 0.132906E+00 0.957701E+00 0.255235E+00 + outer loop + vertex 0.523757E+02 0.731880E+02 0.331268E+02 + vertex 0.626477E+02 0.717625E+02 0.331268E+02 + vertex 0.632504E+02 0.731043E+02 0.277782E+02 + endloop +endfacet +facet normal -0.399846E+00 0.880539E+00 0.254508E+00 + outer loop + vertex 0.521691E+02 0.746439E+02 0.277782E+02 + vertex 0.420434E+02 0.700459E+02 0.277782E+02 + vertex 0.429922E+02 0.689308E+02 0.331268E+02 + endloop +endfacet +facet normal -0.399485E+00 0.880533E+00 0.255096E+00 + outer loop + vertex 0.429921E+02 0.689308E+02 0.331268E+02 + vertex 0.523757E+02 0.731880E+02 0.331268E+02 + vertex 0.521691E+02 0.746438E+02 0.277782E+02 + endloop +endfacet +facet normal -0.815956E+00 0.519721E+00 0.253193E+00 + outer loop + vertex 0.420434E+02 0.700459E+02 0.277782E+02 + vertex 0.360110E+02 0.605751E+02 0.277782E+02 + vertex 0.374075E+02 0.601619E+02 0.331268E+02 + endloop +endfacet +facet normal -0.816004E+00 0.519687E+00 0.253105E+00 + outer loop + vertex 0.374075E+02 0.601618E+02 0.331268E+02 + vertex 0.429922E+02 0.689308E+02 0.331268E+02 + vertex 0.420433E+02 0.700458E+02 0.277782E+02 + endloop +endfacet +facet normal -0.967564E+00 0.000000E+00 0.252627E+00 + outer loop + vertex 0.360110E+02 0.605751E+02 0.277782E+02 + vertex 0.360110E+02 0.494248E+02 0.277782E+02 + vertex 0.374075E+02 0.498380E+02 0.331268E+02 + endloop +endfacet +facet normal -0.967564E+00 0.000000E+00 0.252627E+00 + outer loop + vertex 0.374075E+02 0.498380E+02 0.331268E+02 + vertex 0.374075E+02 0.601619E+02 0.331268E+02 + vertex 0.360110E+02 0.605750E+02 0.277782E+02 + endloop +endfacet +facet normal -0.815975E+00 -0.519733E+00 0.253104E+00 + outer loop + vertex 0.360110E+02 0.494248E+02 0.277782E+02 + vertex 0.420434E+02 0.399540E+02 0.277782E+02 + vertex 0.429922E+02 0.410691E+02 0.331268E+02 + endloop +endfacet +facet normal -0.815988E+00 -0.519668E+00 0.253198E+00 + outer loop + vertex 0.429921E+02 0.410690E+02 0.331268E+02 + vertex 0.374075E+02 0.498380E+02 0.331268E+02 + vertex 0.360110E+02 0.494248E+02 0.277782E+02 + endloop +endfacet +facet normal -0.399782E+00 -0.880400E+00 0.255089E+00 + outer loop + vertex 0.420434E+02 0.399540E+02 0.277782E+02 + vertex 0.521691E+02 0.353560E+02 0.277782E+02 + vertex 0.523757E+02 0.368119E+02 0.331268E+02 + endloop +endfacet +facet normal -0.399552E+00 -0.880673E+00 0.254508E+00 + outer loop + vertex 0.523757E+02 0.368119E+02 0.331268E+02 + vertex 0.429922E+02 0.410691E+02 0.331268E+02 + vertex 0.420433E+02 0.399539E+02 0.277782E+02 + endloop +endfacet +facet normal 0.133055E+00 -0.957677E+00 0.255248E+00 + outer loop + vertex 0.521691E+02 0.353560E+02 0.277782E+02 + vertex 0.632505E+02 0.368956E+02 0.277782E+02 + vertex 0.626477E+02 0.382374E+02 0.331268E+02 + endloop +endfacet +facet normal 0.132894E+00 -0.957618E+00 0.255551E+00 + outer loop + vertex 0.626477E+02 0.382374E+02 0.331268E+02 + vertex 0.523757E+02 0.368119E+02 0.331268E+02 + vertex 0.521691E+02 0.353559E+02 0.277782E+02 + endloop +endfacet +endsolid + +solid mesh3 +facet normal 0.639577E+00 -0.725636E+00 0.253759E+00 + outer loop + vertex 0.632505E+02 0.368956E+02 0.277782E+02 + vertex 0.716166E+02 0.442695E+02 0.277782E+02 + vertex 0.703968E+02 0.450648E+02 0.331268E+02 + endloop +endfacet +facet normal 0.639379E+00 -0.725686E+00 0.254113E+00 + outer loop + vertex 0.703967E+02 0.450648E+02 0.331268E+02 + vertex 0.626477E+02 0.382374E+02 0.331268E+02 + vertex 0.632504E+02 0.368955E+02 0.277782E+02 + endloop +endfacet +facet normal 0.926747E+00 -0.277798E+00 0.252921E+00 + outer loop + vertex 0.716166E+02 0.442695E+02 0.277782E+02 + vertex 0.748331E+02 0.549999E+02 0.277782E+02 + vertex 0.733734E+02 0.549999E+02 0.331268E+02 + endloop +endfacet +facet normal 0.926851E+00 -0.277680E+00 0.252667E+00 + outer loop + vertex 0.733733E+02 0.549999E+02 0.331268E+02 + vertex 0.703968E+02 0.450648E+02 0.331268E+02 + vertex 0.716166E+02 0.442695E+02 0.277782E+02 + endloop +endfacet +facet normal 0.825726E+00 0.247389E+00 0.506927E+00 + outer loop + vertex 0.733734E+02 0.549999E+02 0.331268E+02 + vertex 0.703968E+02 0.649351E+02 0.331268E+02 + vertex 0.679673E+02 0.633517E+02 0.378569E+02 + endloop +endfacet +facet normal 0.825567E+00 0.247042E+00 0.507355E+00 + outer loop + vertex 0.679673E+02 0.633516E+02 0.378568E+02 + vertex 0.704664E+02 0.549999E+02 0.378569E+02 + vertex 0.733733E+02 0.549999E+02 0.331268E+02 + endloop +endfacet +facet normal 0.568970E+00 0.645781E+00 0.509156E+00 + outer loop + vertex 0.703968E+02 0.649351E+02 0.331268E+02 + vertex 0.626477E+02 0.717625E+02 0.331268E+02 + vertex 0.614469E+02 0.690911E+02 0.378569E+02 + endloop +endfacet +facet normal 0.568900E+00 0.646332E+00 0.508535E+00 + outer loop + vertex 0.614468E+02 0.690911E+02 0.378568E+02 + vertex 0.679673E+02 0.633517E+02 0.378569E+02 + vertex 0.703967E+02 0.649350E+02 0.331268E+02 + endloop +endfacet +facet normal 0.118128E+00 0.851217E+00 0.511347E+00 + outer loop + vertex 0.626477E+02 0.717625E+02 0.331268E+02 + vertex 0.523757E+02 0.731880E+02 0.331268E+02 + vertex 0.527873E+02 0.702894E+02 0.378569E+02 + endloop +endfacet +facet normal 0.117823E+00 0.851570E+00 0.510830E+00 + outer loop + vertex 0.527873E+02 0.702893E+02 0.378568E+02 + vertex 0.614469E+02 0.690911E+02 0.378569E+02 + vertex 0.626477E+02 0.717624E+02 0.331268E+02 + endloop +endfacet +facet normal -0.355447E+00 0.783458E+00 0.509755E+00 + outer loop + vertex 0.523757E+02 0.731880E+02 0.331268E+02 + vertex 0.429922E+02 0.689308E+02 0.331268E+02 + vertex 0.448821E+02 0.667106E+02 0.378569E+02 + endloop +endfacet +facet normal -0.354561E+00 0.783186E+00 0.510789E+00 + outer loop + vertex 0.448820E+02 0.667106E+02 0.378568E+02 + vertex 0.527873E+02 0.702894E+02 0.378569E+02 + vertex 0.523757E+02 0.731880E+02 0.331268E+02 + endloop +endfacet +facet normal -0.726645E+00 0.462782E+00 0.507759E+00 + outer loop + vertex 0.429922E+02 0.689308E+02 0.331268E+02 + vertex 0.374075E+02 0.601619E+02 0.331268E+02 + vertex 0.401888E+02 0.593392E+02 0.378569E+02 + endloop +endfacet +facet normal -0.726792E+00 0.462728E+00 0.507598E+00 + outer loop + vertex 0.401888E+02 0.593391E+02 0.378568E+02 + vertex 0.448821E+02 0.667106E+02 0.378569E+02 + vertex 0.429921E+02 0.689308E+02 0.331268E+02 + endloop +endfacet +facet normal -0.862023E+00 0.000000E+00 0.506870E+00 + outer loop + vertex 0.374075E+02 0.601619E+02 0.331268E+02 + vertex 0.374075E+02 0.498380E+02 0.331268E+02 + vertex 0.401888E+02 0.506607E+02 0.378569E+02 + endloop +endfacet +facet normal -0.862023E+00 -0.579275E-05 0.506869E+00 + outer loop + vertex 0.401888E+02 0.506607E+02 0.378568E+02 + vertex 0.401888E+02 0.593392E+02 0.378569E+02 + vertex 0.374075E+02 0.601618E+02 0.331268E+02 + endloop +endfacet +facet normal -0.726723E+00 -0.462832E+00 0.507603E+00 + outer loop + vertex 0.374075E+02 0.498380E+02 0.331268E+02 + vertex 0.429922E+02 0.410691E+02 0.331268E+02 + vertex 0.448821E+02 0.432893E+02 0.378569E+02 + endloop +endfacet +facet normal -0.726703E+00 -0.462675E+00 0.507774E+00 + outer loop + vertex 0.448820E+02 0.432892E+02 0.378568E+02 + vertex 0.401888E+02 0.506607E+02 0.378569E+02 + vertex 0.374075E+02 0.498380E+02 0.331268E+02 + endloop +endfacet +facet normal -0.355216E+00 -0.782948E+00 0.510699E+00 + outer loop + vertex 0.429922E+02 0.410691E+02 0.331268E+02 + vertex 0.523757E+02 0.368119E+02 0.331268E+02 + vertex 0.527873E+02 0.397105E+02 0.378569E+02 + endloop +endfacet +facet normal -0.354833E+00 -0.783782E+00 0.509686E+00 + outer loop + vertex 0.527873E+02 0.397104E+02 0.378568E+02 + vertex 0.448821E+02 0.432893E+02 0.378569E+02 + vertex 0.429921E+02 0.410690E+02 0.331268E+02 + endloop +endfacet +facet normal 0.118165E+00 -0.851487E+00 0.510889E+00 + outer loop + vertex 0.523757E+02 0.368119E+02 0.331268E+02 + vertex 0.626477E+02 0.382374E+02 0.331268E+02 + vertex 0.614469E+02 0.409088E+02 0.378569E+02 + endloop +endfacet +facet normal 0.117790E+00 -0.851239E+00 0.511388E+00 + outer loop + vertex 0.614468E+02 0.409087E+02 0.378568E+02 + vertex 0.527873E+02 0.397105E+02 0.378569E+02 + vertex 0.523757E+02 0.368119E+02 0.331268E+02 + endloop +endfacet +facet normal 0.569186E+00 -0.646025E+00 0.508605E+00 + outer loop + vertex 0.626477E+02 0.382374E+02 0.331268E+02 + vertex 0.703968E+02 0.450648E+02 0.331268E+02 + vertex 0.679673E+02 0.466482E+02 0.378569E+02 + endloop +endfacet +facet normal 0.568650E+00 -0.646021E+00 0.509210E+00 + outer loop + vertex 0.679673E+02 0.466482E+02 0.378568E+02 + vertex 0.614469E+02 0.409088E+02 0.378569E+02 + vertex 0.626477E+02 0.382374E+02 0.331268E+02 + endloop +endfacet +facet normal 0.825498E+00 -0.247323E+00 0.507330E+00 + outer loop + vertex 0.703968E+02 0.450648E+02 0.331268E+02 + vertex 0.733734E+02 0.549999E+02 0.331268E+02 + vertex 0.704664E+02 0.549999E+02 0.378569E+02 + endloop +endfacet +facet normal 0.825840E+00 -0.247112E+00 0.506876E+00 + outer loop + vertex 0.704664E+02 0.549999E+02 0.378568E+02 + vertex 0.679673E+02 0.466482E+02 0.378569E+02 + vertex 0.703967E+02 0.450648E+02 0.331268E+02 + endloop +endfacet +facet normal 0.654782E+00 0.195930E+00 0.729981E+00 + outer loop + vertex 0.704664E+02 0.549999E+02 0.378569E+02 + vertex 0.679673E+02 0.633517E+02 0.378569E+02 + vertex 0.644555E+02 0.610713E+02 0.416190E+02 + endloop +endfacet +facet normal 0.654529E+00 0.195474E+00 0.730330E+00 + outer loop + vertex 0.644554E+02 0.610713E+02 0.416189E+02 + vertex 0.662685E+02 0.549999E+02 0.416190E+02 + vertex 0.704664E+02 0.549999E+02 0.378568E+02 + endloop +endfacet +facet normal 0.450454E+00 0.511750E+00 0.731576E+00 + outer loop + vertex 0.679673E+02 0.633517E+02 0.378569E+02 + vertex 0.614469E+02 0.690911E+02 0.378569E+02 + vertex 0.597081E+02 0.652435E+02 0.416190E+02 + endloop +endfacet +facet normal 0.450395E+00 0.512529E+00 0.731067E+00 + outer loop + vertex 0.597080E+02 0.652434E+02 0.416189E+02 + vertex 0.644555E+02 0.610713E+02 0.416190E+02 + vertex 0.679673E+02 0.633516E+02 0.378568E+02 + endloop +endfacet +facet normal 0.932436E-01 0.673834E+00 0.732976E+00 + outer loop + vertex 0.614469E+02 0.690911E+02 0.378569E+02 + vertex 0.527873E+02 0.702894E+02 0.378569E+02 + vertex 0.533835E+02 0.661146E+02 0.416190E+02 + endloop +endfacet +facet normal 0.928649E-01 0.674336E+00 0.732562E+00 + outer loop + vertex 0.533834E+02 0.661146E+02 0.416189E+02 + vertex 0.597081E+02 0.652435E+02 0.416190E+02 + vertex 0.614468E+02 0.690911E+02 0.378568E+02 + endloop +endfacet +facet normal -0.281034E+00 0.620776E+00 0.731886E+00 + outer loop + vertex 0.527873E+02 0.702894E+02 0.378569E+02 + vertex 0.448821E+02 0.667106E+02 0.378569E+02 + vertex 0.476164E+02 0.635130E+02 0.416190E+02 + endloop +endfacet +facet normal -0.279855E+00 0.620341E+00 0.732706E+00 + outer loop + vertex 0.476164E+02 0.635130E+02 0.416189E+02 + vertex 0.533835E+02 0.661146E+02 0.416190E+02 + vertex 0.527873E+02 0.702893E+02 0.378568E+02 + endloop +endfacet +facet normal -0.575994E+00 0.366730E+00 0.730575E+00 + outer loop + vertex 0.448821E+02 0.667106E+02 0.378569E+02 + vertex 0.401888E+02 0.593392E+02 0.378569E+02 + vertex 0.442062E+02 0.581544E+02 0.416190E+02 + endloop +endfacet +facet normal -0.576198E+00 0.366681E+00 0.730439E+00 + outer loop + vertex 0.442061E+02 0.581543E+02 0.416189E+02 + vertex 0.476164E+02 0.635130E+02 0.416190E+02 + vertex 0.448820E+02 0.667106E+02 0.378568E+02 + endloop +endfacet +facet normal -0.683534E+00 0.000000E+00 0.729919E+00 + outer loop + vertex 0.401888E+02 0.593392E+02 0.378569E+02 + vertex 0.401888E+02 0.506607E+02 0.378569E+02 + vertex 0.442062E+02 0.518455E+02 0.416190E+02 + endloop +endfacet +facet normal -0.683544E+00 -0.728923E-06 0.729910E+00 + outer loop + vertex 0.442061E+02 0.518455E+02 0.416189E+02 + vertex 0.442062E+02 0.581544E+02 0.416190E+02 + vertex 0.401888E+02 0.593391E+02 0.378568E+02 + endloop +endfacet +facet normal -0.576095E+00 -0.366794E+00 0.730464E+00 + outer loop + vertex 0.401888E+02 0.506607E+02 0.378569E+02 + vertex 0.448821E+02 0.432893E+02 0.378569E+02 + vertex 0.476164E+02 0.464869E+02 0.416190E+02 + endloop +endfacet +facet normal -0.576055E+00 -0.366614E+00 0.730585E+00 + outer loop + vertex 0.476164E+02 0.464869E+02 0.416189E+02 + vertex 0.442062E+02 0.518455E+02 0.416190E+02 + vertex 0.401888E+02 0.506607E+02 0.378568E+02 + endloop +endfacet +facet normal -0.280721E+00 -0.620083E+00 0.732593E+00 + outer loop + vertex 0.448821E+02 0.432893E+02 0.378569E+02 + vertex 0.527873E+02 0.397105E+02 0.378569E+02 + vertex 0.533835E+02 0.438853E+02 0.416190E+02 + endloop +endfacet +facet normal -0.280267E+00 -0.621275E+00 0.731757E+00 + outer loop + vertex 0.533834E+02 0.438852E+02 0.416189E+02 + vertex 0.476164E+02 0.464869E+02 0.416190E+02 + vertex 0.448820E+02 0.432892E+02 0.378568E+02 + endloop +endfacet +facet normal 0.932939E-01 -0.674195E+00 0.732637E+00 + outer loop + vertex 0.527873E+02 0.397105E+02 0.378569E+02 + vertex 0.614469E+02 0.409088E+02 0.378569E+02 + vertex 0.597081E+02 0.447564E+02 0.416190E+02 + endloop +endfacet +facet normal 0.928208E-01 -0.673828E+00 0.733035E+00 + outer loop + vertex 0.597080E+02 0.447564E+02 0.416189E+02 + vertex 0.533835E+02 0.438853E+02 0.416190E+02 + vertex 0.527873E+02 0.397104E+02 0.378568E+02 + endloop +endfacet +facet normal 0.450748E+00 -0.512085E+00 0.731160E+00 + outer loop + vertex 0.614469E+02 0.409088E+02 0.378569E+02 + vertex 0.679673E+02 0.466482E+02 0.378569E+02 + vertex 0.644555E+02 0.489286E+02 0.416190E+02 + endloop +endfacet +facet normal 0.450019E+00 -0.512033E+00 0.731646E+00 + outer loop + vertex 0.644554E+02 0.489286E+02 0.416189E+02 + vertex 0.597081E+02 0.447564E+02 0.416190E+02 + vertex 0.614468E+02 0.409087E+02 0.378568E+02 + endloop +endfacet +facet normal 0.654471E+00 -0.195839E+00 0.730284E+00 + outer loop + vertex 0.679673E+02 0.466482E+02 0.378569E+02 + vertex 0.704664E+02 0.549999E+02 0.378569E+02 + vertex 0.662685E+02 0.549999E+02 0.416190E+02 + endloop +endfacet +facet normal 0.654963E+00 -0.195572E+00 0.729914E+00 + outer loop + vertex 0.662685E+02 0.549999E+02 0.416189E+02 + vertex 0.644555E+02 0.489286E+02 0.416190E+02 + vertex 0.679673E+02 0.466482E+02 0.378568E+02 + endloop +endfacet +facet normal 0.425136E+00 0.126952E+00 0.896182E+00 + outer loop + vertex 0.662685E+02 0.549999E+02 0.416190E+02 + vertex 0.644555E+02 0.610713E+02 0.416190E+02 + vertex 0.600649E+02 0.582387E+02 0.441031E+02 + endloop +endfacet +facet normal 0.424996E+00 0.126606E+00 0.896298E+00 + outer loop + vertex 0.600648E+02 0.582387E+02 0.441030E+02 + vertex 0.610294E+02 0.550000E+02 0.441031E+02 + vertex 0.662685E+02 0.549999E+02 0.416189E+02 + endloop +endfacet +facet normal 0.292327E+00 0.332629E+00 0.896606E+00 + outer loop + vertex 0.644555E+02 0.610713E+02 0.416190E+02 + vertex 0.597081E+02 0.652435E+02 0.416190E+02 + vertex 0.575270E+02 0.604644E+02 0.441031E+02 + endloop +endfacet +facet normal 0.292210E+00 0.333239E+00 0.896418E+00 + outer loop + vertex 0.575270E+02 0.604644E+02 0.441030E+02 + vertex 0.600649E+02 0.582387E+02 0.441031E+02 + vertex 0.644554E+02 0.610713E+02 0.416189E+02 + endloop +endfacet +facet normal 0.603705E-01 0.438318E+00 0.896790E+00 + outer loop + vertex 0.597081E+02 0.652435E+02 0.416190E+02 + vertex 0.533835E+02 0.661146E+02 0.416190E+02 + vertex 0.541319E+02 0.609291E+02 0.441031E+02 + endloop +endfacet +facet normal 0.600191E-01 0.438692E+00 0.896631E+00 + outer loop + vertex 0.541319E+02 0.609291E+02 0.441030E+02 + vertex 0.575270E+02 0.604644E+02 0.441031E+02 + vertex 0.597080E+02 0.652434E+02 0.416189E+02 + endloop +endfacet +facet normal -0.182131E+00 0.403738E+00 0.896562E+00 + outer loop + vertex 0.533835E+02 0.661146E+02 0.416190E+02 + vertex 0.476164E+02 0.635130E+02 0.416190E+02 + vertex 0.510407E+02 0.595412E+02 0.441032E+02 + endloop +endfacet +facet normal -0.181174E+00 0.403504E+00 0.896861E+00 + outer loop + vertex 0.510406E+02 0.595411E+02 0.441031E+02 + vertex 0.541319E+02 0.609291E+02 0.441031E+02 + vertex 0.533834E+02 0.661146E+02 0.416189E+02 + endloop +endfacet +facet normal -0.374029E+00 0.238031E+00 0.896350E+00 + outer loop + vertex 0.476164E+02 0.635130E+02 0.416190E+02 + vertex 0.442062E+02 0.581544E+02 0.416190E+02 + vertex 0.492227E+02 0.566827E+02 0.441031E+02 + endloop +endfacet +facet normal -0.374234E+00 0.237963E+00 0.896282E+00 + outer loop + vertex 0.492226E+02 0.566827E+02 0.441030E+02 + vertex 0.510407E+02 0.595412E+02 0.441032E+02 + vertex 0.476164E+02 0.635130E+02 0.416189E+02 + endloop +endfacet +facet normal -0.443759E+00 0.000000E+00 0.896146E+00 + outer loop + vertex 0.442062E+02 0.581544E+02 0.416190E+02 + vertex 0.442062E+02 0.518455E+02 0.416190E+02 + vertex 0.492227E+02 0.533172E+02 0.441031E+02 + endloop +endfacet +facet normal -0.443769E+00 -0.133311E-04 0.896141E+00 + outer loop + vertex 0.492226E+02 0.533171E+02 0.441030E+02 + vertex 0.492227E+02 0.566827E+02 0.441031E+02 + vertex 0.442061E+02 0.581543E+02 0.416189E+02 + endloop +endfacet +facet normal -0.374086E+00 -0.238068E+00 0.896316E+00 + outer loop + vertex 0.442062E+02 0.518455E+02 0.416190E+02 + vertex 0.476164E+02 0.464869E+02 0.416190E+02 + vertex 0.510407E+02 0.504587E+02 0.441031E+02 + endloop +endfacet +facet normal -0.374076E+00 -0.237921E+00 0.896360E+00 + outer loop + vertex 0.510406E+02 0.504586E+02 0.441030E+02 + vertex 0.492227E+02 0.533172E+02 0.441031E+02 + vertex 0.442061E+02 0.518455E+02 0.416189E+02 + endloop +endfacet +facet normal -0.181951E+00 -0.403339E+00 0.896778E+00 + outer loop + vertex 0.476164E+02 0.464869E+02 0.416190E+02 + vertex 0.533835E+02 0.438853E+02 0.416190E+02 + vertex 0.541319E+02 0.490708E+02 0.441031E+02 + endloop +endfacet +facet normal -0.181472E+00 -0.404247E+00 0.896466E+00 + outer loop + vertex 0.541319E+02 0.490708E+02 0.441030E+02 + vertex 0.510407E+02 0.504587E+02 0.441031E+02 + vertex 0.476164E+02 0.464869E+02 0.416189E+02 + endloop +endfacet +facet normal 0.603984E-01 -0.438520E+00 0.896689E+00 + outer loop + vertex 0.533835E+02 0.438853E+02 0.416190E+02 + vertex 0.597081E+02 0.447564E+02 0.416190E+02 + vertex 0.575270E+02 0.495355E+02 0.441031E+02 + endloop +endfacet +facet normal 0.600040E-01 -0.438293E+00 0.896827E+00 + outer loop + vertex 0.575270E+02 0.495354E+02 0.441030E+02 + vertex 0.541319E+02 0.490708E+02 0.441031E+02 + vertex 0.533834E+02 0.438852E+02 0.416189E+02 + endloop +endfacet +facet normal 0.292492E+00 -0.332817E+00 0.896483E+00 + outer loop + vertex 0.597081E+02 0.447564E+02 0.416190E+02 + vertex 0.644555E+02 0.489286E+02 0.416190E+02 + vertex 0.600649E+02 0.517612E+02 0.441031E+02 + endloop +endfacet +facet normal 0.291940E+00 -0.332852E+00 0.896649E+00 + outer loop + vertex 0.600648E+02 0.517611E+02 0.441030E+02 + vertex 0.575270E+02 0.495355E+02 0.441031E+02 + vertex 0.597080E+02 0.447564E+02 0.416189E+02 + endloop +endfacet +facet normal 0.424962E+00 -0.126901E+00 0.896272E+00 + outer loop + vertex 0.644555E+02 0.489286E+02 0.416190E+02 + vertex 0.662685E+02 0.549999E+02 0.416190E+02 + vertex 0.610294E+02 0.550000E+02 0.441031E+02 + endloop +endfacet +facet normal 0.425346E+00 -0.126626E+00 0.896129E+00 + outer loop + vertex 0.610293E+02 0.550000E+02 0.441030E+02 + vertex 0.600649E+02 0.517612E+02 0.441031E+02 + vertex 0.644554E+02 0.489286E+02 0.416189E+02 + endloop +endfacet +facet normal 0.146979E+00 0.437709E-01 0.988171E+00 + outer loop + vertex 0.610294E+02 0.550000E+02 0.441031E+02 + vertex 0.600649E+02 0.582387E+02 0.441031E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + endloop +endfacet +endsolid mesh3 + +solid mesh4 +facet normal 0.101186E+00 0.115380E+00 0.988154E+00 + outer loop + vertex 0.600649E+02 0.582387E+02 0.441031E+02 + vertex 0.575270E+02 0.604644E+02 0.441031E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + endloop +endfacet +facet normal 0.208743E-01 0.152508E+00 0.988082E+00 + outer loop + vertex 0.575270E+02 0.604644E+02 0.441031E+02 + vertex 0.541319E+02 0.609291E+02 0.441031E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + endloop +endfacet +facet normal -0.629348E-01 0.140242E+00 0.988115E+00 + outer loop + vertex 0.541319E+02 0.609291E+02 0.441031E+02 + vertex 0.510407E+02 0.595412E+02 0.441032E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + endloop +endfacet +facet normal -0.129427E+00 0.822809E-01 0.988169E+00 + outer loop + vertex 0.510407E+02 0.595412E+02 0.441032E+02 + vertex 0.492227E+02 0.566827E+02 0.441031E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + endloop +endfacet +facet normal -0.153391E+00 0.000000E+00 0.988166E+00 + outer loop + vertex 0.492227E+02 0.566827E+02 0.441031E+02 + vertex 0.492227E+02 0.533172E+02 0.441031E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + endloop +endfacet +facet normal -0.129417E+00 -0.823089E-01 0.988168E+00 + outer loop + vertex 0.492227E+02 0.533172E+02 0.441031E+02 + vertex 0.510407E+02 0.504587E+02 0.441031E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + endloop +endfacet +facet normal -0.629647E-01 -0.140238E+00 0.988114E+00 + outer loop + vertex 0.510407E+02 0.504587E+02 0.441031E+02 + vertex 0.541319E+02 0.490708E+02 0.441031E+02 + vertex 0.549999E+02 0.549999E+02 0.449999E+02 + endloop +endfacet +facet normal -0.642682E+00 0.642682E+00 -0.417038E+00 + outer loop + vertex 0.549999E+02 0.549999E+02 0.449999E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + vertex 0.510406E+02 0.504586E+02 0.441030E+02 + endloop +endfacet +facet normal 0.208739E-01 -0.152505E+00 0.988082E+00 + outer loop + vertex 0.541319E+02 0.490708E+02 0.441031E+02 + vertex 0.575270E+02 0.495355E+02 0.441031E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + endloop +endfacet +facet normal 0.171898E+00 -0.171898E+00 0.970001E+00 + outer loop + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + vertex 0.549999E+02 0.549999E+02 0.449999E+02 + vertex 0.541319E+02 0.490708E+02 0.441030E+02 + endloop +endfacet +facet normal 0.101185E+00 -0.115378E+00 0.988155E+00 + outer loop + vertex 0.575270E+02 0.495355E+02 0.441031E+02 + vertex 0.600649E+02 0.517612E+02 0.441031E+02 + vertex 0.549999E+02 0.549999E+02 0.449999E+02 + endloop +endfacet +facet normal -0.110843E+00 0.110843E+00 -0.987637E+00 + outer loop + vertex 0.549999E+02 0.549999E+02 0.449999E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + vertex 0.575270E+02 0.495354E+02 0.441030E+02 + endloop +endfacet +facet normal 0.146979E+00 -0.437696E-01 0.988171E+00 + outer loop + vertex 0.600649E+02 0.517612E+02 0.441031E+02 + vertex 0.610294E+02 0.550000E+02 0.441031E+02 + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + endloop +endfacet +facet normal 0.106774E+00 -0.106774E+00 0.988534E+00 + outer loop + vertex 0.550000E+02 0.550000E+02 0.449999E+02 + vertex 0.549999E+02 0.549999E+02 0.449999E+02 + vertex 0.600648E+02 0.517611E+02 0.441030E+02 + endloop +endfacet +endsolid mesh4 diff --git a/tests/stl_utils.c b/tests/stl_utils.c index e0ebc9e..c3b78dd 100644 --- a/tests/stl_utils.c +++ b/tests/stl_utils.c @@ -44,6 +44,16 @@ struct gmio_stl_triangle_array gmio_stl_triangle_array_malloc(size_t tri_count) return array; } +void gmio_stl_triangle_array_free(struct gmio_stl_triangle_array *array) +{ + if (array != NULL) { + free(array->ptr); + array->ptr = NULL; + array->count = 0; + array->capacity = 0; + } +} + static void gmio_stl_data__begin_solid( void* cookie, const struct gmio_stl_mesh_creator_infos* infos) { diff --git a/tests/stl_utils.h b/tests/stl_utils.h index 87990ba..f289f59 100644 --- a/tests/stl_utils.h +++ b/tests/stl_utils.h @@ -65,6 +65,8 @@ struct gmio_stl_triangle_array */ struct gmio_stl_triangle_array gmio_stl_triangle_array_malloc(size_t tri_count); +void gmio_stl_triangle_array_free(struct gmio_stl_triangle_array* array); + /*! Holds complete STL data (usable for both binary and ascii formats) */ struct gmio_stl_data { diff --git a/tests/test_stl_io.c b/tests/test_stl_io.c index 926d1d8..5803b2d 100644 --- a/tests/test_stl_io.c +++ b/tests/test_stl_io.c @@ -21,6 +21,7 @@ #include "../src/gmio_core/error.h" #include "../src/gmio_core/internal/min_max.h" #include "../src/gmio_stl/stl_error.h" +#include "../src/gmio_stl/stl_infos.h" #include "../src/gmio_stl/stl_io.h" #include "../src/gmio_stl/stl_io_options.h" @@ -319,7 +320,7 @@ const char* test_stla_write() { const char* model_filepath = stl_grabcad_arm11_filepath; const char* model_filepath_out = "temp/solid.stla"; - struct gmio_stl_data data = {0}; + struct gmio_stl_data data = {0}; /* TODO: fix memory leak on error */ char header_str[GMIO_STLB_HEADER_SIZE + 1] = {0}; int error = GMIO_ERROR_OK; @@ -370,6 +371,42 @@ const char* test_stla_write() return NULL; } +const char* generic_test_stl_read_multi_solid( + const char* filepath, unsigned expected_solid_count) +{ + FILE* infile = fopen(filepath, "rb"); + if (infile != NULL) { + unsigned solid_count = 0; + int error = GMIO_ERROR_OK; + struct gmio_stl_read_options roptions = {0}; + roptions.func_stla_get_streamsize = gmio_stla_infos_get_streamsize; + while (gmio_no_error(error)) { + const struct gmio_stl_mesh_creator null_creator = {0}; + error = gmio_stl_read( + gmio_stream_stdio(infile), null_creator, &roptions); + if (gmio_no_error(error)) + ++solid_count; + } + fclose(infile); + UTEST_COMPARE_UINT(expected_solid_count, solid_count); + } + else { + perror(NULL); + UTEST_FAIL(""); + } + return NULL; +} + +const char* test_stl_read_multi_solid() +{ + const char* res = NULL; + res = generic_test_stl_read_multi_solid("models/solid_4meshs.stla", 4); + if (res != NULL) + return res; + res = generic_test_stl_read_multi_solid("models/solid_4meshs.le_stlb", 4); + return res; +} + void generate_stlb_tests_models() { { @@ -403,4 +440,29 @@ void generate_stlb_tests_models() gmio_stl_data_mesh(&data), NULL); } + + { + FILE* infile = fopen("models/solid_4meshs.stla", "rb"); + FILE* outfile = fopen("models/solid_4meshs.le_stlb", "wb"); + int read_error = GMIO_ERROR_OK; + struct gmio_stl_read_options roptions = {0}; + roptions.func_stla_get_streamsize = gmio_stla_infos_get_streamsize; + while (gmio_no_error(read_error)) { + struct gmio_stl_data data = {0}; + struct gmio_stl_write_options woptions = {0}; + read_error = gmio_stla_read( + gmio_stream_stdio(infile), + gmio_stl_data_mesh_creator(&data), + &roptions); + woptions.stlb_header = gmio_stlb_header_str(data.solid_name); + gmio_stl_write( + GMIO_STL_FORMAT_BINARY_LE, + gmio_stream_stdio(outfile), + gmio_stl_data_mesh(&data), + &woptions); + gmio_stl_triangle_array_free(&data.tri_array); + } + fclose(infile); + fclose(outfile); + } }