aboutsummaryrefslogtreecommitdiff
path: root/tool_src/makeodt
diff options
context:
space:
mode:
Diffstat (limited to 'tool_src/makeodt')
-rw-r--r--tool_src/makeodt/COPYING482
-rw-r--r--tool_src/makeodt/Makefile18
-rw-r--r--tool_src/makeodt/getopt.cpp620
-rw-r--r--tool_src/makeodt/getopt.h78
-rwxr-xr-xtool_src/makeodt/makeodtbin0 -> 2023262 bytes
-rw-r--r--tool_src/makeodt/makeodt.cpp633
-rw-r--r--tool_src/makeodt/makeodt.h40
-rwxr-xr-xtool_src/makeodt/makeodt.sln54
-rwxr-xr-xtool_src/makeodt/makeodt.vcproj195
-rwxr-xr-xtool_src/makeodt/makeodt.vcxproj159
-rwxr-xr-xtool_src/makeodt/meshconv.exebin0 -> 361472 bytes
-rwxr-xr-xtool_src/makeodt/planet1.wrl396
-rwxr-xr-xtool_src/makeodt/test_ship526
-rwxr-xr-xtool_src/makeodt/test_ship2.vrml52
-rwxr-xr-xtool_src/makeodt/test_ship2.vrml~52
-rwxr-xr-xtool_src/makeodt/test_ship~649
16 files changed, 3954 insertions, 0 deletions
diff --git a/tool_src/makeodt/COPYING b/tool_src/makeodt/COPYING
new file mode 100644
index 0000000..bf50f20
--- /dev/null
+++ b/tool_src/makeodt/COPYING
@@ -0,0 +1,482 @@
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/tool_src/makeodt/Makefile b/tool_src/makeodt/Makefile
new file mode 100644
index 0000000..8315365
--- /dev/null
+++ b/tool_src/makeodt/Makefile
@@ -0,0 +1,18 @@
+CFILES = makeodt.c getopt.c
+
+CFLAGS = -g -O2 -x c++ -fno-for-scope -I../BspLib -I../QvLib
+
+all: makeodt
+
+clean:
+ rm -f *.o *~ makeodt
+
+makeodt: $(CFILES:.c=.o) ../BspLib/libbsp.a ../QvLib/libqv.a
+ $(CC) -o makeodt $(CFILES:.c=.o) ../BspLib/libbsp.a ../QvLib/libqv.a -lstdc++
+
+# use this if you've compiled BspLib with JPEG support
+#makeodt: $(CFILES:.c=.o) ../BspLib/libbsp.a ../QvLib/libqv.a
+# $(CC) -o makeodt $(CFILES:.c=.o) ../BspLib/libbsp.a ../QvLib/libqv.a -lstdc++ -ljpeg
+
+
+
diff --git a/tool_src/makeodt/getopt.cpp b/tool_src/makeodt/getopt.cpp
new file mode 100644
index 0000000..a6dc89e
--- /dev/null
+++ b/tool_src/makeodt/getopt.cpp
@@ -0,0 +1,620 @@
+/*
+ * PARSEC MODULE (ENGINE CORE)
+ * Command Line Options Support V1.05
+ *
+ * Copyright (c) Markus Hadwiger 1999-2000
+ * All Rights Reserved.
+ */
+
+// C library
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+// local module header
+#include "getopt.h"
+
+
+
+// command line options tables ------------------------------------------------
+//
+#define DEFAULT_MAX_OPTIONS 32
+
+static cli_option_s cli_options_default[ DEFAULT_MAX_OPTIONS ];
+static cli_option_s* cli_options = cli_options_default;
+static int num_cli_options = 0;
+static int max_cli_options = DEFAULT_MAX_OPTIONS;
+
+
+// shortcut for registering a new set command line option ---------------------
+//
+int OPT_RegisterSetOption( const char *optshort, const char *optlong, int (*func)() )
+{
+ ASSERT( ( optshort != NULL ) || ( optlong != NULL ) );
+ ASSERT( func != NULL );
+
+ cli_option_s clioption;
+ memset( &clioption, 0, sizeof( cli_option_s ) );
+
+ clioption.opt_short = optshort;
+ clioption.opt_long = optlong;
+ clioption.exec_set = func;
+
+ return OPT_RegisterOption( &clioption );
+}
+
+
+// shortcut for registering a new int command line option ---------------------
+//
+int OPT_RegisterIntOption( const char *optshort, const char *optlong, int (*func)(int*) )
+{
+ ASSERT( ( optshort != NULL ) || ( optlong != NULL ) );
+ ASSERT( func != NULL );
+
+ cli_option_s clioption;
+ memset( &clioption, 0, sizeof( cli_option_s ) );
+
+ clioption.opt_short = optshort;
+ clioption.opt_long = optlong;
+ clioption.num_int = 1;
+ clioption.exec_int = func;
+
+ return OPT_RegisterOption( &clioption );
+}
+
+
+// shortcut for registering a new float command line option -------------------
+//
+int OPT_RegisterFloatOption( const char *optshort, const char *optlong, int (*func)(float*) )
+{
+ ASSERT( ( optshort != NULL ) || ( optlong != NULL ) );
+ ASSERT( func != NULL );
+
+ cli_option_s clioption;
+ memset( &clioption, 0, sizeof( cli_option_s ) );
+
+ clioption.opt_short = optshort;
+ clioption.opt_long = optlong;
+ clioption.num_float = 1;
+ clioption.exec_float = func;
+
+ return OPT_RegisterOption( &clioption );
+}
+
+
+// shortcut for registering a new string command line option ------------------
+//
+int OPT_RegisterStringOption( const char *optshort, const char *optlong, int (*func)(char**) )
+{
+ ASSERT( ( optshort != NULL ) || ( optlong != NULL ) );
+ ASSERT( func != NULL );
+
+ cli_option_s clioption;
+ memset( &clioption, 0, sizeof( cli_option_s ) );
+
+ clioption.opt_short = optshort;
+ clioption.opt_long = optlong;
+ clioption.num_string = 1;
+ clioption.exec_string = func;
+
+ return OPT_RegisterOption( &clioption );
+}
+
+
+// register a new command line option -----------------------------------------
+//
+int OPT_RegisterOption( cli_option_s *regopt )
+{
+ //NOTE:
+ //CAVEAT:
+ // the supplied option strings are not copied
+ // by this function. thus, the caller MUST ENSURE
+ // that these strings are available indefinitely.
+ // (e.g., allocated statically.)
+
+ ASSERT( regopt != NULL );
+ ASSERT( num_cli_options <= max_cli_options );
+
+ // expand table memory if already used up
+ if ( num_cli_options == max_cli_options ) {
+
+ // expand exponentially
+ int newtabsize = max_cli_options * 2;
+
+ // alloc new table
+ cli_option_s * newlist = new cli_option_s[newtabsize];
+ if ( newlist == NULL ) {
+ ASSERT( 0 );
+ return FALSE;
+ }
+
+ // set new size
+ max_cli_options = newtabsize;
+
+ // move old table
+ memcpy( newlist, cli_options, sizeof( cli_option_s ) * num_cli_options );
+ if ( cli_options != cli_options_default )
+ delete [] cli_options;
+ cli_options = newlist;
+ }
+
+ // append new command line option
+ ASSERT( num_cli_options < max_cli_options );
+ cli_options[ num_cli_options++ ] = *regopt;
+
+ return TRUE;
+}
+
+
+// application name option tables ---------------------------------------------
+//
+#define DEFAULT_MAX_APPLICATIONS 8
+
+static app_option_s app_options_default[ DEFAULT_MAX_APPLICATIONS ];
+static app_option_s* app_options = app_options_default;
+static int num_app_options = 0;
+static int max_app_options = DEFAULT_MAX_APPLICATIONS;
+
+
+// register a special command line option for application invocation ----------
+//
+int OPT_RegisterApplication( char *appname, void (*appmain)(int,char**) )
+{
+ ASSERT( appname != NULL );
+ ASSERT( appmain != NULL );
+
+ //NOTE:
+ //CAVEAT:
+ // the supplied name string is not copied
+ // by this function. thus, the caller MUST ENSURE
+ // that this string is available indefinitely.
+ // (e.g., allocated statically.)
+
+ ASSERT( num_app_options <= max_app_options );
+
+ // expand table memory if already used up
+ if ( num_app_options == max_app_options ) {
+
+ // expand exponentially
+ int newtabsize = max_app_options * 2;
+
+ // alloc new table
+ app_option_s * newlist = new app_option_s[newtabsize];
+ if ( newlist == NULL ) {
+ ASSERT( 0 );
+ return FALSE;
+ }
+
+ // set new size
+ max_app_options = newtabsize;
+
+ // move old table
+ memcpy( newlist, app_options, sizeof( app_option_s ) * num_app_options );
+ if ( app_options != app_options_default )
+ delete [] app_options;
+ app_options = newlist;
+ }
+
+ // append new command line option
+ ASSERT( num_app_options < max_app_options );
+ app_options[ num_app_options ].appname = appname;
+ app_options[ num_app_options ].appmain = appmain;
+ num_app_options++;
+
+ return TRUE;
+}
+
+
+// remove all registered options ----------------------------------------------
+//
+void OPT_ClearOptions()
+{
+ // free expanded table memory if present
+ if ( cli_options != cli_options_default ) {
+ delete [] cli_options;
+ cli_options = cli_options_default;
+ }
+
+ num_cli_options = 0;
+ max_cli_options = DEFAULT_MAX_OPTIONS;
+
+ // free expanded table memory if present
+ if ( app_options != app_options_default ) {
+ delete [] app_options;
+ app_options = app_options_default;
+ }
+
+ num_app_options = 0;
+ max_app_options = DEFAULT_MAX_APPLICATIONS;
+}
+
+
+// options parsing globals ----------------------------------------------------
+//
+#define MAX_INT_PARAMS 8
+#define MAX_FLOAT_PARAMS 8
+#define MAX_STRING_PARAMS 4
+
+static int cur_opt_indx;
+static int cur_int_indx;
+static int cur_float_indx;
+static int cur_string_indx;
+
+static int want_params_int = 0;
+static int want_params_float = 0;
+static int want_params_string = 0;
+
+static int params_int[ MAX_INT_PARAMS ];
+static float params_float[ MAX_FLOAT_PARAMS ];
+static char* params_string[ MAX_STRING_PARAMS ];
+
+
+// exec set option immediately/schedule others for parameter parsing ----------
+//
+PRIVATE
+int ScheduleOption( int indx )
+{
+ cli_option_s *refopt = &cli_options[ indx ];
+
+ // remember option we found
+ cur_opt_indx = indx;
+
+ if ( cli_options[ indx ].exec_set ) {
+
+ want_params_int = 0;
+ want_params_float = 0;
+ want_params_string = 0;
+
+ // set options will be called immediately
+ return (*cli_options[ indx ].exec_set)();
+
+ } else {
+
+ cur_int_indx = 0;
+ cur_float_indx = 0;
+ cur_string_indx = 0;
+
+ want_params_int = refopt->num_int;
+ want_params_float = refopt->num_float;
+ want_params_string = refopt->num_string;
+
+ // options with parameters will be called after
+ // parameter parsing has completed
+ return TRUE;
+ }
+}
+
+
+// try to find a match for the whole short option string ----------------------
+//
+PRIVATE
+int CheckShortStringMatch( char *opt )
+{
+ ASSERT( opt != NULL );
+ int indx = 0;
+ // try first to match the entire string
+ for ( indx = 0; indx < num_cli_options; indx++ ) {
+
+ cli_option_s *refopt = &cli_options[ indx ];
+ if ( refopt->opt_short != NULL ) {
+ if ( strcmp( opt, refopt->opt_short ) == 0 ) {
+
+ // exec immediately/schedule parameter parsing
+ if ( !ScheduleOption( indx ) ) {
+ return FALSE;
+ }
+ break;
+ }
+ }
+ }
+
+ // return whether full-string match found
+ return ( indx < num_cli_options );
+}
+
+
+// extract multiple options from a single short option string -----------------
+//
+PRIVATE
+int CheckShortCharContained( char *opt )
+{
+ ASSERT( opt != NULL );
+
+ // make absolutely sure the supplied string is writable
+ char temp[ 20 + 1 ];
+ strncpy( temp, opt, 20 );
+ temp[ 20 ] = 0;
+ opt = temp;
+
+ // scan all registered short (-) options
+ for ( int indx = 0; indx < num_cli_options; indx++ ) {
+ if ( cli_options[ indx ].opt_short != NULL ) {
+
+ if ( strlen( opt ) < 2 ) {
+ if ( *opt == *cli_options[ indx ].opt_short ) {
+ // exec immediately/schedule parameter parsing
+ if ( !ScheduleOption( indx ) ) {
+ return FALSE;
+ }
+ }
+ } else {
+ // search for current option in multiple options string
+ for ( char *optchar = opt; *optchar != 0; optchar++ ) {
+ if ( *optchar == *cli_options[ indx ].opt_short ) {
+ // only set options allowed
+ if ( cli_options[ indx ].exec_set ) {
+ if ( !(*cli_options[ indx ].exec_set)() ) {
+ return FALSE;
+ }
+ } else {
+ return FALSE;
+ }
+ // remove as recognized
+ *optchar = ' ';
+ }
+ }
+ }
+ }
+ }
+
+ // check whether all options recognized
+ for ( char *optchar = opt; *optchar != 0; optchar++ ) {
+ if ( *optchar != ' ' ) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+
+// try to match the supplied string with one or more short options ------------
+//
+PRIVATE
+int CheckShortOption( char *opt )
+{
+ ASSERT( opt != NULL );
+
+ // try first to match the entire string
+ if ( CheckShortStringMatch( opt ) )
+ return TRUE;
+
+ // if no string-match use string as set of options
+ return CheckShortCharContained( opt );
+}
+
+
+// try to match the supplied string with a long option ------------------------
+//
+PRIVATE
+int CheckLongOption( char *opt )
+{
+ ASSERT( opt != NULL );
+ int indx = 0;
+ // compare with all registered long (--) options
+ for ( indx = 0; indx < num_cli_options; indx++ ) {
+
+ cli_option_s *refopt = &cli_options[ indx ];
+ if ( refopt->opt_long != NULL ) {
+ if ( strcmp( opt, refopt->opt_long ) == 0 ) {
+
+ // exec immediately/schedule parameter parsing
+ if ( !ScheduleOption( indx ) ) {
+ return FALSE;
+ }
+ break;
+ }
+ }
+ }
+
+ // return whether match found
+ return ( indx < num_cli_options );
+}
+
+
+// get int parameter for command line option ----------------------------------
+//
+PRIVATE
+int GetOptionIntParam( char *paramstr )
+{
+ ASSERT( paramstr != NULL );
+
+ char *errpart;
+ long iparam = strtol( paramstr, &errpart, 10 );
+
+ if ( *errpart != 0 ) {
+ return FALSE;
+ }
+
+ // store int into table
+ params_int[ cur_int_indx++ ] = iparam;
+
+ // submit completed table to registered function
+ if ( --want_params_int == 0 ) {
+ if ( !(*cli_options[ cur_opt_indx ].exec_int)( params_int ) ) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+
+// get float parameter for command line option --------------------------------
+//
+PRIVATE
+int GetOptionFloatParam( char *paramstr )
+{
+ ASSERT( paramstr != NULL );
+
+ char *errpart;
+ double fparam = strtod( paramstr, &errpart );
+
+ if ( *errpart != 0 ) {
+ return FALSE;
+ }
+
+ // store float into table
+ params_float[ cur_float_indx++ ] = fparam;
+
+ // submit completed table to registered function
+ if ( --want_params_float == 0 ) {
+ if ( !(*cli_options[ cur_opt_indx ].exec_float)( params_float ) ) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+
+// get string parameter for command line option -------------------------------
+//
+PRIVATE
+int GetOptionStringParam( char *paramstr )
+{
+ ASSERT( paramstr != NULL );
+
+ // store pointer into table
+ params_string[ cur_string_indx++ ] = paramstr;
+
+ // submit completed table to registered function
+ if ( --want_params_string == 0 ) {
+ if ( !(*cli_options[ cur_opt_indx ].exec_string)( params_string ) ) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+
+// determine whether there are still parameters missing for previous option ---
+//
+PRIVATE
+int OptionParamsPending()
+{
+ int pendingparams = want_params_int + want_params_float + want_params_string;
+
+ if ( pendingparams > 0 ) {
+ MSGOUT( "Parameters missing.\n" );
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+// parse a command line option specifier --------------------------------------
+//
+PRIVATE
+int ParseOptionSpecifier( char **argv, int curopt )
+{
+ ASSERT( argv != NULL );
+ ASSERT( *argv != NULL );
+
+ // make sure there are no parameters missing for previous option
+ if ( OptionParamsPending() ) {
+ return FALSE;
+ }
+
+ int optvalid = TRUE;
+
+ // distinguish short and long options via second '-'
+ if ( argv[ curopt ][ 1 ] != '-' ) {
+ optvalid = CheckShortOption( &argv[ curopt ][ 1 ] );
+ } else {
+ optvalid = CheckLongOption( &argv[ curopt ][ 2 ] );
+ }
+
+ return optvalid;
+}
+
+
+// parse a command line option parameter --------------------------------------
+//
+PRIVATE
+int ParseOptionParameter( char **argv, int curopt )
+{
+ ASSERT( argv != NULL );
+ ASSERT( *argv != NULL );
+
+ int optvalid = TRUE;
+
+ // check for parameters
+ if ( want_params_int > 0 ) {
+ optvalid = GetOptionIntParam( argv[ curopt ] );
+ } else if ( want_params_float > 0 ) {
+ optvalid = GetOptionFloatParam( argv[ curopt ] );
+ } else if ( want_params_string > 0 ) {
+ optvalid = GetOptionStringParam( argv[ curopt ] );
+ }
+
+ return optvalid;
+}
+
+
+// parse a command line option that specifies an application ------------------
+//
+PRIVATE
+void CheckApplicationOption( int argc, char **argv )
+{
+ if ( argc < 2 )
+ return;
+
+ // compare with all registered application names
+ for ( int indx = 0; indx < num_app_options; indx++ ) {
+
+ ASSERT( app_options[ indx ].appname != NULL );
+ ASSERT( app_options[ indx ].appmain != NULL );
+
+ if ( strcmp( argv[ 1 ], app_options[ indx ].appname ) == 0 ) {
+
+ // remove appname option from command line and hand over
+ argv[ 1 ] = argv[ 0 ];
+ (*app_options[ indx ].appmain)( argc - 1, argv + 1 );
+ }
+ }
+}
+
+
+// execute all registered command line options (parse command line) -----------
+//
+int OPT_ExecRegisteredOptions( int argc, char **argv )
+{
+ ASSERT( argc > 0 );
+ ASSERT( argv != NULL );
+
+ // if an application option is found this never returns
+ CheckApplicationOption( argc, argv );
+
+ // parse conventional command line options
+ for ( int curopt = 1; curopt < argc; curopt++ ) {
+
+ // check for beginning of new option
+ if ( argv[ curopt ][ 0 ] == '-' ) {
+
+ if ( !ParseOptionSpecifier( argv, curopt ) ) {
+ MSGOUT( "Invalid option supplied: %s.\n", argv[ curopt ] );
+ return FALSE;
+ }
+
+ } else {
+
+ if ( !ParseOptionParameter( argv, curopt ) ) {
+ MSGOUT( "Invalid parameter supplied: %s.\n", argv[ curopt ] );
+ return FALSE;
+ }
+ }
+ }
+
+ // make sure there are no parameters missing for last option
+ if ( OptionParamsPending() ) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
diff --git a/tool_src/makeodt/getopt.h b/tool_src/makeodt/getopt.h
new file mode 100644
index 0000000..9cb29c2
--- /dev/null
+++ b/tool_src/makeodt/getopt.h
@@ -0,0 +1,78 @@
+/*
+ * PARSEC HEADER: e_getopt.h
+ */
+
+#ifndef _E_GETOPT_H_
+#define _E_GETOPT_H_
+
+#include <stdint.h>
+
+
+
+// ----------------------------------------------------------------------------
+//
+#define ASSERT assert
+#define PRIVATE static
+#define PUBLIC
+#define MSGOUT printf
+
+typedef uint8_t byte;
+typedef uint16_t word;
+typedef uint32_t dword;
+
+#ifndef TRUE
+ #define TRUE 1
+#endif
+#ifndef FALSE
+ #define FALSE 0
+#endif
+
+
+
+
+// command line options table entry
+
+struct cli_option_s {
+
+ const char* opt_short;
+ const char* opt_long;
+
+ dword _mksiz32;
+
+ byte _dummy;
+ byte num_int;
+ byte num_float;
+ byte num_string;
+
+ int (*exec_set)();
+ int (*exec_int)(int*);
+ int (*exec_float)(float*);
+ int (*exec_string)(char**);
+};
+
+
+// application name option table entry
+
+struct app_option_s {
+
+ char* appname;
+ void (*appmain)(int,char**);
+};
+
+
+// external functions
+
+int OPT_RegisterSetOption( const char *optshort, const char *optlong, int (*func)() );
+int OPT_RegisterIntOption( char *optshort, const char *optlong, int (*func)(int*) );
+int OPT_RegisterFloatOption( const char *optshort, const char *optlong, int (*func)(float*) );
+int OPT_RegisterStringOption( const char *optshort, const char *optlong, int (*func)(char**) );
+int OPT_RegisterOption( cli_option_s *regopt );
+int OPT_RegisterApplication( char *appname, void (*appmain)(int,char**) );
+
+void OPT_ClearOptions();
+
+int OPT_ExecRegisteredOptions( int argc, char **argv );
+
+
+#endif // _E_GETOPT_H_
+
diff --git a/tool_src/makeodt/makeodt b/tool_src/makeodt/makeodt
new file mode 100755
index 0000000..39591b8
--- /dev/null
+++ b/tool_src/makeodt/makeodt
Binary files differ
diff --git a/tool_src/makeodt/makeodt.cpp b/tool_src/makeodt/makeodt.cpp
new file mode 100644
index 0000000..8b9f296
--- /dev/null
+++ b/tool_src/makeodt/makeodt.cpp
@@ -0,0 +1,633 @@
+/*
+ * makeodt.cpp
+ */
+
+
+// bsplib headers
+#include "BRep.h"
+#include "InputData3D.h"
+#include "OutputData3D.h"
+#include "BspObjectList.h"
+#include "BoundingBox.h"
+#include "ObjectBSPNode.h"
+#include "ObjectBinFormat.h"
+
+#include "getopt.h"
+
+using BspLib::InputData3D;
+using BspLib::BspObjectList;
+using BspLib::Vector3;
+using BspLib::Vertex3;
+using BspLib::ObjectBSPTree;
+
+
+// string constants -----------------------------------------------------------
+//
+static const char options_invalid[] = "\nUse \"-h\" for a list of command line options.\n";
+
+
+// pointer to input data object -----------------------------------------------
+//
+class Scene {
+
+public:
+ Scene() { m_inputscene = NULL; m_objectlist = NULL; m_objbsptree = NULL; }
+ ~Scene() { delete m_objbsptree; delete m_objectlist; }
+
+ void AllocObjectList();
+ void DestroyObjectList();
+
+ void BuildObjectBSPTree();
+
+ void setInput( InputData3D *inp ) { m_inputscene = inp; }
+ InputData3D* getInput() { return m_inputscene; }
+ void deleteInput() { if ( m_inputscene != NULL ) { delete m_inputscene; m_inputscene = NULL; } }
+
+ BspObjectList* getObjectList() { return m_objectlist; }
+
+private:
+ // pointer to input data object
+ BspLib::InputData3D* m_inputscene;
+
+ // object bsp tree (convex subspaces contain entire objects)
+ BspLib::ObjectBSPTree* m_objbsptree;
+
+ // object list
+ BspLib::BspObjectList* m_objectlist;
+};
+
+
+// allocate new objectlist (an already existing list will be destroyed) -------
+//
+void Scene::AllocObjectList()
+{
+ if ( m_objbsptree != NULL ) {
+ delete m_objbsptree;
+ m_objbsptree = NULL;
+ }
+
+ if ( m_objectlist != NULL ) {
+ delete m_objectlist;
+ }
+ m_objectlist = new BspObjectList;
+}
+
+
+// destroy objectlist ---------------------------------------------------------
+//
+void Scene::DestroyObjectList()
+{
+ delete m_objbsptree;
+ m_objbsptree = NULL;
+
+ delete m_objectlist;
+ m_objectlist = NULL;
+}
+
+
+// build a bsp tree of objects from unordered object list ---------------------
+//
+void Scene::BuildObjectBSPTree()
+{
+ if ( m_objectlist != NULL ) {
+ BspLib::BoundingBox *boxlist = m_objectlist->BuildBoundingBoxList();
+ m_objbsptree = new BspLib::ObjectBSPTree;
+ m_objbsptree->InitTree( boxlist ? boxlist->PartitionSpace() : NULL );
+ }
+}
+
+
+// ----------------------------------------------------------------------------
+//
+static Scene* world = NULL;
+
+
+// filename of currently loaded object file -----------------------------------
+//
+static char current_object_file[ PATH_MAX + 1 ] = "";
+
+
+// ----------------------------------------------------------------------------
+//
+static char input_file_name[ PATH_MAX + 1 ] = "";
+
+
+// ----------------------------------------------------------------------------
+//
+static int bspgenopt_actions[] = { 0, 0, 0, 0 };
+static int bspgenopt_outpoptions[] = { 0, 0, 0, 0 };
+static int bspgenopt_policy[] = { 0, 0, 0, 0 };
+static int bspgenopt_samplesize = 0;
+static int bspgenopt_sampletype = 0;
+
+static int bspgeoopt_pregeometry[] = { 0, 0, 0, 0 };
+static int bspgeoopt_postgeometry[] = { 0, 0, 0, 0 };
+static int bspgeoopt_enforceeps[] = { 0, 0, 0, 0 };
+static double bspgeoopt_epsilons[] = { 0.0, 0.0, 0.0, 0.0 };
+
+static int vrmlopt_gen[] = { 0, 0, 0, 0, 0, 0 };
+static int vrmlopt_lod = 0;
+static int vrmlopt_tessellation = 8;
+
+static int mesgopt_mesg[] = { 0, 0, 0, 0, 0 };
+static int mesgopt_misc[] = { 0, 0, 0, 0 };
+static int mesgopt_stat[] = { 0, 0, 0, 0 };
+static int mesgopt_err[] = { 0, 0, 0, 0 };
+
+static int objprocessor_opt[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+
+// submit selected bsp compilation options to bsplib --------------------------
+//
+PRIVATE
+void SetBspLibOptions()
+{
+ using namespace BspLib;
+
+ if ( bspgeoopt_enforceeps[ 3 ] ) {
+ EpsAreas::eps_scalarproduct = bspgeoopt_epsilons[ 3 ];
+ EpsAreas::eps_planethickness = bspgeoopt_epsilons[ 3 ];
+// EpsAreas::eps_vanishdenominator = bspgeoopt_epsilons[ 3 ];
+// EpsAreas::eps_vanishcomponent = bspgeoopt_epsilons[ 3 ];
+ }
+ if ( bspgeoopt_enforceeps[ 2 ] ) {
+ EpsAreas::eps_pointonlineseg = bspgeoopt_epsilons[ 2 ];
+ }
+ if ( bspgeoopt_enforceeps[ 1 ] ) {
+ EpsAreas::eps_vertexmergearea = bspgeoopt_epsilons[ 1 ];
+ }
+
+ static int splittercrit_values[] = {
+ Polygon::SPLITTERCRIT_FIRST_POLY,
+ Polygon::SPLITTERCRIT_SAMPLE_FIRST_N,
+ Polygon::SPLITTERCRIT_SAMPLE_ALL,
+ Polygon::SPLITTERCRIT_RANDOM_SAMPLE
+ };
+
+ InputData3D::EnableRGBConversion( bspgenopt_actions[ 1 ] );
+ InputData3D::EnableMaximumExtent( bspgeoopt_pregeometry[ 3 ], bspgeoopt_epsilons[ 0 ] );
+ InputData3D::EnableScaleFactors( bspgenopt_actions[ 2 ] );
+ InputData3D::EnableAxesChange( bspgenopt_actions[ 3 ] );
+ InputData3D::EnableAllowNGons( !bspgenopt_policy[ 1 ] );
+
+ Polygon::setSplitterSelection( splittercrit_values[ bspgenopt_sampletype ] );
+ Polygon::setSampleSize( bspgenopt_samplesize );
+ Polygon::setTriangulationFlag( bspgenopt_policy[ 3 ] );
+
+ BspObject::setEliminateDoubletsOnMergeFlag( bspgenopt_policy[ 2 ] );
+
+ int msgflags = Polygon::MESSAGEMASK_DISPLAY_ALL & ~Polygon::MESSAGE_CHECKING_POLYGON_PLANES;
+ if ( !mesgopt_mesg[ 0 ] )
+ msgflags &= ~( Polygon::MESSAGE_NEW_SPLITVERTEX |
+ Polygon::MESSAGE_REUSING_SPLITVERTEX |
+ Polygon::MESSAGE_TRACEVERTEX_INSERTED );
+ if ( !mesgopt_mesg[ 1 ] )
+ msgflags &= ~Polygon::MESSAGE_SPLITTING_QUADRILATERAL;
+ if ( !mesgopt_mesg[ 2 ] )
+ msgflags &= ~( Polygon::MESSAGE_STARTVERTEX_IN_SPLITTER_PLANE | Polygon::MESSAGE_VERTEX_IN_SPLITTER_PLANE );
+ if ( !mesgopt_mesg[ 3 ] )
+ msgflags &= ~Polygon::MESSAGE_INVOCATION;
+ if ( !mesgopt_mesg[ 4 ] )
+ msgflags &= ~Polygon::MESSAGE_SPLITTING_POLYGON;
+ Polygon::setDisplayMessagesFlag( msgflags );
+
+ BRep::setTriangulation( vrmlopt_gen[ 2 ] );
+ BRep::setMaterialFlag( vrmlopt_gen[ 4 ] );
+ BRep::setMirrorTextureVFlag( vrmlopt_gen[ 5 ] );
+ BRep::setTessellation( vrmlopt_tessellation );
+}
+
+
+// set global bsplib options to user specified values -------------------------
+//
+PRIVATE
+void InitBspLibOptions()
+{
+ bspgeoopt_epsilons[ 3 ] = BspLib::EpsAreas::eps_planethickness;
+ bspgeoopt_epsilons[ 2 ] = BspLib::EpsAreas::eps_pointonlineseg;
+ bspgeoopt_epsilons[ 1 ] = BspLib::EpsAreas::eps_vertexmergearea;
+
+ bspgeoopt_epsilons[ 0 ] = 600.0;// maximum extents to force
+
+ bspgeoopt_enforceeps[ 0 ] = 0; // use default epsilon areas
+ bspgeoopt_enforceeps[ 1 ] = 0;
+ bspgeoopt_enforceeps[ 2 ] = 0;
+ bspgeoopt_enforceeps[ 3 ] = 0;
+
+ bspgenopt_actions[ 1 ] = 0; // don't convert color indexes to rgb triplets
+ bspgenopt_actions[ 2 ] = 0; // don't apply specified object scale factors
+ bspgenopt_actions[ 3 ] = 0; // don't apply axes mapping
+
+ bspgenopt_policy[ 0 ] = 1; // always normalize normal vectors
+ bspgenopt_policy[ 1 ] = 1; // allow only triangles and quadrilaterals
+ bspgenopt_policy[ 2 ] = 1; // eliminate vertex doublets on object merge
+ bspgenopt_policy[ 3 ] = 0; // don't always triangulate
+
+ vrmlopt_lod = 0;
+ vrmlopt_tessellation = 4; // set vrml tessellation resolution per PI/2
+ vrmlopt_gen[ 1 ] = 1; // tessellate vrml primitives
+ vrmlopt_gen[ 2 ] = 0; // triangulate vrml objects
+ vrmlopt_gen[ 3 ] = 1; // build bounding box hierarchy
+ vrmlopt_gen[ 4 ] = 0; // don't use full material specification
+ vrmlopt_gen[ 5 ] = 1; // mirror texture v axis
+
+ mesgopt_misc[ 0 ] = 0; // don't create messagelog
+ mesgopt_misc[ 1 ] = 0; // don't create output window
+
+ bspgenopt_samplesize = 20; // set n=20 (sample size)
+ bspgenopt_sampletype = 1; // sample first n polygons
+
+ bspgeoopt_pregeometry[ 0 ] = 0; // n/a
+ bspgeoopt_pregeometry[ 1 ] = 0; // n/a
+ bspgeoopt_pregeometry[ 2 ] = 1; // check planes of faces
+ bspgeoopt_pregeometry[ 3 ] = 1; // enforce maximum object extents
+
+ bspgeoopt_postgeometry[ 0 ] = 0; // don't insert trace vertices
+ bspgeoopt_postgeometry[ 1 ] = 0; // check for multiple vertices
+ bspgeoopt_postgeometry[ 2 ] = 0; // don't calc node bounding boxes
+ bspgeoopt_postgeometry[ 3 ] = 0; // don't calc explicit separator planes
+
+ mesgopt_mesg[ 0 ] = 1; // show message on vertex insertion
+ mesgopt_mesg[ 1 ] = 1; // show message on triangulation of quadrilateral
+ mesgopt_mesg[ 2 ] = 0; // don't show message on vertex contained in splitter plane
+ mesgopt_mesg[ 3 ] = 0; // don't show message on every call of PartitionSpace()
+ mesgopt_mesg[ 4 ] = 1; // show message on splitting of polygon
+
+ mesgopt_stat[ 0 ] = 0; // don't display basic statistics
+ mesgopt_stat[ 1 ] = 0; // don't display detailed statistics
+
+ bspgenopt_outpoptions[ 0 ] = 1; // write normal vectors
+ bspgenopt_outpoptions[ 1 ] = 1; // write palette info
+ bspgenopt_outpoptions[ 2 ] = 0; // don't write compiler info
+ bspgenopt_outpoptions[ 3 ] = 0; // don't write viewer info
+
+ mesgopt_err[ 0 ] = 1; // display error message on non-convex polygon
+
+ SetBspLibOptions(); // pass options to bsplib
+}
+
+
+
+
+
+// check if bsp tree is available for current scene ---------------------------
+//
+int BspTreeAvailable()
+{
+ BspLib::BspObjectList *objectlist = world->getObjectList();
+ BspLib::BspObject *obj = objectlist ? objectlist->getListHead() : NULL;
+ return ( obj ? obj->BspTreeAvailable() : 0 );
+}
+
+
+// merge entire object list into single object --------------------------------
+//
+void MergeListIntoSingleObject()
+{
+ if ( world->getObjectList() ) {
+
+ if ( !BspTreeAvailable() ) {
+
+ // configure BspLib
+ SetBspLibOptions();
+
+ // do actual merge
+ world->getObjectList()->CollapseObjectList();
+ MSGOUT( "Objectlist merged into single object.\n" );
+
+ } else {
+
+ MSGOUT( "Objects already bsp-compiled: Merging not possible.\n" );
+ }
+
+ } else {
+
+ MSGOUT( "No objects to merge.\n" );
+ }
+}
+
+
+// ----------------------------------------------------------------------------
+//
+enum {
+
+ OUTPUT_FORMAT_SINGLE,
+ OUTPUT_FORMAT_ODT,
+ OUTPUT_FORMAT_OD2,
+};
+
+
+
+static int output_format = OUTPUT_FORMAT_OD2;
+static int bsp_compile_done = FALSE;
+
+
+static int critical_bsplib_error = 0;
+
+
+// handle critical error encountered within bsplib ----------------------------
+//
+PRIVATE
+int CriticalBspLibError( int flags )
+{
+/*
+ // close message log if enabled
+ if ( messagelog_fp != NULL ) {
+ fclose( messagelog_fp );
+ messagelog_fp = NULL;
+ }
+*/
+ if ( ( flags & BspLib::SystemIO::CRITERR_ALLOW_RET ) == 0 ) {
+ return 0;
+ } else {
+ critical_bsplib_error = 1;
+ return 1;
+ }
+}
+
+
+// close an open data file ----------------------------------------------------
+//
+PRIVATE
+void CloseDataFile()
+{
+ // reset compile done flag
+ bsp_compile_done = FALSE;
+
+ // delete old InputData3D object
+ world->deleteInput();
+
+ // destroy old object list
+ world->DestroyObjectList();
+
+ // no current file name
+ *current_object_file = 0;
+}
+
+
+// read data file, parse it, and establish scene graph in memory --------------
+//
+PRIVATE
+int ReadDataFile( char *fullfname, char *fname )
+{
+ // delete old InputData3D object
+ world->deleteInput();
+
+ // allocate new BspObjectList (delete old)
+ world->AllocObjectList();
+
+ // configure BspLib
+ SetBspLibOptions();
+
+ // create input data
+ BspObjectList *objectlist = world->getObjectList();
+ world->setInput( new BspLib::InputData3D( *objectlist, fullfname ) );
+
+ // process already parsed input if valid
+ if ( !world->getInput()->InputDataValid() ) {
+ CloseDataFile();
+ return FALSE;
+ }
+
+ // calculate plane normals if not already valid (read from input file)
+ objectlist->ProcessObjects( BspObjectList::CALC_PLANE_NORMALS );
+
+ // check if bsp tree read from file and update caption accordingly
+ int anybsp = objectlist->BspTreeAvailable();
+// Global::UpdateCaption( hwnd, fname, anybsp ?
+// Global::CAPTION_BSPCOMPILED : Global::CAPTION_NOBSPAVAILABLE );
+
+ // check if only flat tree available
+ if ( anybsp && !objectlist->BSPTreeAvailable() ) {
+ // if only flat bsp tree available build linked tree from it
+ objectlist->ProcessObjects( BspObjectList::BUILD_FROM_FLAT );
+ }
+
+// if ( !anybsp ) {
+// world.setUseBSP( FALSE );
+// CheckRenderingMenuItems( GetMenu( hwndMain ) );
+// }
+
+ // set current object file name
+ strcpy( current_object_file, fname );
+
+ return TRUE;
+}
+
+
+// ----------------------------------------------------------------------------
+//
+PRIVATE
+int OpenInput()
+{
+ // reset compile done flag
+ bsp_compile_done = FALSE;
+
+ // register callbacks with bsplib
+ critical_bsplib_error = 0;
+ BspLib::SystemIO::SetCriticalErrorCallback( CriticalBspLibError );
+
+ // read in data file
+ int rc = ReadDataFile( input_file_name, input_file_name );
+
+ // unregister callbacks
+ BspLib::SystemIO::SetCriticalErrorCallback( NULL );
+
+ return rc;
+}
+
+
+// ----------------------------------------------------------------------------
+//
+PRIVATE
+void SaveOutput()
+{
+ if ( !world->getObjectList() ) {
+ MSGOUT( "No objects to save.\n" );
+ return;
+ }
+
+ char *outname = new char[ PATH_MAX + 1 ];
+ strcpy( outname, current_object_file );
+ int n = strlen( outname );
+ while ( ( n > 0 ) && ( outname[ n ] != '.' ) )
+ --n;
+ strcpy( &outname[ n ], ".od2" );
+
+ // configure BspLib
+ SetBspLibOptions();
+
+ // check if binary output is desired
+ if ( ( output_format == OUTPUT_FORMAT_ODT ) ||
+ ( output_format == OUTPUT_FORMAT_OD2 ) ) {
+
+ if ( BspTreeAvailable() ) {
+
+ // do direct binary output of ODT or OD2 file containing BSP tree
+ BspObjectList *objectlist = world->getObjectList();
+ BspLib::ObjectBinFormat outobj( *objectlist->getListHead() );
+
+ int format = ( output_format == OUTPUT_FORMAT_OD2 ) ?
+ BspLib::ObjectBinFormat::BINFORMAT_OD2 : BspLib::ObjectBinFormat::BINFORMAT_ODT;
+ outobj.WriteDataToFile( outname, format );
+
+ } else {
+
+ if ( output_format == OUTPUT_FORMAT_OD2 ) {
+
+ // do direct binary output of OD2 file without BSP tree
+ BspObjectList *objectlist = world->getObjectList();
+ BspLib::ObjectBinFormat outobj( *objectlist->getListHead() );
+ outobj.WriteDataToFile( outname, BspLib::ObjectBinFormat::BINFORMAT_OD2 );
+ }
+ }
+
+ } else {
+
+ // do output in BspLib's singleoutput formats
+ if ( output_format == OUTPUT_FORMAT_SINGLE ) {
+
+ int format;
+ if ( BspTreeAvailable() ) {
+ format = BspLib::IOData3D::BSP_FORMAT_1_1;
+ } else {
+ format = BspLib::IOData3D::AOD_FORMAT_1_1;
+ // merge all objects in list into single object
+ world->getObjectList()->CollapseObjectList();
+ }
+
+ // write output file
+ if ( world->getInput() != NULL ) {
+ world->getInput()->setFileName( outname );
+ BspLib::OutputData3D outputdata( *world->getInput(), format );
+ }
+ }
+ }
+
+ delete outname;
+}
+
+
+
+
+
+// ----------------------------------------------------------------------------
+//
+
+
+
+// ----------------------------------------------------------------------------
+//
+PRIVATE
+int OptSetInputFile( char **filename )
+{
+ char *name = filename[ 0 ];
+
+ strcpy( input_file_name, name );
+
+ return TRUE;
+}
+
+// ----------------------------------------------------------------------------
+//
+PRIVATE
+int OptSetObjectScale( float *scale )
+{
+ bspgeoopt_epsilons[ 0 ] = *scale;
+
+ return TRUE;
+}
+
+
+// register command line options ----------------------------------------------
+//
+PRIVATE
+void RegisterOptions()
+{
+ OPT_RegisterStringOption( "i", "input", OptSetInputFile );
+ OPT_RegisterFloatOption( "s", "scale", OptSetObjectScale );
+}
+
+
+// ----------------------------------------------------------------------------
+//
+void msg_callback( const char *msg )
+{
+ printf( "%s", msg );
+// printf( "\n" );
+}
+
+
+// ----------------------------------------------------------------------------
+//
+PRIVATE
+int InitMakeODT()
+{
+ BspLib::SystemIO::SetProgramName( "makeodt" );
+
+#if defined ( _WINDOWS ) || defined ( WIN32 )
+ BspLib::SystemIO::SetMainWindowHandle( NULL );
+#endif
+
+ BspLib::SystemIO::SetInfoMessageCallback( msg_callback );
+ BspLib::SystemIO::SetErrorMessageCallback( msg_callback );
+
+ InitBspLibOptions();
+
+ return TRUE;
+}
+
+
+// ----------------------------------------------------------------------------
+//
+PRIVATE
+void ConvertObject()
+{
+ // create global scene
+ world = new Scene;
+
+ // open, convert, save
+ if ( OpenInput() ) {
+ MergeListIntoSingleObject();
+ SaveOutput();
+ }
+
+ // delete global scene
+ delete world;
+ world = NULL;
+}
+
+
+// main -----------------------------------------------------------------------
+//
+int main( int argc, char **argv )
+{
+ // init application
+ if ( !InitMakeODT() ) {
+ return EXIT_FAILURE;
+ }
+
+ // register command line options
+ RegisterOptions();
+
+ // exec all registered command line options
+ if ( !OPT_ExecRegisteredOptions( argc, argv ) ) {
+ MSGOUT( options_invalid );
+ exit( EXIT_FAILURE );
+ }
+
+ // set modified options
+ SetBspLibOptions();
+
+ // check for file name
+ if ( input_file_name[ 0 ] == 0 ) {
+ MSGOUT( "No file name specified.\n" );
+ exit( EXIT_FAILURE );
+ }
+
+ // do object conversion
+ ConvertObject();
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/tool_src/makeodt/makeodt.h b/tool_src/makeodt/makeodt.h
new file mode 100644
index 0000000..62fad85
--- /dev/null
+++ b/tool_src/makeodt/makeodt.h
@@ -0,0 +1,40 @@
+/*
+ * makeodt.h
+ */
+
+#ifndef _MAKEODT_H_
+#define _MAKEODT_H_
+
+
+// windows specific includes
+#ifdef _MSC_VER
+
+ #include <windows.h>
+ #include <commctrl.h>
+ #include <commdlg.h>
+ #include <afxres.h>
+ #include <richedit.h>
+ #include "resource.h"
+
+ #define PATH_MAX _MAX_PATH
+
+#endif
+
+// opengl specific includes
+//#include <gl\gl.h>
+//#include <gl\glu.h>
+
+
+// epsilon area for width of "infinitely thin" plane
+#define SCALAR_EPS 0.00000005
+
+// epsilon area for point on line determination
+//#define POINT_ON_LINESEG_EPS 0.00000001
+#define POINT_ON_LINESEG_EPS 0.02
+
+// epsilon area for merging of vertices
+#define VERTEX_MERGE_EPS 0.00000005
+
+
+
+#endif // _MAKEODT_H_
diff --git a/tool_src/makeodt/makeodt.sln b/tool_src/makeodt/makeodt.sln
new file mode 100755
index 0000000..f221937
--- /dev/null
+++ b/tool_src/makeodt/makeodt.sln
@@ -0,0 +1,54 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BspLib", "..\BspLib\BspLib.vcproj", "{F043C82B-28EC-4BA9-8C68-33708D9E3702}"
+ ProjectSection(ProjectDependencies) = postProject
+ {7B6BE4D0-375E-4615-BBC6-426AD251B41C} = {7B6BE4D0-375E-4615-BBC6-426AD251B41C}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "QvLib", "..\QvLib\QvLib.vcproj", "{7B6BE4D0-375E-4615-BBC6-426AD251B41C}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makeodt", "makeodt.vcproj", "{17796602-07C1-47DB-8D8E-C6E0125B2AD7}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F043C82B-28EC-4BA9-8C68-33708D9E3702} = {F043C82B-28EC-4BA9-8C68-33708D9E3702}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SourceCodeControl) = preSolution
+ SccNumberOfProjects = 3
+ SccProjectUniqueName0 = ..\\BspLib\\BspLib.vcproj
+ SccProjectName0 = \u0022$/ParsecTools/BspLib\u0022,\u0020KUFAAAAA
+ SccLocalPath0 = ..\\BspLib
+ SccProvider0 = MSSCCI:Perforce\u0020SCM
+ SccProjectUniqueName1 = ..\\QvLib\\QvLib.vcproj
+ SccProjectName1 = \u0022$/ParsecTools/QvLib\u0022
+ SccLocalPath1 = ..\\QvLib
+ SccProvider1 = MSSCCI:Perforce\u0020SCM
+ SccProjectUniqueName2 = makeodt.vcproj
+ SccProjectName2 = \u0022$/ParsecTools/makeodt\u0022,\u0020BUGAAAAA
+ SccLocalPath2 = .
+ SccProvider2 = MSSCCI:Perforce\u0020SCM
+ EndGlobalSection
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {F043C82B-28EC-4BA9-8C68-33708D9E3702}.Debug.ActiveCfg = Debug|Win32
+ {F043C82B-28EC-4BA9-8C68-33708D9E3702}.Debug.Build.0 = Debug|Win32
+ {F043C82B-28EC-4BA9-8C68-33708D9E3702}.Release.ActiveCfg = Release|Win32
+ {F043C82B-28EC-4BA9-8C68-33708D9E3702}.Release.Build.0 = Release|Win32
+ {7B6BE4D0-375E-4615-BBC6-426AD251B41C}.Debug.ActiveCfg = Debug|Win32
+ {7B6BE4D0-375E-4615-BBC6-426AD251B41C}.Debug.Build.0 = Debug|Win32
+ {7B6BE4D0-375E-4615-BBC6-426AD251B41C}.Release.ActiveCfg = Release|Win32
+ {7B6BE4D0-375E-4615-BBC6-426AD251B41C}.Release.Build.0 = Release|Win32
+ {17796602-07C1-47DB-8D8E-C6E0125B2AD7}.Debug.ActiveCfg = Debug|Win32
+ {17796602-07C1-47DB-8D8E-C6E0125B2AD7}.Debug.Build.0 = Debug|Win32
+ {17796602-07C1-47DB-8D8E-C6E0125B2AD7}.Release.ActiveCfg = Release|Win32
+ {17796602-07C1-47DB-8D8E-C6E0125B2AD7}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/tool_src/makeodt/makeodt.vcproj b/tool_src/makeodt/makeodt.vcproj
new file mode 100755
index 0000000..20b3a3b
--- /dev/null
+++ b/tool_src/makeodt/makeodt.vcproj
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="makeodt"
+ SccProjectName="&quot;$/ParsecTools/makeodt&quot;, BUGAAAAA"
+ SccLocalPath=".">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\BspLib;..\QvLib"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Debug/makeodt.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="2"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\bsplib\debug\bsplib.lib opengl32.lib glu32.lib comctl32.lib odbc32.lib odbccp32.lib"
+ OutputFile=".\Debug/makeodt.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/makeodt.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Debug/makeodt.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\BspLib;..\QvLib"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ StringPooling="TRUE"
+ RuntimeLibrary="4"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Release/makeodt.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="2"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\bsplib\release\bsplib.lib opengl32.lib glu32.lib comctl32.lib user 32.lib odbc32.lib odbccp32.lib"
+ OutputFile=".\Release/makeodt.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ ProgramDatabaseFile=".\Release/makeodt.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Release/makeodt.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="getopt.c">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ CompileAs="2"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ CompileAs="2"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="getopt.h">
+ </File>
+ <File
+ RelativePath="makeodt.c">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"
+ CompileAs="2"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ CompileAs="2"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="makeodt.h">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/tool_src/makeodt/makeodt.vcxproj b/tool_src/makeodt/makeodt.vcxproj
new file mode 100755
index 0000000..c3ceeb9
--- /dev/null
+++ b/tool_src/makeodt/makeodt.vcxproj
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <SccProjectName>"$/ParsecTools/makeodt", BUGAAAAA</SccProjectName>
+ <SccLocalPath>.</SccLocalPath>
+ <ProjectGuid>{F98D4CB3-A9E1-449B-9D43-E09F25A50DAF}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>11.0.50727.1</_ProjectFileVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>.\Debug\</OutDir>
+ <IntDir>.\Debug\</IntDir>
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>.\Release\</OutDir>
+ <IntDir>.\Release\</IntDir>
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\BspLib;..\QvLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader />
+ <PrecompiledHeaderOutputFile>.\Debug/makeodt.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
+ <ObjectFileName>.\Debug/</ObjectFileName>
+ <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <CompileAs>CompileAsCpp</CompileAs>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\bsplib\debug\bsplib.lib;opengl32.lib;glu32.lib;comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>.\Debug/makeodt.exe</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>.\Debug/makeodt.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Midl>
+ <TypeLibraryName>.\Debug/makeodt.tlb</TypeLibraryName>
+ <HeaderFileName />
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\BspLib;..\QvLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader />
+ <PrecompiledHeaderOutputFile>.\Release/makeodt.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
+ <ObjectFileName>.\Release/</ObjectFileName>
+ <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <CompileAs>CompileAsCpp</CompileAs>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\bsplib\release\bsplib.lib;..\qvlib\release\qvlib.lib;opengl32.lib;glu32.lib;comctl32.lib;user32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>.\Release/makeodt.exe</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ProgramDatabaseFile>.\Release/makeodt.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <Midl>
+ <TypeLibraryName>.\Release/makeodt.tlb</TypeLibraryName>
+ <HeaderFileName />
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="getopt.c">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
+ <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
+ <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+ </ClCompile>
+ <ClCompile Include="makeodt.c">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
+ <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
+ <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="getopt.h" />
+ <ClInclude Include="makeodt.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\BspLib\BspLib.vcxproj">
+ <Project>{aa6fab40-a936-486c-9db0-1addffcd4d00}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\QvLib\QvLib.vcxproj">
+ <Project>{a7e24141-287a-4d83-9c15-8a7edc9a02a2}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/tool_src/makeodt/meshconv.exe b/tool_src/makeodt/meshconv.exe
new file mode 100755
index 0000000..bfd2b51
--- /dev/null
+++ b/tool_src/makeodt/meshconv.exe
Binary files differ
diff --git a/tool_src/makeodt/planet1.wrl b/tool_src/makeodt/planet1.wrl
new file mode 100755
index 0000000..5724423
--- /dev/null
+++ b/tool_src/makeodt/planet1.wrl
@@ -0,0 +1,396 @@
+#VRML V1.0 ascii
+
+# Blender V249
+
+# 'Switch' is used as a hack, to ensure it is not part of the drawing
+
+Separator {
+Switch {
+ DEF default
+ Material {
+ diffuseColor 0.788235 0.811765 0.690196
+ specularColor 1.000000 1.000000 1.000000
+ shininess 0.500000
+ transparency 0.000000
+ }
+ DEF sphere1_default
+ Separator {
+ Coordinate3 {
+ point [
+ 0.382683 0.000000 0.923880,
+ 0.353553 -0.146447 0.923880,
+ 0.270598 -0.270598 0.923880,
+ 0.146447 -0.353553 0.923880,
+ 0.000000 -0.382683 0.923880,
+ -0.146447 -0.353553 0.923880,
+ -0.270598 -0.270598 0.923880,
+ -0.353553 -0.146447 0.923880,
+ -0.382683 0.000000 0.923880,
+ -0.353553 0.146447 0.923880,
+ -0.270598 0.270598 0.923880,
+ -0.146447 0.353553 0.923880,
+ -0.000000 0.382683 0.923880,
+ 0.146447 0.353553 0.923880,
+ 0.270598 0.270598 0.923880,
+ 0.353553 0.146447 0.923880,
+ 0.707107 0.000000 0.707107,
+ 0.653282 -0.270598 0.707107,
+ 0.500000 -0.500000 0.707107,
+ 0.270598 -0.653282 0.707107,
+ 0.000000 -0.707107 0.707107,
+ -0.270598 -0.653282 0.707107,
+ -0.500000 -0.500000 0.707107,
+ -0.653282 -0.270598 0.707107,
+ -0.707107 -0.000000 0.707107,
+ -0.653282 0.270598 0.707107,
+ -0.500000 0.500000 0.707107,
+ -0.270598 0.653282 0.707107,
+ -0.000000 0.707107 0.707107,
+ 0.270598 0.653282 0.707107,
+ 0.500000 0.500000 0.707107,
+ 0.653282 0.270598 0.707107,
+ 0.923880 0.000000 0.382683,
+ 0.853553 -0.353553 0.382683,
+ 0.653282 -0.653282 0.382683,
+ 0.353553 -0.853553 0.382683,
+ 0.000000 -0.923880 0.382683,
+ -0.353553 -0.853553 0.382683,
+ -0.653282 -0.653282 0.382683,
+ -0.853553 -0.353553 0.382683,
+ -0.923880 -0.000000 0.382683,
+ -0.853553 0.353553 0.382683,
+ -0.653282 0.653282 0.382683,
+ -0.353553 0.853553 0.382683,
+ -0.000000 0.923880 0.382683,
+ 0.353553 0.853553 0.382683,
+ 0.653282 0.653282 0.382683,
+ 0.853553 0.353553 0.382683,
+ 1.000000 0.000000 0.000000,
+ 0.923880 -0.382683 0.000000,
+ 0.707107 -0.707107 0.000000,
+ 0.382683 -0.923880 0.000000,
+ 0.000000 -1.000000 0.000000,
+ -0.382683 -0.923880 0.000000,
+ -0.707107 -0.707107 0.000000,
+ -0.923880 -0.382683 0.000000,
+ -1.000000 -0.000000 0.000000,
+ -0.923880 0.382683 0.000000,
+ -0.707107 0.707107 0.000000,
+ -0.382683 0.923880 0.000000,
+ -0.000000 1.000000 0.000000,
+ 0.382683 0.923880 0.000000,
+ 0.707107 0.707107 0.000000,
+ 0.923880 0.382683 0.000000,
+ 0.923880 -0.000000 -0.382683,
+ 0.853553 -0.353553 -0.382683,
+ 0.653282 -0.653282 -0.382683,
+ 0.353553 -0.853553 -0.382683,
+ 0.000000 -0.923880 -0.382683,
+ -0.353553 -0.853553 -0.382683,
+ -0.653282 -0.653282 -0.382683,
+ -0.853553 -0.353553 -0.382683,
+ -0.923880 -0.000000 -0.382683,
+ -0.853553 0.353553 -0.382683,
+ -0.653282 0.653282 -0.382683,
+ -0.353553 0.853553 -0.382683,
+ -0.000000 0.923880 -0.382683,
+ 0.353553 0.853553 -0.382683,
+ 0.653282 0.653282 -0.382683,
+ 0.853553 0.353553 -0.382683,
+ 0.707107 -0.000000 -0.707107,
+ 0.653282 -0.270598 -0.707107,
+ 0.500000 -0.500000 -0.707107,
+ 0.270598 -0.653282 -0.707107,
+ 0.000000 -0.707107 -0.707107,
+ -0.270598 -0.653282 -0.707107,
+ -0.500000 -0.500000 -0.707107,
+ -0.653282 -0.270598 -0.707107,
+ -0.707107 -0.000000 -0.707107,
+ -0.653282 0.270598 -0.707107,
+ -0.500000 0.500000 -0.707107,
+ -0.270598 0.653282 -0.707107,
+ -0.000000 0.707107 -0.707107,
+ 0.270598 0.653282 -0.707107,
+ 0.500000 0.500000 -0.707107,
+ 0.653282 0.270598 -0.707107,
+ 0.382683 -0.000000 -0.923880,
+ 0.353553 -0.146447 -0.923880,
+ 0.270598 -0.270598 -0.923880,
+ 0.146447 -0.353553 -0.923880,
+ 0.000000 -0.382683 -0.923880,
+ -0.146447 -0.353553 -0.923880,
+ -0.270598 -0.270598 -0.923880,
+ -0.353553 -0.146447 -0.923880,
+ -0.382683 -0.000000 -0.923880,
+ -0.353553 0.146447 -0.923880,
+ -0.270598 0.270598 -0.923880,
+ -0.146447 0.353553 -0.923880,
+ -0.000000 0.382683 -0.923880,
+ 0.146447 0.353553 -0.923880,
+ 0.270598 0.270598 -0.923880,
+ 0.353553 0.146447 -0.923880,
+ 0.000000 0.000000 1.000000,
+ 0.000000 -0.000000 -1.000000,
+ ]
+ }
+ USE default
+
+ IndexedFaceSet {
+ coordIndex [
+ 0, 112, 1, -1,
+ 1, 112, 2, -1,
+ 2, 112, 3, -1,
+ 3, 112, 4, -1,
+ 4, 112, 5, -1,
+ 5, 112, 6, -1,
+ 6, 112, 7, -1,
+ 7, 112, 8, -1,
+ 8, 112, 9, -1,
+ 9, 112, 10, -1,
+ 10, 112, 11, -1,
+ 11, 112, 12, -1,
+ 12, 112, 13, -1,
+ 13, 112, 14, -1,
+ 14, 112, 15, -1,
+ 112, 0, 15, -1,
+ 97, 113, 96, -1,
+ 98, 113, 97, -1,
+ 99, 113, 98, -1,
+ 100, 113, 99, -1,
+ 101, 113, 100, -1,
+ 102, 113, 101, -1,
+ 103, 113, 102, -1,
+ 104, 113, 103, -1,
+ 105, 113, 104, -1,
+ 106, 113, 105, -1,
+ 107, 113, 106, -1,
+ 108, 113, 107, -1,
+ 109, 113, 108, -1,
+ 110, 113, 109, -1,
+ 111, 113, 110, -1,
+ 96, 113, 111, -1,
+ 1, 17, 16, -1,
+ 16, 0, 1, -1,
+ 2, 18, 17, -1,
+ 17, 1, 2, -1,
+ 19, 18, 2, -1,
+ 2, 3, 19, -1,
+ 20, 19, 3, -1,
+ 3, 4, 20, -1,
+ 5, 21, 20, -1,
+ 5, 20, 4, -1,
+ 6, 22, 21, -1,
+ 6, 21, 5, -1,
+ 23, 22, 6, -1,
+ 6, 7, 23, -1,
+ 24, 23, 7, -1,
+ 7, 8, 24, -1,
+ 9, 25, 24, -1,
+ 9, 24, 8, -1,
+ 10, 26, 25, -1,
+ 10, 25, 9, -1,
+ 11, 27, 10, -1,
+ 27, 26, 10, -1,
+ 12, 28, 11, -1,
+ 28, 27, 11, -1,
+ 13, 29, 12, -1,
+ 29, 28, 12, -1,
+ 14, 30, 29, -1,
+ 29, 13, 14, -1,
+ 15, 31, 14, -1,
+ 31, 30, 14, -1,
+ 0, 16, 15, -1,
+ 16, 31, 15, -1,
+ 17, 33, 32, -1,
+ 32, 16, 17, -1,
+ 18, 34, 33, -1,
+ 33, 17, 18, -1,
+ 35, 34, 18, -1,
+ 18, 19, 35, -1,
+ 20, 36, 35, -1,
+ 20, 35, 19, -1,
+ 21, 37, 36, -1,
+ 21, 36, 20, -1,
+ 22, 38, 37, -1,
+ 22, 37, 21, -1,
+ 39, 38, 22, -1,
+ 22, 23, 39, -1,
+ 40, 39, 23, -1,
+ 23, 24, 40, -1,
+ 25, 41, 40, -1,
+ 25, 40, 24, -1,
+ 26, 42, 41, -1,
+ 26, 41, 25, -1,
+ 27, 43, 26, -1,
+ 43, 42, 26, -1,
+ 28, 44, 27, -1,
+ 44, 43, 27, -1,
+ 29, 45, 28, -1,
+ 45, 44, 28, -1,
+ 30, 46, 45, -1,
+ 45, 29, 30, -1,
+ 31, 47, 30, -1,
+ 47, 46, 30, -1,
+ 16, 32, 31, -1,
+ 32, 47, 31, -1,
+ 33, 49, 32, -1,
+ 49, 48, 32, -1,
+ 34, 50, 33, -1,
+ 50, 49, 33, -1,
+ 35, 51, 34, -1,
+ 51, 50, 34, -1,
+ 36, 52, 35, -1,
+ 52, 51, 35, -1,
+ 37, 53, 36, -1,
+ 53, 52, 36, -1,
+ 38, 54, 37, -1,
+ 54, 53, 37, -1,
+ 39, 55, 54, -1,
+ 39, 54, 38, -1,
+ 40, 56, 39, -1,
+ 56, 55, 39, -1,
+ 41, 57, 56, -1,
+ 41, 56, 40, -1,
+ 42, 58, 41, -1,
+ 58, 57, 41, -1,
+ 43, 59, 58, -1,
+ 43, 58, 42, -1,
+ 44, 60, 43, -1,
+ 60, 59, 43, -1,
+ 45, 61, 44, -1,
+ 61, 60, 44, -1,
+ 46, 62, 45, -1,
+ 62, 61, 45, -1,
+ 47, 63, 46, -1,
+ 63, 62, 46, -1,
+ 32, 48, 47, -1,
+ 48, 63, 47, -1,
+ 49, 65, 48, -1,
+ 65, 64, 48, -1,
+ 50, 66, 49, -1,
+ 66, 65, 49, -1,
+ 51, 67, 50, -1,
+ 67, 66, 50, -1,
+ 52, 68, 51, -1,
+ 68, 67, 51, -1,
+ 53, 69, 52, -1,
+ 69, 68, 52, -1,
+ 54, 70, 69, -1,
+ 54, 69, 53, -1,
+ 55, 71, 70, -1,
+ 55, 70, 54, -1,
+ 56, 72, 55, -1,
+ 72, 71, 55, -1,
+ 73, 72, 56, -1,
+ 56, 57, 73, -1,
+ 58, 74, 73, -1,
+ 58, 73, 57, -1,
+ 59, 75, 58, -1,
+ 75, 74, 58, -1,
+ 60, 76, 59, -1,
+ 76, 75, 59, -1,
+ 61, 77, 76, -1,
+ 61, 76, 60, -1,
+ 62, 78, 61, -1,
+ 78, 77, 61, -1,
+ 63, 79, 62, -1,
+ 79, 78, 62, -1,
+ 48, 64, 63, -1,
+ 64, 79, 63, -1,
+ 65, 81, 80, -1,
+ 80, 64, 65, -1,
+ 66, 82, 65, -1,
+ 82, 81, 65, -1,
+ 67, 83, 82, -1,
+ 67, 82, 66, -1,
+ 68, 84, 83, -1,
+ 68, 83, 67, -1,
+ 85, 84, 68, -1,
+ 68, 69, 85, -1,
+ 86, 85, 69, -1,
+ 69, 70, 86, -1,
+ 71, 87, 86, -1,
+ 71, 86, 70, -1,
+ 72, 88, 87, -1,
+ 72, 87, 71, -1,
+ 89, 88, 72, -1,
+ 72, 73, 89, -1,
+ 90, 89, 73, -1,
+ 73, 74, 90, -1,
+ 75, 91, 90, -1,
+ 90, 74, 75, -1,
+ 76, 92, 91, -1,
+ 91, 75, 76, -1,
+ 77, 93, 92, -1,
+ 92, 76, 77, -1,
+ 78, 94, 77, -1,
+ 94, 93, 77, -1,
+ 79, 95, 94, -1,
+ 94, 78, 79, -1,
+ 64, 80, 95, -1,
+ 95, 79, 64, -1,
+ 81, 97, 96, -1,
+ 96, 80, 81, -1,
+ 82, 98, 81, -1,
+ 98, 97, 81, -1,
+ 83, 99, 98, -1,
+ 83, 98, 82, -1,
+ 84, 100, 99, -1,
+ 84, 99, 83, -1,
+ 101, 100, 84, -1,
+ 84, 85, 101, -1,
+ 102, 101, 85, -1,
+ 85, 86, 102, -1,
+ 87, 103, 102, -1,
+ 87, 102, 86, -1,
+ 88, 104, 103, -1,
+ 88, 103, 87, -1,
+ 105, 104, 88, -1,
+ 88, 89, 105, -1,
+ 106, 105, 89, -1,
+ 89, 90, 106, -1,
+ 91, 107, 106, -1,
+ 106, 90, 91, -1,
+ 92, 108, 107, -1,
+ 107, 91, 92, -1,
+ 93, 109, 108, -1,
+ 108, 92, 93, -1,
+ 94, 110, 93, -1,
+ 110, 109, 93, -1,
+ 95, 111, 110, -1,
+ 110, 94, 95, -1,
+ 80, 96, 111, -1,
+ 111, 95, 80, -1,
+ ]
+ }
+ }
+
+ # Hidden Objects, in invisible layers
+
+}
+
+# Visible Objects
+
+Separator {
+ MatrixTransform {
+ matrix
+ 0.685880 -0.317370 0.654862 0.000000
+ 0.727634 0.312469 -0.610666 0.000000
+ -0.010817 0.895343 0.445245 0.000000
+ -0.338183 -0.376694 -11.252342 1.000000
+ }
+ PerspectiveCamera {
+ focalDistance 3.500000
+ }
+ Separator {
+ MatrixTransform {
+ matrix
+ 1.000000 0.000000 0.000000 0.000000
+ 0.000000 1.000000 0.000000 0.000000
+ 0.000000 0.000000 1.000000 0.000000
+ 0.000000 0.000000 0.000000 1.000000
+ }
+ USE sphere1_default
+ }
+}
+}
diff --git a/tool_src/makeodt/test_ship b/tool_src/makeodt/test_ship
new file mode 100755
index 0000000..db9c10c
--- /dev/null
+++ b/tool_src/makeodt/test_ship
@@ -0,0 +1,526 @@
+#VRML V1.0 ascii
+
+# Blender V249
+
+# 'Switch' is used as a hack, to ensure it is not part of the drawing
+
+Separator {
+Switch {
+ DEF default
+ Material {
+ diffuseColor 0.788235 0.811765 0.690196
+ specularColor 1.000000 1.000000 1.000000
+ shininess 0.500000
+ transparency 0.000000
+ }
+ DEF cube1_copy_default
+ Separator {
+ Coordinate3 {
+ point [
+ 0.846830 0.004765 -0.000674,
+ 0.846830 0.004765 0.631326,
+ 0.994718 0.004765 0.631326,
+ 0.994718 0.004765 -0.000674,
+ 0.846830 1.104445 -0.000674,
+ 0.846830 1.104445 0.631326,
+ 0.994718 1.104445 0.631326,
+ 0.994718 1.104445 -0.000674,
+ ]
+ }
+ USE default
+
+ IndexedFaceSet {
+ coordIndex [
+ 3, 2, 1, -1,
+ 1, 0, 3, -1,
+ 3, 7, 6, -1,
+ 3, 6, 2, -1,
+ 0, 4, 7, -1,
+ 0, 7, 3, -1,
+ 2, 6, 5, -1,
+ 5, 1, 2, -1,
+ 5, 6, 7, -1,
+ 7, 4, 5, -1,
+ 5, 0, 1, -1,
+ 4, 0, 5, -1,
+ ]
+ }
+ }
+ DEF cube1_default
+ Separator {
+ Coordinate3 {
+ point [
+ -0.998504 0.004765 -0.000674,
+ -0.998504 0.004765 0.631326,
+ -0.850616 0.004765 0.631326,
+ -0.850616 0.004765 -0.000674,
+ -0.998504 1.104445 -0.000674,
+ -0.998504 1.104445 0.631326,
+ -0.850616 1.104445 0.631326,
+ -0.850616 1.104445 -0.000674,
+ ]
+ }
+ USE default
+
+ IndexedFaceSet {
+ coordIndex [
+ 3, 2, 1, -1,
+ 1, 0, 3, -1,
+ 3, 7, 6, -1,
+ 3, 6, 2, -1,
+ 0, 4, 7, -1,
+ 0, 7, 3, -1,
+ 2, 6, 5, -1,
+ 5, 1, 2, -1,
+ 5, 6, 7, -1,
+ 7, 4, 5, -1,
+ 5, 0, 1, -1,
+ 4, 0, 5, -1,
+ ]
+ }
+ }
+ DEF cube2_default
+ Separator {
+ Coordinate3 {
+ point [
+ -1.000000 -1.986667 0.005170,
+ -1.000000 -1.986667 0.627719,
+ 1.000000 -1.986667 0.627719,
+ 1.000000 -1.986667 0.005170,
+ -1.000000 0.013333 0.005170,
+ -1.000000 0.013333 0.627719,
+ 1.000000 0.013333 0.627719,
+ 1.000000 0.013333 0.005170,
+ 0.000000 -1.986667 0.627719,
+ 0.000000 -1.986667 0.005170,
+ 0.382683 -2.885333 1.259880,
+ 0.353553 -3.031780 1.259880,
+ 0.270598 -3.155931 1.259880,
+ 0.146447 -3.238887 1.259880,
+ 0.000000 -3.268017 1.259880,
+ -0.146447 -3.238887 1.259880,
+ -0.270598 -3.155931 1.259880,
+ -0.353553 -3.031780 1.259880,
+ -0.382683 -2.885333 1.259880,
+ -0.353553 -2.738887 1.259880,
+ -0.270598 -2.614735 1.259880,
+ -0.146447 -2.531780 1.259880,
+ -0.000000 -2.502650 1.259880,
+ 0.146447 -2.531780 1.259880,
+ 0.270598 -2.614735 1.259880,
+ 0.353553 -2.738887 1.259880,
+ 0.707107 -2.885333 1.043107,
+ 0.653282 -3.155931 1.043107,
+ 0.500000 -3.385333 1.043107,
+ 0.270598 -3.538615 1.043107,
+ 0.000000 -3.592440 1.043107,
+ -0.270598 -3.538615 1.043107,
+ -0.500000 -3.385333 1.043107,
+ -0.653282 -3.155931 1.043107,
+ -0.707107 -2.885333 1.043107,
+ -0.653282 -2.614735 1.043107,
+ -0.500000 -2.385333 1.043107,
+ -0.270598 -2.232052 1.043107,
+ -0.000000 -2.178226 1.043107,
+ 0.270598 -2.232052 1.043107,
+ 0.500000 -2.385333 1.043107,
+ 0.653282 -2.614735 1.043107,
+ 0.923880 -2.885333 0.718683,
+ 0.853553 -3.238887 0.718683,
+ 0.653282 -3.538615 0.718683,
+ 0.353553 -3.738887 0.718683,
+ 0.000000 -3.809213 0.718683,
+ -0.353553 -3.738887 0.718683,
+ -0.653282 -3.538615 0.718683,
+ -0.853553 -3.238887 0.718683,
+ -0.923880 -2.885333 0.718683,
+ -0.853553 -2.531780 0.718683,
+ -0.653282 -2.232052 0.718683,
+ -0.353553 -2.031780 0.718683,
+ -0.000000 -1.961454 0.718683,
+ 0.353553 -2.031780 0.718683,
+ 0.653282 -2.232052 0.718683,
+ 0.853553 -2.531780 0.718683,
+ 1.000000 -2.885333 0.336000,
+ 0.923880 -3.268017 0.336000,
+ 0.707107 -3.592440 0.336000,
+ 0.382683 -3.809213 0.336000,
+ 0.000000 -3.885333 0.336000,
+ -0.382683 -3.809213 0.336000,
+ -0.707107 -3.592440 0.336000,
+ -0.923880 -3.268017 0.336000,
+ -1.000000 -2.885333 0.336000,
+ -0.923880 -2.502650 0.336000,
+ -0.707107 -2.178226 0.336000,
+ -0.000000 -1.885333 0.336000,
+ 0.707107 -2.178226 0.336000,
+ 0.923880 -2.502650 0.336000,
+ 0.923880 -2.885333 -0.046683,
+ 0.853553 -3.238887 -0.046683,
+ 0.653282 -3.538615 -0.046683,
+ 0.353553 -3.738887 -0.046683,
+ 0.000000 -3.809213 -0.046683,
+ -0.353553 -3.738887 -0.046683,
+ -0.653282 -3.538615 -0.046683,
+ -0.853553 -3.238887 -0.046683,
+ -0.923880 -2.885333 -0.046683,
+ -0.853553 -2.531780 -0.046683,
+ -0.653282 -2.232052 -0.046683,
+ -0.353553 -2.031780 -0.046683,
+ -0.000000 -1.961454 -0.046683,
+ 0.353553 -2.031780 -0.046683,
+ 0.653282 -2.232052 -0.046683,
+ 0.853553 -2.531780 -0.046683,
+ 0.707107 -2.885333 -0.371107,
+ 0.653282 -3.155931 -0.371107,
+ 0.500000 -3.385333 -0.371107,
+ 0.270598 -3.538615 -0.371107,
+ 0.000000 -3.592440 -0.371107,
+ -0.270598 -3.538615 -0.371107,
+ -0.500000 -3.385333 -0.371107,
+ -0.653282 -3.155931 -0.371107,
+ -0.707107 -2.885333 -0.371107,
+ -0.653282 -2.614735 -0.371107,
+ -0.500000 -2.385333 -0.371107,
+ -0.270598 -2.232052 -0.371107,
+ -0.000000 -2.178226 -0.371107,
+ 0.270598 -2.232052 -0.371107,
+ 0.500000 -2.385333 -0.371107,
+ 0.653282 -2.614735 -0.371107,
+ 0.382683 -2.885333 -0.587880,
+ 0.353553 -3.031780 -0.587880,
+ 0.270598 -3.155931 -0.587880,
+ 0.146447 -3.238887 -0.587880,
+ 0.000000 -3.268017 -0.587880,
+ -0.146447 -3.238887 -0.587880,
+ -0.270598 -3.155931 -0.587880,
+ -0.353553 -3.031780 -0.587880,
+ -0.382683 -2.885333 -0.587880,
+ -0.353553 -2.738887 -0.587880,
+ -0.270598 -2.614735 -0.587880,
+ -0.146447 -2.531780 -0.587880,
+ -0.000000 -2.502650 -0.587880,
+ 0.146447 -2.531780 -0.587880,
+ 0.270598 -2.614735 -0.587880,
+ 0.353553 -2.738887 -0.587880,
+ 0.000000 -2.885333 1.336000,
+ 0.000000 -2.885333 -0.664000,
+ -0.500000 -1.986667 0.005170,
+ 0.000000 -1.986667 0.316444,
+ -0.500000 -1.986667 0.627719,
+ -1.000000 -1.986667 0.316444,
+ 0.500000 -1.986667 0.627719,
+ 0.000000 -1.986667 0.160807,
+ 1.000000 -1.986667 0.316444,
+ ]
+ }
+ USE default
+
+ IndexedFaceSet {
+ coordIndex [
+ 128, 3, 7, -1,
+ 128, 7, 6, -1,
+ 128, 6, 2, -1,
+ 4, 7, 9, -1,
+ 4, 9, 122, -1,
+ 7, 3, 9, -1,
+ 122, 0, 4, -1,
+ 8, 126, 6, -1,
+ 126, 2, 6, -1,
+ 5, 124, 8, -1,
+ 5, 8, 6, -1,
+ 5, 1, 124, -1,
+ 6, 7, 4, -1,
+ 4, 5, 6, -1,
+ 125, 1, 5, -1,
+ 125, 5, 4, -1,
+ 4, 0, 125, -1,
+ 10, 120, 11, -1,
+ 11, 120, 12, -1,
+ 12, 120, 13, -1,
+ 13, 120, 14, -1,
+ 14, 120, 15, -1,
+ 15, 120, 16, -1,
+ 16, 120, 17, -1,
+ 17, 120, 18, -1,
+ 18, 120, 19, -1,
+ 19, 120, 20, -1,
+ 20, 120, 21, -1,
+ 21, 120, 22, -1,
+ 22, 120, 23, -1,
+ 23, 120, 24, -1,
+ 24, 120, 25, -1,
+ 25, 120, 10, -1,
+ 105, 121, 104, -1,
+ 106, 121, 105, -1,
+ 107, 121, 106, -1,
+ 108, 121, 107, -1,
+ 109, 121, 108, -1,
+ 110, 121, 109, -1,
+ 111, 121, 110, -1,
+ 112, 121, 111, -1,
+ 113, 121, 112, -1,
+ 114, 121, 113, -1,
+ 115, 121, 114, -1,
+ 116, 121, 115, -1,
+ 117, 121, 116, -1,
+ 118, 121, 117, -1,
+ 119, 121, 118, -1,
+ 104, 121, 119, -1,
+ 11, 27, 10, -1,
+ 27, 26, 10, -1,
+ 12, 28, 27, -1,
+ 27, 11, 12, -1,
+ 29, 28, 12, -1,
+ 12, 13, 29, -1,
+ 30, 29, 13, -1,
+ 13, 14, 30, -1,
+ 15, 31, 30, -1,
+ 15, 30, 14, -1,
+ 16, 32, 31, -1,
+ 16, 31, 15, -1,
+ 33, 32, 16, -1,
+ 16, 17, 33, -1,
+ 18, 34, 33, -1,
+ 18, 33, 17, -1,
+ 19, 35, 34, -1,
+ 19, 34, 18, -1,
+ 20, 36, 35, -1,
+ 20, 35, 19, -1,
+ 21, 37, 20, -1,
+ 37, 36, 20, -1,
+ 22, 38, 21, -1,
+ 38, 37, 21, -1,
+ 23, 39, 22, -1,
+ 39, 38, 22, -1,
+ 24, 40, 39, -1,
+ 39, 23, 24, -1,
+ 25, 41, 24, -1,
+ 41, 40, 24, -1,
+ 10, 26, 25, -1,
+ 26, 41, 25, -1,
+ 27, 43, 26, -1,
+ 43, 42, 26, -1,
+ 28, 44, 43, -1,
+ 43, 27, 28, -1,
+ 45, 44, 28, -1,
+ 28, 29, 45, -1,
+ 30, 46, 45, -1,
+ 30, 45, 29, -1,
+ 31, 47, 46, -1,
+ 31, 46, 30, -1,
+ 32, 48, 47, -1,
+ 32, 47, 31, -1,
+ 49, 48, 32, -1,
+ 32, 33, 49, -1,
+ 34, 50, 49, -1,
+ 34, 49, 33, -1,
+ 35, 51, 50, -1,
+ 35, 50, 34, -1,
+ 36, 52, 51, -1,
+ 36, 51, 35, -1,
+ 37, 53, 36, -1,
+ 53, 52, 36, -1,
+ 38, 54, 37, -1,
+ 54, 53, 37, -1,
+ 39, 55, 38, -1,
+ 55, 54, 38, -1,
+ 40, 56, 55, -1,
+ 55, 39, 40, -1,
+ 41, 57, 40, -1,
+ 57, 56, 40, -1,
+ 26, 42, 41, -1,
+ 42, 57, 41, -1,
+ 43, 59, 42, -1,
+ 59, 58, 42, -1,
+ 44, 60, 59, -1,
+ 44, 59, 43, -1,
+ 45, 61, 44, -1,
+ 61, 60, 44, -1,
+ 46, 62, 61, -1,
+ 46, 61, 45, -1,
+ 47, 63, 62, -1,
+ 47, 62, 46, -1,
+ 48, 64, 47, -1,
+ 64, 63, 47, -1,
+ 49, 65, 48, -1,
+ 65, 64, 48, -1,
+ 50, 66, 65, -1,
+ 50, 65, 49, -1,
+ 51, 67, 66, -1,
+ 51, 66, 50, -1,
+ 52, 68, 51, -1,
+ 68, 67, 51, -1,
+ 57, 71, 56, -1,
+ 71, 70, 56, -1,
+ 42, 58, 57, -1,
+ 58, 71, 57, -1,
+ 59, 73, 58, -1,
+ 73, 72, 58, -1,
+ 60, 74, 59, -1,
+ 74, 73, 59, -1,
+ 61, 75, 60, -1,
+ 75, 74, 60, -1,
+ 62, 76, 61, -1,
+ 76, 75, 61, -1,
+ 63, 77, 62, -1,
+ 77, 76, 62, -1,
+ 64, 78, 63, -1,
+ 78, 77, 63, -1,
+ 65, 79, 78, -1,
+ 65, 78, 64, -1,
+ 66, 80, 79, -1,
+ 66, 79, 65, -1,
+ 81, 80, 66, -1,
+ 66, 67, 81, -1,
+ 68, 82, 67, -1,
+ 82, 81, 67, -1,
+ 71, 87, 70, -1,
+ 87, 86, 70, -1,
+ 58, 72, 71, -1,
+ 72, 87, 71, -1,
+ 73, 89, 88, -1,
+ 88, 72, 73, -1,
+ 74, 90, 73, -1,
+ 90, 89, 73, -1,
+ 75, 91, 90, -1,
+ 75, 90, 74, -1,
+ 76, 92, 91, -1,
+ 76, 91, 75, -1,
+ 93, 92, 76, -1,
+ 76, 77, 93, -1,
+ 94, 93, 77, -1,
+ 77, 78, 94, -1,
+ 79, 95, 94, -1,
+ 79, 94, 78, -1,
+ 80, 96, 95, -1,
+ 80, 95, 79, -1,
+ 97, 96, 80, -1,
+ 80, 81, 97, -1,
+ 98, 97, 81, -1,
+ 81, 82, 98, -1,
+ 83, 99, 98, -1,
+ 98, 82, 83, -1,
+ 84, 100, 99, -1,
+ 99, 83, 84, -1,
+ 85, 101, 100, -1,
+ 100, 84, 85, -1,
+ 86, 102, 85, -1,
+ 102, 101, 85, -1,
+ 87, 103, 102, -1,
+ 102, 86, 87, -1,
+ 72, 88, 103, -1,
+ 103, 87, 72, -1,
+ 89, 105, 88, -1,
+ 105, 104, 88, -1,
+ 90, 106, 89, -1,
+ 106, 105, 89, -1,
+ 91, 107, 106, -1,
+ 91, 106, 90, -1,
+ 92, 108, 107, -1,
+ 92, 107, 91, -1,
+ 109, 108, 92, -1,
+ 92, 93, 109, -1,
+ 110, 109, 93, -1,
+ 93, 94, 110, -1,
+ 95, 111, 110, -1,
+ 95, 110, 94, -1,
+ 96, 112, 111, -1,
+ 96, 111, 95, -1,
+ 113, 112, 96, -1,
+ 96, 97, 113, -1,
+ 114, 113, 97, -1,
+ 97, 98, 114, -1,
+ 99, 115, 114, -1,
+ 114, 98, 99, -1,
+ 100, 116, 115, -1,
+ 115, 99, 100, -1,
+ 101, 117, 116, -1,
+ 116, 100, 101, -1,
+ 102, 118, 101, -1,
+ 118, 117, 101, -1,
+ 103, 119, 118, -1,
+ 118, 102, 103, -1,
+ 88, 104, 119, -1,
+ 119, 103, 88, -1,
+ 52, 53, 124, -1,
+ 124, 1, 52, -1,
+ 54, 8, 53, -1,
+ 8, 124, 53, -1,
+ 8, 54, 69, -1,
+ 84, 9, 127, -1,
+ 83, 122, 9, -1,
+ 83, 9, 84, -1,
+ 122, 83, 82, -1,
+ 82, 0, 122, -1,
+ 0, 82, 68, -1,
+ 0, 68, 125, -1,
+ 52, 1, 68, -1,
+ 1, 125, 68, -1,
+ 2, 56, 70, -1,
+ 70, 128, 2, -1,
+ 56, 2, 126, -1,
+ 126, 55, 56, -1,
+ 8, 54, 55, -1,
+ 8, 55, 126, -1,
+ 8, 123, 69, -1,
+ 69, 123, 127, -1,
+ 127, 84, 69, -1,
+ 84, 9, 85, -1,
+ 3, 86, 85, -1,
+ 85, 9, 3, -1,
+ 3, 128, 70, -1,
+ 70, 86, 3, -1,
+ ]
+ }
+ }
+
+ # Hidden Objects, in invisible layers
+
+}
+
+# Visible Objects
+
+Separator {
+ MatrixTransform {
+ matrix
+ 0.685880 -0.317370 0.654862 0.000000
+ 0.727634 0.312469 -0.610666 0.000000
+ -0.010817 0.895343 0.445245 0.000000
+ -0.338183 -0.376694 -11.252342 1.000000
+ }
+ PerspectiveCamera {
+ focalDistance 3.500000
+ }
+ Separator {
+ MatrixTransform {
+ matrix
+ 1.000000 0.000000 0.000000 0.000000
+ 0.000000 1.000000 0.000000 0.000000
+ 0.000000 0.000000 1.000000 0.000000
+ -4.314717 1.826668 0.000000 1.000000
+ }
+ USE cube1_default
+ }
+ Separator {
+ MatrixTransform {
+ matrix
+ 1.000000 0.000000 0.000000 0.000000
+ 0.000000 1.000000 0.000000 0.000000
+ 0.000000 0.000000 1.000000 0.000000
+ -4.314717 1.826668 -0.223175 1.000000
+ }
+ USE cube2_default
+ }
+ Separator {
+ MatrixTransform {
+ matrix
+ 1.000000 0.000000 0.000000 0.000000
+ 0.000000 1.000000 0.000000 0.000000
+ 0.000000 0.000000 1.000000 0.000000
+ -4.314717 1.826668 0.000000 1.000000
+ }
+ USE cube1_copy_default
+ }
+}
+}
diff --git a/tool_src/makeodt/test_ship2.vrml b/tool_src/makeodt/test_ship2.vrml
new file mode 100755
index 0000000..1f6e043
--- /dev/null
+++ b/tool_src/makeodt/test_ship2.vrml
@@ -0,0 +1,52 @@
+#VRML V1.0 ascii
+Separator {
+ Coordinate3 {
+ point [
+0.846830,-0.000674,-0.004765,0.846830,0.631326,-0.004765,0.99471,0.631326,-0.004765,0.994718,-0.000674,-0.004765,0.846830,-0.000674,-1.104445,0.846830,0.631326,-1.104445,0.994718,0.631326,-1.104445,0.994718,-0.000674,-1.104445,-1.000000,0.005170,1.986667,-1.000000,0.627719,1.986667,1.000000,0.627719,1.986667,1.000000,0.005170,1.986667,-1.000000,0.005170,-0.013333,-1.000000,0.627719,-0.013333,1.000000,0.627719,-0.013333,1.000000,0.005170,-0.013333,0.000000,0.627719,1.986667,0.000000,0.005170,1.986667,0.382683,1.259880,2.885333,0.353553,1.259880,3.031780,0.270598,1.259880,3.155931,0.146447,1.259880,3.238887,0.000000,1.259880,3.268017,-0.146447,1.259880,3.238887,-0.270598,1.259880,3.155931,-0.353553,1.259880,3.031780,-0.382683,1.259880,2.885333,-0.353553,1.259880,2.738887,-0.270598,1.259880,2.614735,-0.146447,1.259880,2.531780,-0.000000,1.259880,2.502650,0.146447,1.259880,2.531780,0.270598,1.259880,2.614735,0.353553,1.259880,2.738887,0.707107,1.043107,2.885333,0.653281,1.043107,3.155931,0.500000,1.043107,3.385333,0.270598,1.043107,3.538615,0.000000,1.043107,3.592440,-0.270598,1.043107,3.538615,-0.500000,1.043107,3.385333,-0.653281,1.043107,3.155931,-0.707107,1.043107,2.885333,-0.653281,1.043107,2.614735,-0.500000,1.043107,2.385333,-0.270598,1.043107,2.232052,-0.000000,1.043107,2.178227,0.270598,1.043107,2.232052,0.500000,1.043107,2.385333,0.653281,1.043107,2.614735,0.923880,0.718683,2.885333,0.853553,0.718683,3.238887,0.653281,0.718683,3.538615,0.353553,0.718683,3.738887,0.000000,0.718683,3.809213,-0.353553,0.718683,3.738887,-0.653281,0.718683,3.538615,-0.853553,0.718683,3.238887,-0.923880,0.718683,2.885333,-0.853553,0.718683,2.531780,-0.653281,0.718683,2.232052,-0.353553,0.718683,2.031780,-0.000000,0.718683,1.961454,0.353553,0.718683,2.031780,0.653281,0.718683,2.232052,0.853553,0.718683,2.531780,1.000000,0.336000,2.885333,0.923880,0.336000,3.268017,0.707107,0.336000,3.592440,0.382683,0.336000,3.809213,0.000000,0.336000,3.885333,-0.382683,0.336000,3.809213,-0.707107,0.336000,3.592440,-0.923880,0.336000,3.268017,-1.000000,0.336000,2.885333,-0.923880,0.336000,2.502650,-0.707107,0.336000,2.178227,-0.000000,0.336000,1.885333,0.707107,0.336000,2.178227,0.923880,0.336000,2.502650,0.923880,-0.046683,2.885333,0.853553,-0.046683,3.238887,0.653281,-0.046683,3.538615,0.353553,-0.046683,3.738887,0.000000,-0.046683,3.809213,-0.353553,-0.046683,3.738887,-0.653281,-0.046683,3.538615,-0.853553,-0.046683,3.238887,-0.923880,-0.046683,2.885333,-0.853553,-0.046683,2.531780,-0.653281,-0.046683,2.232052,-0.353553,-0.046683,2.031780,-0.000000,-0.046683,1.961454,0.353553,-0.046683,2.031780,0.653281,-0.046683,2.232052,0.853553,-0.046683,2.531780,0.707107,-0.371107,2.885333,0.653281,-0.371107,3.155931,0.500000,-0.371107,3.385333,0.270598,-0.371107,3.538615,0.000000,-0.371107,3.592440,-0.270598,-0.371107,3.538615,-0.500000,-0.371107,3.385333,-0.653281,-0.371107,3.155931,-0.707107,-0.371107,2.885333,-0.653281,-0.371107,2.614735,-0.500000,-0.371107,2.385333,-0.270598,-0.371107,2.232052,-0.000000,-0.371107,2.178227,0.270598,-0.371107,2.232052,0.500000,-0.371107,2.385333,0.653281,-0.371107,2.614735,0.382683,-0.587880,2.885333,0.353553,-0.587880,3.031780,0.270598,-0.587880,3.155931,0.146447,-0.587880,3.238887,0.000000,-0.587880,3.268017,-0.146447,-0.587880,3.238887,-0.270598,-0.587880,3.155931,-0.353553,-0.587880,3.031780,-0.382683,-0.587880,2.885333,-0.353553,-0.587880,2.738887,-0.270598,-0.587880,2.614735,-0.146447,-0.587880,2.531780,-0.000000,-0.587880,2.502650,0.146447,-0.587880,2.531780,0.270598,-0.587880,2.614735,0.353553,-0.587880,2.738887,0.000000,1.336000,2.885333,0.000000,-0.664000,2.885333,-0.500000,0.005170,1.986667,0.000000,0.316444,1.986667,-0.500000,0.627719,1.986667,-1.000000,0.316444,1.986667,0.500000,0.627719,1.986667,0.000000,0.160807,1.986667,1.000000,0.316444,1.986667,-0.998504,-0.000674,-0.004765,-0.998504,0.631326,-0.004765,-0.850616,0.631326,-0.004765,-0.850616,-0.000674,-0.004765,-0.998504,-0.000674,-1.104445,-0.998504,0.631326,-1.104445,-0.850616,0.631326,-1.104445,-0.850616,-0.000674,-1.104445,
+ ]
+ }
+ IndexedFaceSet {
+ coordIndex [
+0 1 5 4 -1
+0 3 2 1 -1 0 4 7 3 -1 1 2 6 5 -1 2 3 7 6 -1
+4 5 6 7 -1 8 12 15 11 17 130 -1 8 90 76 133 -1 8 130 91 90 -1
+8 133 9 13 12 -1 9 60 61 132 -1 9 132 16 134 10 14 13 -1 9 133 76 60 -1
+10 64 78 136 -1 10 134 63 64 -1 10 136 11 15 14 -1 11 94 93 17 -1
+11 136 78 94 -1 12 13 14 15 -1 16 62 63 134 -1 16 62 77 131 -1
+16 131 77 62 -1 16 132 61 62 -1 17 92 91 130 -1 17 93 92 135 -1
+17 135 131 77 92 -1 18 19 35 34 -1 18 33 128 -1 18 34 49 33 -1
+18 128 19 -1 19 20 36 35 -1 19 128 20 -1 20 21 37 36 -1
+20 128 21 -1 21 22 38 37 -1 21 128 22 -1 22 23 39 38 -1
+22 128 23 -1 23 24 40 39 -1 23 128 24 -1 24 25 41 40 -1
+24 128 25 -1 25 26 42 41 -1 25 128 26 -1 26 27 43 42 -1
+26 128 27 -1 27 28 44 43 -1 27 128 28 -1 28 29 45 44 -1
+28 128 29 -1 29 30 46 45 -1 29 128 30 -1 30 31 47 46 -1
+30 128 31 -1 31 32 48 47 -1 31 128 32 -1 32 33 49 48 -1
+32 128 33 -1 34 35 51 50 -1 34 50 65 49 -1 35 36 52 51 -1
+36 37 53 52 -1 37 38 54 53 -1 38 39 55 54 -1 39 40 56 55 -1
+40 41 57 56 -1 41 42 58 57 -1 42 43 59 58 -1 43 44 60 59 -1
+44 45 61 60 -1 45 46 62 61 -1 46 47 63 62 -1 47 48 64 63 -1
+48 49 65 64 -1 50 51 67 66 -1 50 66 79 65 -1 51 52 68 67 -1
+52 53 69 68 -1 53 54 70 69 -1 54 55 71 70 -1 55 56 72 71 -1
+56 57 73 72 -1 57 58 74 73 -1 58 59 75 74 -1 59 60 76 75 -1
+64 65 79 78 -1 66 67 81 80 -1 66 80 95 79 -1 67 68 82 81 -1
+68 69 83 82 -1 69 70 84 83 -1 70 71 85 84 -1 71 72 86 85 -1
+72 73 87 86 -1 73 74 88 87 -1 74 75 89 88 -1 75 76 90 89 -1
+77 131 135 92 -1 78 79 95 94 -1 80 81 97 96 -1 80 96 111 95 -1
+81 82 98 97 -1 82 83 99 98 -1 83 84 100 99 -1 84 85 101 100 -1
+85 86 102 101 -1 86 87 103 102 -1 87 88 104 103 -1 88 89 105 104 -1
+89 90 106 105 -1 90 91 107 106 -1 91 92 108 107 -1 92 93 109 108 -1
+93 94 110 109 -1 94 95 111 110 -1 96 97 113 112 -1 96 112 127 111 -1
+97 98 114 113 -1 98 99 115 114 -1 99 100 116 115 -1 100 101 117 116 -1
+101 102 118 117 -1 102 103 119 118 -1 103 104 120 119 -1 104 105 121 120 -1
+105 106 122 121 -1 106 107 123 122 -1 107 108 124 123 -1 108 109 125 124 -1
+109 110 126 125 -1 110 111 127 126 -1 112 113 129 -1 112 129 127 -1
+113 114 129 -1 114 115 129 -1 115 116 129 -1 116 117 129 -1
+117 118 129 -1 118 119 129 -1 119 120 129 -1 120 121 129 -1
+121 122 129 -1 122 123 129 -1 123 124 129 -1 124 125 129 -1
+125 126 129 -1 126 127 129 -1 137 138 142 141 -1 137 140 139 138 -1
+137 141 144 140 -1 138 139 143 142 -1 139 140 144 143 -1 141 142 143 144 -1
+
+ ]
+ }
+}
diff --git a/tool_src/makeodt/test_ship2.vrml~ b/tool_src/makeodt/test_ship2.vrml~
new file mode 100755
index 0000000..c535b1e
--- /dev/null
+++ b/tool_src/makeodt/test_ship2.vrml~
@@ -0,0 +1,52 @@
+#VRML V1.0 ascii
+Separator {
+ Coordinate3 {
+ point [
+0.846830, -0.000674, -0.004765, 0.846830, 0.631326, -0.004765, 0.99471, 0.631326, -0.004765, 0.994718, -0.000674, -0.004765, 0.846830, -0.000674, -1.104445, 0.846830, 0.631326, -1.104445, 0.994718, 0.631326, -1.104445, 0.994718, -0.000674, -1.104445, -1.000000, 0.005170, 1.986667, -1.000000, 0.627719, 1.986667, 1.000000, 0.627719, 1.986667, 1.000000, 0.005170, 1.986667, -1.000000, 0.005170, -0.013333, -1.000000, 0.627719, -0.013333, 1.000000, 0.627719, -0.013333, 1.000000, 0.005170, -0.013333, 0.000000, 0.627719, 1.986667, 0.000000, 0.005170, 1.986667, 0.382683, 1.259880, 2.885333, 0.353553, 1.259880, 3.031780, 0.270598, 1.259880, 3.155931, 0.146447, 1.259880, 3.238887, 0.000000, 1.259880, 3.268017, -0.146447, 1.259880, 3.238887, -0.270598, 1.259880, 3.155931, -0.353553, 1.259880, 3.031780, -0.382683, 1.259880, 2.885333, -0.353553, 1.259880, 2.738887, -0.270598, 1.259880, 2.614735, -0.146447, 1.259880, 2.531780, -0.000000, 1.259880, 2.502650, 0.146447, 1.259880, 2.531780, 0.270598, 1.259880, 2.614735, 0.353553, 1.259880, 2.738887, 0.707107, 1.043107, 2.885333, 0.653281, 1.043107, 3.155931, 0.500000, 1.043107, 3.385333, 0.270598, 1.043107, 3.538615, 0.000000, 1.043107, 3.592440, -0.270598, 1.043107, 3.538615, -0.500000, 1.043107, 3.385333, -0.653281, 1.043107, 3.155931, -0.707107, 1.043107, 2.885333, -0.653281, 1.043107, 2.614735, -0.500000, 1.043107, 2.385333, -0.270598, 1.043107, 2.232052, -0.000000, 1.043107, 2.178227, 0.270598, 1.043107, 2.232052, 0.500000, 1.043107, 2.385333, 0.653281, 1.043107, 2.614735, 0.923880, 0.718683, 2.885333, 0.853553, 0.718683, 3.238887, 0.653281, 0.718683, 3.538615, 0.353553, 0.718683, 3.738887, 0.000000, 0.718683, 3.809213, -0.353553, 0.718683, 3.738887, -0.653281, 0.718683, 3.538615, -0.853553, 0.718683, 3.238887, -0.923880, 0.718683, 2.885333, -0.853553, 0.718683, 2.531780, -0.653281, 0.718683, 2.232052, -0.353553, 0.718683, 2.031780, -0.000000, 0.718683, 1.961454, 0.353553, 0.718683, 2.031780, 0.653281, 0.718683, 2.232052, 0.853553, 0.718683, 2.531780, 1.000000, 0.336000, 2.885333, 0.923880, 0.336000, 3.268017, 0.707107, 0.336000, 3.592440, 0.382683, 0.336000, 3.809213, 0.000000, 0.336000, 3.885333, -0.382683, 0.336000, 3.809213, -0.707107, 0.336000, 3.592440, -0.923880, 0.336000, 3.268017, -1.000000, 0.336000, 2.885333, -0.923880, 0.336000, 2.502650, -0.707107, 0.336000, 2.178227, -0.000000, 0.336000, 1.885333, 0.707107, 0.336000, 2.178227, 0.923880, 0.336000, 2.502650, 0.923880, -0.046683, 2.885333, 0.853553, -0.046683, 3.238887, 0.653281, -0.046683, 3.538615, 0.353553, -0.046683, 3.738887, 0.000000, -0.046683, 3.809213, -0.353553, -0.046683, 3.738887, -0.653281, -0.046683, 3.538615, -0.853553, -0.046683, 3.238887, -0.923880, -0.046683, 2.885333, -0.853553, -0.046683, 2.531780, -0.653281, -0.046683, 2.232052, -0.353553, -0.046683, 2.031780, -0.000000, -0.046683, 1.961454, 0.353553, -0.046683, 2.031780, 0.653281, -0.046683, 2.232052, 0.853553, -0.046683, 2.531780, 0.707107, -0.371107, 2.885333, 0.653281, -0.371107, 3.155931, 0.500000, -0.371107, 3.385333, 0.270598, -0.371107, 3.538615, 0.000000, -0.371107, 3.592440, -0.270598, -0.371107, 3.538615, -0.500000, -0.371107, 3.385333, -0.653281, -0.371107, 3.155931, -0.707107, -0.371107, 2.885333, -0.653281, -0.371107, 2.614735, -0.500000, -0.371107, 2.385333, -0.270598, -0.371107, 2.232052, -0.000000, -0.371107, 2.178227, 0.270598, -0.371107, 2.232052, 0.500000, -0.371107, 2.385333, 0.653281, -0.371107, 2.614735, 0.382683, -0.587880, 2.885333, 0.353553, -0.587880, 3.031780, 0.270598, -0.587880, 3.155931, 0.146447, -0.587880, 3.238887, 0.000000, -0.587880, 3.268017, -0.146447, -0.587880, 3.238887, -0.270598, -0.587880, 3.155931, -0.353553, -0.587880, 3.031780, -0.382683, -0.587880, 2.885333, -0.353553, -0.587880, 2.738887, -0.270598, -0.587880, 2.614735, -0.146447, -0.587880, 2.531780, -0.000000, -0.587880, 2.502650, 0.146447, -0.587880, 2.531780, 0.270598, -0.587880, 2.614735, 0.353553, -0.587880, 2.738887, 0.000000, 1.336000, 2.885333, 0.000000, -0.664000, 2.885333, -0.500000, 0.005170, 1.986667, 0.000000, 0.316444, 1.986667, -0.500000, 0.627719, 1.986667, -1.000000, 0.316444, 1.986667, 0.500000, 0.627719, 1.986667, 0.000000, 0.160807, 1.986667, 1.000000, 0.316444, 1.986667, -0.998504, -0.000674, -0.004765, -0.998504, 0.631326, -0.004765, -0.850616, 0.631326, -0.004765, -0.850616, -0.000674, -0.004765, -0.998504, -0.000674, -1.104445, -0.998504, 0.631326, -1.104445, -0.850616, 0.631326, -1.104445, -0.850616, -0.000674, -1.104445,
+ ]
+ }
+ IndexedFaceSet {
+ coordIndex [
+0 1 5 4 -1
+0 3 2 1 -1 0 4 7 3 -1 1 2 6 5 -1 2 3 7 6 -1
+4 5 6 7 -1 8 12 15 11 17 130 -1 8 90 76 133 -1 8 130 91 90 -1
+8 133 9 13 12 -1 9 60 61 132 -1 9 132 16 134 10 14 13 -1 9 133 76 60 -1
+10 64 78 136 -1 10 134 63 64 -1 10 136 11 15 14 -1 11 94 93 17 -1
+11 136 78 94 -1 12 13 14 15 -1 16 62 63 134 -1 16 62 77 131 -1
+16 131 77 62 -1 16 132 61 62 -1 17 92 91 130 -1 17 93 92 135 -1
+17 135 131 77 92 -1 18 19 35 34 -1 18 33 128 -1 18 34 49 33 -1
+18 128 19 -1 19 20 36 35 -1 19 128 20 -1 20 21 37 36 -1
+20 128 21 -1 21 22 38 37 -1 21 128 22 -1 22 23 39 38 -1
+22 128 23 -1 23 24 40 39 -1 23 128 24 -1 24 25 41 40 -1
+24 128 25 -1 25 26 42 41 -1 25 128 26 -1 26 27 43 42 -1
+26 128 27 -1 27 28 44 43 -1 27 128 28 -1 28 29 45 44 -1
+28 128 29 -1 29 30 46 45 -1 29 128 30 -1 30 31 47 46 -1
+30 128 31 -1 31 32 48 47 -1 31 128 32 -1 32 33 49 48 -1
+32 128 33 -1 34 35 51 50 -1 34 50 65 49 -1 35 36 52 51 -1
+36 37 53 52 -1 37 38 54 53 -1 38 39 55 54 -1 39 40 56 55 -1
+40 41 57 56 -1 41 42 58 57 -1 42 43 59 58 -1 43 44 60 59 -1
+44 45 61 60 -1 45 46 62 61 -1 46 47 63 62 -1 47 48 64 63 -1
+48 49 65 64 -1 50 51 67 66 -1 50 66 79 65 -1 51 52 68 67 -1
+52 53 69 68 -1 53 54 70 69 -1 54 55 71 70 -1 55 56 72 71 -1
+56 57 73 72 -1 57 58 74 73 -1 58 59 75 74 -1 59 60 76 75 -1
+64 65 79 78 -1 66 67 81 80 -1 66 80 95 79 -1 67 68 82 81 -1
+68 69 83 82 -1 69 70 84 83 -1 70 71 85 84 -1 71 72 86 85 -1
+72 73 87 86 -1 73 74 88 87 -1 74 75 89 88 -1 75 76 90 89 -1
+77 131 135 92 -1 78 79 95 94 -1 80 81 97 96 -1 80 96 111 95 -1
+81 82 98 97 -1 82 83 99 98 -1 83 84 100 99 -1 84 85 101 100 -1
+85 86 102 101 -1 86 87 103 102 -1 87 88 104 103 -1 88 89 105 104 -1
+89 90 106 105 -1 90 91 107 106 -1 91 92 108 107 -1 92 93 109 108 -1
+93 94 110 109 -1 94 95 111 110 -1 96 97 113 112 -1 96 112 127 111 -1
+97 98 114 113 -1 98 99 115 114 -1 99 100 116 115 -1 100 101 117 116 -1
+101 102 118 117 -1 102 103 119 118 -1 103 104 120 119 -1 104 105 121 120 -1
+105 106 122 121 -1 106 107 123 122 -1 107 108 124 123 -1 108 109 125 124 -1
+109 110 126 125 -1 110 111 127 126 -1 112 113 129 -1 112 129 127 -1
+113 114 129 -1 114 115 129 -1 115 116 129 -1 116 117 129 -1
+117 118 129 -1 118 119 129 -1 119 120 129 -1 120 121 129 -1
+121 122 129 -1 122 123 129 -1 123 124 129 -1 124 125 129 -1
+125 126 129 -1 126 127 129 -1 137 138 142 141 -1 137 140 139 138 -1
+137 141 144 140 -1 138 139 143 142 -1 139 140 144 143 -1 141 142 143 144 -1
+
+ ]
+ }
+}
diff --git a/tool_src/makeodt/test_ship~ b/tool_src/makeodt/test_ship~
new file mode 100755
index 0000000..175051d
--- /dev/null
+++ b/tool_src/makeodt/test_ship~
@@ -0,0 +1,649 @@
+#VRML V1.0 ascii
+DEF cube1_copy3 Transform {
+ Shape {
+ appearance Appearance {
+ material DEF default Material {
+ diffuseColor 0.7898538076923077 0.8133333333333334 0.6940444444444445
+ emissiveColor 0.0 0.0 0.0
+ specularColor 1.0 1.0 1.0
+ ambientIntensity 0.765743861823362
+ transparency 0.0
+ shininess 1.0
+ }
+ }
+ geometry IndexedFaceSet {
+ normalPerVertex TRUE
+ coord Coordinate { point [
+ 0.8468295871412848 -6.73734278962182e-4 -0.004764781349210434,
+ 0.8468295871412848 0.6313262657210368 -0.004764781349210434,
+ 0.9947175871412842 0.6313262657210368 -0.004764781349210434,
+ 0.9947175871412842 -6.73734278962182e-4 -0.004764781349210434,
+ 0.8468295871412848 -6.73734278962182e-4 -1.1044447813492089,
+ 0.8468295871412848 0.6313262657210368 -1.1044447813492089,
+ 0.9947175871412842 0.6313262657210368 -1.1044447813492089,
+ 0.9947175871412842 -6.73734278962182e-4 -1.1044447813492089 ] }
+ coordIndex [
+ 0, 1, 5, 4, -1,
+ 0, 3, 2, 1, -1,
+ 0, 4, 7, 3, -1,
+ 1, 2, 6, 5, -1,
+ 2, 3, 7, 6, -1,
+ 4, 5, 6, 7, -1 ]
+ normal Normal { vector [
+ -0.5773502691896258 -0.5773502691896258 0.5773502691896258,
+ -0.5773502691896258 0.5773502691896258 0.5773502691896258,
+ 0.5773502691896258 0.5773502691896258 0.5773502691896258,
+ 0.5773502691896258 -0.5773502691896258 0.5773502691896258,
+ -0.5773502691896258 -0.5773502691896258 -0.5773502691896258,
+ -0.5773502691896258 0.5773502691896258 -0.5773502691896258,
+ 0.5773502691896258 0.5773502691896258 -0.5773502691896258,
+ 0.5773502691896258 -0.5773502691896258 -0.5773502691896258 ] }
+ normalIndex [
+ 0, 1, 5, 4, -1,
+ 0, 3, 2, 1, -1,
+ 0, 4, 7, 3, -1,
+ 1, 2, 6, 5, -1,
+ 2, 3, 7, 6, -1,
+ 4, 5, 6, 7, -1 ]
+ }
+ }
+}
+
+DEF cube2 Transform {
+ Shape {
+ appearance Appearance {
+ material USE default
+ }
+ geometry IndexedFaceSet {
+ normalPerVertex TRUE
+ coord Coordinate { point [
+ -0.9999999999999999 0.005169841948445655 1.9866666666666666,
+ -0.9999999999999999 0.6277190469404448 1.9866666666666666,
+ 1.0 0.6277190469404448 1.9866666666666666,
+ 1.0 0.005169841948445655 1.9866666666666666,
+ -0.9999999999999999 0.005169841948445655 -0.013333333333333607,
+ -0.9999999999999999 0.6277190469404448 -0.013333333333333607,
+ 1.0 0.6277190469404448 -0.013333333333333607,
+ 1.0 0.005169841948445655 -0.013333333333333607,
+ 1.1102230246251565e-16 0.6277190469404448 1.9866666666666666,
+ 1.1102230246251565e-16 0.005169841948445655 1.9866666666666666,
+ 0.3826834323650898 1.2598795325112868 2.885333333333333,
+ 0.3535533905932738 1.2598795325112868 3.031779942740059,
+ 0.2705980500730985 1.2598795325112868 3.1559313834064318,
+ 0.14644660940672627 1.2598795325112868 3.238886723926607,
+ 2.3432602026631493e-17 1.2598795325112868 3.2680167656984227,
+ -0.1464466094067262 1.2598795325112868 3.238886723926607,
+ -0.27059805007309845 1.2598795325112868 3.1559313834064318,
+ -0.3535533905932738 1.2598795325112868 3.0317799427400596,
+ -0.3826834323650898 1.2598795325112868 2.885333333333333,
+ -0.3535533905932738 1.2598795325112868 2.738886723926607,
+ -0.27059805007309856 1.2598795325112868 2.6147352832602344,
+ -0.14644660940672646 1.2598795325112868 2.5317799427400596,
+ -7.029780607989448e-17 1.2598795325112868 2.5026499009682435,
+ 0.14644660940672632 1.2598795325112868 2.5317799427400596,
+ 0.27059805007309845 1.2598795325112868 2.6147352832602344,
+ 0.3535533905932737 1.2598795325112868 2.7388867239266066,
+ 0.7071067811865475 1.0431067811865478 2.885333333333333,
+ 0.6532814824381882 1.0431067811865478 3.1559313834064318,
+ 0.5 1.0431067811865478 3.385333333333333,
+ 0.2705980500730985 1.0431067811865478 3.5386148157715214,
+ 4.329780281177466e-17 1.0431067811865478 3.5924401145198805,
+ -0.27059805007309845 1.0431067811865478 3.5386148157715214,
+ -0.4999999999999999 1.0431067811865478 3.385333333333333,
+ -0.6532814824381882 1.0431067811865478 3.1559313834064318,
+ -0.7071067811865475 1.0431067811865478 2.885333333333333,
+ -0.6532814824381883 1.0431067811865478 2.614735283260235,
+ -0.5000000000000001 1.0431067811865478 2.385333333333333,
+ -0.2705980500730989 1.0431067811865478 2.232051850895145,
+ -1.2989340843532398e-16 1.0431067811865478 2.1782265521467856,
+ 0.2705980500730986 1.0431067811865478 2.232051850895145,
+ 0.49999999999999983 1.0431067811865478 2.385333333333333,
+ 0.6532814824381881 1.0431067811865478 2.6147352832602344,
+ 0.9238795325112867 0.7186834323650899 2.885333333333333,
+ 0.8535533905932737 0.7186834323650899 3.238886723926607,
+ 0.6532814824381883 0.7186834323650899 3.5386148157715214,
+ 0.35355339059327384 0.7186834323650899 3.7388867239266066,
+ 5.657130561438501e-17 0.7186834323650899 3.8092128658446196,
+ -0.35355339059327373 0.7186834323650899 3.7388867239266066,
+ -0.6532814824381882 0.7186834323650899 3.5386148157715214,
+ -0.8535533905932737 0.7186834323650899 3.238886723926607,
+ -0.9238795325112867 0.7186834323650899 2.885333333333333,
+ -0.8535533905932738 0.7186834323650899 2.5317799427400596,
+ -0.6532814824381884 0.7186834323650899 2.232051850895145,
+ -0.3535533905932743 0.7186834323650899 2.0317799427400596,
+ -1.6971391684315505e-16 0.7186834323650899 1.9614538008220463,
+ 0.35355339059327395 0.7186834323650899 2.0317799427400596,
+ 0.6532814824381881 0.7186834323650899 2.232051850895145,
+ 0.8535533905932735 0.7186834323650899 2.5317799427400587,
+ 1.0 0.3360000000000002 2.885333333333333,
+ 0.9238795325112867 0.3360000000000002 3.2680167656984227,
+ 0.7071067811865476 0.3360000000000002 3.5924401145198805,
+ 0.38268343236508984 0.3360000000000002 3.8092128658446196,
+ 6.123233995736766e-17 0.3360000000000002 3.885333333333333,
+ -0.3826834323650897 0.3360000000000002 3.8092128658446196,
+ -0.7071067811865475 0.3360000000000002 3.5924401145198805,
+ -0.9238795325112867 0.3360000000000002 3.268016765698423,
+ -1.0 0.3360000000000002 2.885333333333333,
+ -0.9238795325112868 0.3360000000000002 2.5026499009682435,
+ -0.7071067811865477 0.3360000000000002 2.1782265521467856,
+ -1.8369701987210297e-16 0.3360000000000002 1.885333333333333,
+ 0.7071067811865474 0.3360000000000002 2.1782265521467856,
+ 0.9238795325112865 0.3360000000000002 2.5026499009682426,
+ 0.9238795325112867 -0.046683432365089594 2.885333333333333,
+ 0.8535533905932737 -0.046683432365089594 3.238886723926607,
+ 0.6532814824381883 -0.046683432365089594 3.5386148157715214,
+ 0.35355339059327384 -0.046683432365089594 3.7388867239266066,
+ 5.657130561438501e-17 -0.046683432365089594 3.8092128658446196,
+ -0.35355339059327373 -0.046683432365089594 3.7388867239266066,
+ -0.6532814824381882 -0.046683432365089594 3.5386148157715214,
+ -0.8535533905932737 -0.046683432365089594 3.238886723926607,
+ -0.9238795325112867 -0.046683432365089594 2.885333333333333,
+ -0.8535533905932738 -0.046683432365089594 2.5317799427400596,
+ -0.6532814824381884 -0.046683432365089594 2.232051850895145,
+ -0.3535533905932743 -0.046683432365089594 2.0317799427400596,
+ -1.6971391684315505e-16 -0.046683432365089594 1.9614538008220463,
+ 0.35355339059327395 -0.046683432365089594 2.0317799427400596,
+ 0.6532814824381881 -0.046683432365089594 2.232051850895145,
+ 0.8535533905932735 -0.046683432365089594 2.5317799427400587,
+ 0.7071067811865476 -0.37110678118654733 2.885333333333333,
+ 0.6532814824381883 -0.37110678118654733 3.1559313834064318,
+ 0.5000000000000001 -0.37110678118654733 3.385333333333333,
+ 0.27059805007309856 -0.37110678118654733 3.5386148157715214,
+ 4.329780281177467e-17 -0.37110678118654733 3.5924401145198805,
+ -0.2705980500730985 -0.37110678118654733 3.5386148157715214,
+ -0.5 -0.37110678118654733 3.385333333333333,
+ -0.6532814824381883 -0.37110678118654733 3.1559313834064318,
+ -0.7071067811865476 -0.37110678118654733 2.885333333333333,
+ -0.6532814824381884 -0.37110678118654733 2.6147352832602344,
+ -0.5000000000000001 -0.37110678118654733 2.385333333333333,
+ -0.2705980500730989 -0.37110678118654733 2.232051850895145,
+ -1.29893408435324e-16 -0.37110678118654733 2.1782265521467856,
+ 0.2705980500730987 -0.37110678118654733 2.232051850895145,
+ 0.4999999999999999 -0.37110678118654733 2.385333333333333,
+ 0.6532814824381882 -0.37110678118654733 2.614735283260234,
+ 0.3826834323650899 -0.5878795325112867 2.885333333333333,
+ 0.35355339059327384 -0.5878795325112867 3.0317799427400596,
+ 0.2705980500730986 -0.5878795325112867 3.1559313834064318,
+ 0.1464466094067263 -0.5878795325112867 3.238886723926607,
+ 2.34326020266315e-17 -0.5878795325112867 3.268016765698423,
+ -0.14644660940672627 -0.5878795325112867 3.238886723926607,
+ -0.27059805007309856 -0.5878795325112867 3.1559313834064318,
+ -0.35355339059327384 -0.5878795325112867 3.0317799427400596,
+ -0.3826834323650899 -0.5878795325112867 2.885333333333333,
+ -0.3535533905932739 -0.5878795325112867 2.738886723926607,
+ -0.2705980500730986 -0.5878795325112867 2.6147352832602344,
+ -0.1464466094067265 -0.5878795325112867 2.531779942740059,
+ -7.029780607989449e-17 -0.5878795325112867 2.502649900968243,
+ 0.14644660940672638 -0.5878795325112867 2.531779942740059,
+ 0.2705980500730985 -0.5878795325112867 2.6147352832602344,
+ 0.3535533905932738 -0.5878795325112867 2.7388867239266066,
+ 0.0 1.336 2.885333333333333,
+ 0.0 -0.6639999999999999 2.885333333333333,
+ -0.4999999999999999 0.005169841948445655 1.9866666666666666,
+ 1.1102230246251565e-16 0.3164444444444452 1.9866666666666666,
+ -0.4999999999999999 0.6277190469404448 1.9866666666666666,
+ -0.9999999999999999 0.3164444444444452 1.9866666666666666,
+ 0.5 0.6277190469404448 1.9866666666666666,
+ 1.1102230246251565e-16 0.16080714319644543 1.9866666666666666,
+ 1.0 0.3164444444444452 1.9866666666666666 ] }
+ coordIndex [
+ 0, 4, 7, 3, 9, 122, -1,
+ 0, 82, 68, 125, -1,
+ 0, 122, 83, 82, -1,
+ 0, 125, 1, 5, 4, -1,
+ 1, 52, 53, 124, -1,
+ 1, 124, 8, 126, 2, 6, 5, -1,
+ 1, 125, 68, 52, -1,
+ 2, 56, 70, 128, -1,
+ 2, 126, 55, 56, -1,
+ 2, 128, 3, 7, 6, -1,
+ 3, 86, 85, 9, -1,
+ 3, 128, 70, 86, -1,
+ 4, 5, 6, 7, -1,
+ 8, 54, 55, 126, -1,
+ 8, 54, 69, 123, -1,
+ 8, 123, 69, 54, -1,
+ 8, 124, 53, 54, -1,
+ 9, 84, 83, 122, -1,
+ 9, 85, 84, 127, -1,
+ 9, 127, 123, 69, 84, -1,
+ 10, 11, 27, 26, -1,
+ 10, 25, 120, -1,
+ 10, 26, 41, 25, -1,
+ 10, 120, 11, -1,
+ 11, 12, 28, 27, -1,
+ 11, 120, 12, -1,
+ 12, 13, 29, 28, -1,
+ 12, 120, 13, -1,
+ 13, 14, 30, 29, -1,
+ 13, 120, 14, -1,
+ 14, 15, 31, 30, -1,
+ 14, 120, 15, -1,
+ 15, 16, 32, 31, -1,
+ 15, 120, 16, -1,
+ 16, 17, 33, 32, -1,
+ 16, 120, 17, -1,
+ 17, 18, 34, 33, -1,
+ 17, 120, 18, -1,
+ 18, 19, 35, 34, -1,
+ 18, 120, 19, -1,
+ 19, 20, 36, 35, -1,
+ 19, 120, 20, -1,
+ 20, 21, 37, 36, -1,
+ 20, 120, 21, -1,
+ 21, 22, 38, 37, -1,
+ 21, 120, 22, -1,
+ 22, 23, 39, 38, -1,
+ 22, 120, 23, -1,
+ 23, 24, 40, 39, -1,
+ 23, 120, 24, -1,
+ 24, 25, 41, 40, -1,
+ 24, 120, 25, -1,
+ 26, 27, 43, 42, -1,
+ 26, 42, 57, 41, -1,
+ 27, 28, 44, 43, -1,
+ 28, 29, 45, 44, -1,
+ 29, 30, 46, 45, -1,
+ 30, 31, 47, 46, -1,
+ 31, 32, 48, 47, -1,
+ 32, 33, 49, 48, -1,
+ 33, 34, 50, 49, -1,
+ 34, 35, 51, 50, -1,
+ 35, 36, 52, 51, -1,
+ 36, 37, 53, 52, -1,
+ 37, 38, 54, 53, -1,
+ 38, 39, 55, 54, -1,
+ 39, 40, 56, 55, -1,
+ 40, 41, 57, 56, -1,
+ 42, 43, 59, 58, -1,
+ 42, 58, 71, 57, -1,
+ 43, 44, 60, 59, -1,
+ 44, 45, 61, 60, -1,
+ 45, 46, 62, 61, -1,
+ 46, 47, 63, 62, -1,
+ 47, 48, 64, 63, -1,
+ 48, 49, 65, 64, -1,
+ 49, 50, 66, 65, -1,
+ 50, 51, 67, 66, -1,
+ 51, 52, 68, 67, -1,
+ 56, 57, 71, 70, -1,
+ 58, 59, 73, 72, -1,
+ 58, 72, 87, 71, -1,
+ 59, 60, 74, 73, -1,
+ 60, 61, 75, 74, -1,
+ 61, 62, 76, 75, -1,
+ 62, 63, 77, 76, -1,
+ 63, 64, 78, 77, -1,
+ 64, 65, 79, 78, -1,
+ 65, 66, 80, 79, -1,
+ 66, 67, 81, 80, -1,
+ 67, 68, 82, 81, -1,
+ 69, 123, 127, 84, -1,
+ 70, 71, 87, 86, -1,
+ 72, 73, 89, 88, -1,
+ 72, 88, 103, 87, -1,
+ 73, 74, 90, 89, -1,
+ 74, 75, 91, 90, -1,
+ 75, 76, 92, 91, -1,
+ 76, 77, 93, 92, -1,
+ 77, 78, 94, 93, -1,
+ 78, 79, 95, 94, -1,
+ 79, 80, 96, 95, -1,
+ 80, 81, 97, 96, -1,
+ 81, 82, 98, 97, -1,
+ 82, 83, 99, 98, -1,
+ 83, 84, 100, 99, -1,
+ 84, 85, 101, 100, -1,
+ 85, 86, 102, 101, -1,
+ 86, 87, 103, 102, -1,
+ 88, 89, 105, 104, -1,
+ 88, 104, 119, 103, -1,
+ 89, 90, 106, 105, -1,
+ 90, 91, 107, 106, -1,
+ 91, 92, 108, 107, -1,
+ 92, 93, 109, 108, -1,
+ 93, 94, 110, 109, -1,
+ 94, 95, 111, 110, -1,
+ 95, 96, 112, 111, -1,
+ 96, 97, 113, 112, -1,
+ 97, 98, 114, 113, -1,
+ 98, 99, 115, 114, -1,
+ 99, 100, 116, 115, -1,
+ 100, 101, 117, 116, -1,
+ 101, 102, 118, 117, -1,
+ 102, 103, 119, 118, -1,
+ 104, 105, 121, -1,
+ 104, 121, 119, -1,
+ 105, 106, 121, -1,
+ 106, 107, 121, -1,
+ 107, 108, 121, -1,
+ 108, 109, 121, -1,
+ 109, 110, 121, -1,
+ 110, 111, 121, -1,
+ 111, 112, 121, -1,
+ 112, 113, 121, -1,
+ 113, 114, 121, -1,
+ 114, 115, 121, -1,
+ 115, 116, 121, -1,
+ 116, 117, 121, -1,
+ 117, 118, 121, -1,
+ 118, 119, 121, -1 ]
+ normal Normal { vector [
+ -0.6240633571449417 -0.7485126584990751 0.2242180330295314,
+ -0.650954127081745 0.7404676088514826 0.1672317095440063,
+ 0.650954127081745 0.7404676088514826 0.16723170954400657,
+ 0.6318942805859536 -0.751054552590261 0.19138097396607326,
+ -0.5773502691896258 -0.5773502691896258 -0.5773502691896258,
+ -0.5773502691896258 0.5773502691896258 -0.5773502691896258,
+ 0.5773502691896258 0.5773502691896258 -0.5773502691896258,
+ 0.5773502691896258 -0.5773502691896258 -0.5773502691896258,
+ 0.0 0.565148350259218 -0.8249892982331858,
+ -0.23500029272775183 -0.6317521592780225 -0.7386907821716926,
+ 0.38219483938718757 0.9240817630198109 -2.1651891604597196e-16,
+ 0.3531019895412615 0.9240817630198108 0.14625963296891295,
+ 0.2702525626651842 0.9240817630198107 0.27025256266518366,
+ 0.14625963296891326 0.9240817630198107 0.3531019895412615,
+ -3.5494904269831466e-18 0.9240817630198109 0.3821948393871877,
+ -0.1462596329689133 0.9240817630198109 0.3531019895412611,
+ -0.27025256266518427 0.9240817630198107 0.2702525626651838,
+ -0.3531019895412614 0.9240817630198107 0.14625963296891334,
+ -0.3821948393871877 0.9240817630198109 -5.3242356404747206e-17,
+ -0.35310198954126143 0.9240817630198108 -0.146259632968913,
+ -0.27025256266518427 0.9240817630198108 -0.27025256266518355,
+ -0.14625963296891334 0.9240817630198107 -0.35310198954126143,
+ 1.4197961707932586e-17 0.9240817630198109 -0.3821948393871877,
+ 0.14625963296891342 0.9240817630198109 -0.3531019895412611,
+ 0.2702525626651843 0.9240817630198107 -0.2702525626651838,
+ 0.35310198954126126 0.9240817630198108 -0.14625963296891348,
+ 0.7065844951662994 0.7076286817184462 -1.3574214643678983e-16,
+ 0.6527989530739642 0.7076286817184461 0.2703981798661935,
+ 0.4996306880133637 0.7076286817184461 0.49963068801336363,
+ 0.2703981798661935 0.707628681718446 0.6527989530739644,
+ 7.14432349667315e-18 0.707628681718446 0.7065844951662995,
+ -0.2703981798661935 0.7076286817184461 0.6527989530739644,
+ -0.49963068801336347 0.707628681718446 0.4996306880133637,
+ -0.6527989530739642 0.7076286817184461 0.27039817986619374,
+ -0.7065844951662994 0.7076286817184462 0.0,
+ -0.6527989530739643 0.7076286817184461 -0.2703981798661933,
+ -0.4996306880133637 0.7076286817184462 -0.4996306880133633,
+ -0.27039817986619363 0.7076286817184462 -0.6527989530739641,
+ 1.42886469933463e-17 0.7076286817184462 -0.7065844951662993,
+ 0.2703981798661937 0.7076286817184462 -0.6527989530739642,
+ 0.4996306880133635 0.7076286817184461 -0.4996306880133637,
+ 0.652798953073964 0.7076286817184461 -0.27039817986619386,
+ 0.9236821150189284 0.3831596930708646 -1.5098010521668608e-16,
+ 0.8533710006127241 0.38315969307086456 0.35347784218968914,
+ 0.6531418871906168 0.3831596930708645 0.6531418871906169,
+ 0.35347784218968903 0.38315969307086445 0.8533710006127243,
+ 7.189528819842194e-18 0.3831596930708645 0.9236821150189285,
+ -0.35347784218968903 0.3831596930708644 0.8533710006127243,
+ -0.6531418871906165 0.3831596930708646 0.653141887190617,
+ -0.853371000612724 0.3831596930708647 0.3534778421896893,
+ -0.9236821150189283 0.38315969307086467 3.594764409921097e-17,
+ -0.8533710006127242 0.38315969307086467 -0.35347784218968886,
+ -0.7223342359851773 0.5963875260285549 -0.3500788058726916,
+ -0.21775214356583708 0.5866924766250825 -0.7799845779526734,
+ 2.860287267299096e-17 0.3713065094700714 -0.9285103532137656,
+ 0.21775214356583705 0.5866924766250825 -0.7799845779526734,
+ 0.7223342359851772 0.5963875260285552 -0.3500788058726921,
+ 0.853371000612724 0.3831596930708647 -0.3534778421896896,
+ 1.0 1.4416425122373137e-17 -1.2974782610135823e-16,
+ 0.9238795325112867 7.208212561186569e-18 0.3826834323650898,
+ 0.7071067811865474 0.0 0.7071067811865476,
+ 0.3826834323650897 0.0 0.9238795325112867,
+ 0.0 0.0 1.0,
+ -0.3826834323650897 0.0 0.9238795325112867,
+ -0.7071067811865472 0.0 0.7071067811865479,
+ -0.9238795325112867 7.208212561186569e-18 0.38268343236509,
+ -1.0 2.1624637683559703e-17 2.883285024474627e-17,
+ -0.9238795325112868 1.4416425122373134e-17 -0.3826834323650895,
+ -0.979804198942987 -8.001428153710795e-5 0.1999593091891605,
+ 0.0 0.0 0.0,
+ 0.9798041989429871 -8.001428153710805e-5 0.19995930918916033,
+ 0.9238795325112865 2.1624637683559706e-17 -0.3826834323650903,
+ 0.9236821150189284 -0.38315969307086456 -1.150324611174751e-16,
+ 0.8533710006127242 -0.38315969307086456 0.35347784218968925,
+ 0.6531418871906167 -0.38315969307086445 0.653141887190617,
+ 0.35347784218968903 -0.38315969307086445 0.8533710006127243,
+ 0.0 -0.38315969307086456 0.9236821150189284,
+ -0.3534778421896891 -0.3831596930708645 0.8533710006127242,
+ -0.6531418871906165 -0.3831596930708645 0.6531418871906172,
+ -0.8533710006127241 -0.3831596930708646 0.35347784218968925,
+ -0.9236821150189284 -0.38315969307086456 5.751623055873755e-17,
+ -0.8533710006127242 -0.38315969307086456 -0.353477842189689,
+ -0.7206785268238779 -0.6196204571264978 -0.310954900404086,
+ -0.20878340774558274 -0.6418351695013081 -0.7378733657216316,
+ 0.07524776421035834 -0.273464800429631 -0.9589341879958835,
+ 0.3103679659015334 -0.4910959505070567 -0.8139388755537575,
+ 0.716861671283461 -0.610664583830416 -0.33644926853822693,
+ 0.853371000612724 -0.38315969307086456 -0.3534778421896897,
+ 0.7065844951662995 -0.7076286817184458 -9.287620545675093e-17,
+ 0.6527989530739644 -0.707628681718446 0.27039817986619374,
+ 0.4996306880133637 -0.7076286817184458 0.49963068801336386,
+ 0.2703981798661937 -0.7076286817184457 0.6527989530739646,
+ 0.0 -0.7076286817184456 0.7065844951662998,
+ -0.27039817986619374 -0.7076286817184457 0.6527989530739645,
+ -0.4996306880133637 -0.7076286817184458 0.49963068801336397,
+ -0.6527989530739644 -0.707628681718446 0.2703981798661938,
+ -0.7065844951662995 -0.7076286817184458 7.144323496673148e-17,
+ -0.6527989530739644 -0.7076286817184458 -0.2703981798661936,
+ -0.4996306880133638 -0.7076286817184458 -0.49963068801336363,
+ -0.2703981798661938 -0.707628681718446 -0.6527989530739644,
+ 3.572161748336574e-18 -0.7076286817184457 -0.7065844951662996,
+ 0.27039817986619386 -0.7076286817184457 -0.6527989530739644,
+ 0.49963068801336363 -0.7076286817184457 -0.49963068801336397,
+ 0.6527989530739642 -0.7076286817184458 -0.270398179866194,
+ 0.3821948393871877 -0.9240817630198108 -7.098980853966295e-18,
+ 0.3531019895412617 -0.9240817630198107 0.14625963296891312,
+ 0.2702525626651844 -0.9240817630198106 0.2702525626651842,
+ 0.1462596329689137 -0.9240817630198106 0.35310198954126193,
+ 0.0 -0.9240817630198107 0.38219483938718807,
+ -0.14625963296891378 -0.9240817630198106 0.35310198954126165,
+ -0.2702525626651844 -0.9240817630198106 0.2702525626651842,
+ -0.35310198954126165 -0.9240817630198107 0.14625963296891337,
+ -0.38219483938718785 -0.9240817630198108 -6.389082768569665e-17,
+ -0.3531019895412615 -0.9240817630198108 -0.14625963296891303,
+ -0.2702525626651844 -0.9240817630198106 -0.2702525626651839,
+ -0.14625963296891378 -0.9240817630198106 -0.3531019895412619,
+ -3.549490426983147e-18 -0.9240817630198107 -0.3821948393871882,
+ 0.14625963296891384 -0.9240817630198107 -0.35310198954126154,
+ 0.27025256266518444 -0.9240817630198106 -0.27025256266518427,
+ 0.3531019895412614 -0.9240817630198108 -0.14625963296891342,
+ -1.770039962878225e-18 1.0 -8.09793283016788e-17,
+ -1.41603197030258e-17 -1.0 2.389553949885604e-17,
+ -0.05434413215433992 -0.8828441771580279 -0.4665113869548697,
+ 0.0 0.0 0.0,
+ -0.0722585041213054 0.8311532080571771 -0.551328444140527,
+ -0.7892432490336516 -8.362826735961186e-5 0.6140806843250473,
+ 0.07225850412130536 0.8311532080571772 -0.5513284441405267,
+ 0.34814845525242477 0.40992601037208287 -0.8430618714695721,
+ 0.7892432490336513 -8.362826735961187e-5 0.6140806843250476 ] }
+ normalIndex [
+ 0, 4, 7, 3, 9, 122, -1,
+ 0, 82, 68, 125, -1,
+ 0, 122, 83, 82, -1,
+ 0, 125, 1, 5, 4, -1,
+ 1, 52, 53, 124, -1,
+ 1, 124, 8, 126, 2, 6, 5, -1,
+ 1, 125, 68, 52, -1,
+ 2, 56, 70, 128, -1,
+ 2, 126, 55, 56, -1,
+ 2, 128, 3, 7, 6, -1,
+ 3, 86, 85, 9, -1,
+ 3, 128, 70, 86, -1,
+ 4, 5, 6, 7, -1,
+ 8, 54, 55, 126, -1,
+ 8, 54, 69, 123, -1,
+ 8, 123, 69, 54, -1,
+ 8, 124, 53, 54, -1,
+ 9, 84, 83, 122, -1,
+ 9, 85, 84, 127, -1,
+ 9, 127, 123, 69, 84, -1,
+ 10, 11, 27, 26, -1,
+ 10, 25, 120, -1,
+ 10, 26, 41, 25, -1,
+ 10, 120, 11, -1,
+ 11, 12, 28, 27, -1,
+ 11, 120, 12, -1,
+ 12, 13, 29, 28, -1,
+ 12, 120, 13, -1,
+ 13, 14, 30, 29, -1,
+ 13, 120, 14, -1,
+ 14, 15, 31, 30, -1,
+ 14, 120, 15, -1,
+ 15, 16, 32, 31, -1,
+ 15, 120, 16, -1,
+ 16, 17, 33, 32, -1,
+ 16, 120, 17, -1,
+ 17, 18, 34, 33, -1,
+ 17, 120, 18, -1,
+ 18, 19, 35, 34, -1,
+ 18, 120, 19, -1,
+ 19, 20, 36, 35, -1,
+ 19, 120, 20, -1,
+ 20, 21, 37, 36, -1,
+ 20, 120, 21, -1,
+ 21, 22, 38, 37, -1,
+ 21, 120, 22, -1,
+ 22, 23, 39, 38, -1,
+ 22, 120, 23, -1,
+ 23, 24, 40, 39, -1,
+ 23, 120, 24, -1,
+ 24, 25, 41, 40, -1,
+ 24, 120, 25, -1,
+ 26, 27, 43, 42, -1,
+ 26, 42, 57, 41, -1,
+ 27, 28, 44, 43, -1,
+ 28, 29, 45, 44, -1,
+ 29, 30, 46, 45, -1,
+ 30, 31, 47, 46, -1,
+ 31, 32, 48, 47, -1,
+ 32, 33, 49, 48, -1,
+ 33, 34, 50, 49, -1,
+ 34, 35, 51, 50, -1,
+ 35, 36, 52, 51, -1,
+ 36, 37, 53, 52, -1,
+ 37, 38, 54, 53, -1,
+ 38, 39, 55, 54, -1,
+ 39, 40, 56, 55, -1,
+ 40, 41, 57, 56, -1,
+ 42, 43, 59, 58, -1,
+ 42, 58, 71, 57, -1,
+ 43, 44, 60, 59, -1,
+ 44, 45, 61, 60, -1,
+ 45, 46, 62, 61, -1,
+ 46, 47, 63, 62, -1,
+ 47, 48, 64, 63, -1,
+ 48, 49, 65, 64, -1,
+ 49, 50, 66, 65, -1,
+ 50, 51, 67, 66, -1,
+ 51, 52, 68, 67, -1,
+ 56, 57, 71, 70, -1,
+ 58, 59, 73, 72, -1,
+ 58, 72, 87, 71, -1,
+ 59, 60, 74, 73, -1,
+ 60, 61, 75, 74, -1,
+ 61, 62, 76, 75, -1,
+ 62, 63, 77, 76, -1,
+ 63, 64, 78, 77, -1,
+ 64, 65, 79, 78, -1,
+ 65, 66, 80, 79, -1,
+ 66, 67, 81, 80, -1,
+ 67, 68, 82, 81, -1,
+ 69, 123, 127, 84, -1,
+ 70, 71, 87, 86, -1,
+ 72, 73, 89, 88, -1,
+ 72, 88, 103, 87, -1,
+ 73, 74, 90, 89, -1,
+ 74, 75, 91, 90, -1,
+ 75, 76, 92, 91, -1,
+ 76, 77, 93, 92, -1,
+ 77, 78, 94, 93, -1,
+ 78, 79, 95, 94, -1,
+ 79, 80, 96, 95, -1,
+ 80, 81, 97, 96, -1,
+ 81, 82, 98, 97, -1,
+ 82, 83, 99, 98, -1,
+ 83, 84, 100, 99, -1,
+ 84, 85, 101, 100, -1,
+ 85, 86, 102, 101, -1,
+ 86, 87, 103, 102, -1,
+ 88, 89, 105, 104, -1,
+ 88, 104, 119, 103, -1,
+ 89, 90, 106, 105, -1,
+ 90, 91, 107, 106, -1,
+ 91, 92, 108, 107, -1,
+ 92, 93, 109, 108, -1,
+ 93, 94, 110, 109, -1,
+ 94, 95, 111, 110, -1,
+ 95, 96, 112, 111, -1,
+ 96, 97, 113, 112, -1,
+ 97, 98, 114, 113, -1,
+ 98, 99, 115, 114, -1,
+ 99, 100, 116, 115, -1,
+ 100, 101, 117, 116, -1,
+ 101, 102, 118, 117, -1,
+ 102, 103, 119, 118, -1,
+ 104, 105, 121, -1,
+ 104, 121, 119, -1,
+ 105, 106, 121, -1,
+ 106, 107, 121, -1,
+ 107, 108, 121, -1,
+ 108, 109, 121, -1,
+ 109, 110, 121, -1,
+ 110, 111, 121, -1,
+ 111, 112, 121, -1,
+ 112, 113, 121, -1,
+ 113, 114, 121, -1,
+ 114, 115, 121, -1,
+ 115, 116, 121, -1,
+ 116, 117, 121, -1,
+ 117, 118, 121, -1,
+ 118, 119, 121, -1 ]
+ }
+ }
+}
+
+DEF cube1 Transform {
+ Shape {
+ appearance Appearance {
+ material USE default
+ }
+ geometry IndexedFaceSet {
+ normalPerVertex TRUE
+ coord Coordinate { point [
+ -0.9985037461920492 -6.73734278962182e-4 -0.004764781349210434,
+ -0.9985037461920492 0.6313262657210368 -0.004764781349210434,
+ -0.8506157461920497 0.6313262657210368 -0.004764781349210434,
+ -0.8506157461920497 -6.73734278962182e-4 -0.004764781349210434,
+ -0.9985037461920492 -6.73734278962182e-4 -1.1044447813492089,
+ -0.9985037461920492 0.6313262657210368 -1.1044447813492089,
+ -0.8506157461920497 0.6313262657210368 -1.1044447813492089,
+ -0.8506157461920497 -6.73734278962182e-4 -1.1044447813492089 ] }
+ coordIndex [
+ 0, 1, 5, 4, -1,
+ 0, 3, 2, 1, -1,
+ 0, 4, 7, 3, -1,
+ 1, 2, 6, 5, -1,
+ 2, 3, 7, 6, -1,
+ 4, 5, 6, 7, -1 ]
+ normal Normal { vector [
+ -0.5773502691896258 -0.5773502691896258 0.5773502691896258,
+ -0.5773502691896258 0.5773502691896258 0.5773502691896258,
+ 0.5773502691896258 0.5773502691896258 0.5773502691896258,
+ 0.5773502691896258 -0.5773502691896258 0.5773502691896258,
+ -0.5773502691896258 -0.5773502691896258 -0.5773502691896258,
+ -0.5773502691896258 0.5773502691896258 -0.5773502691896258,
+ 0.5773502691896258 0.5773502691896258 -0.5773502691896258,
+ 0.5773502691896258 -0.5773502691896258 -0.5773502691896258 ] }
+ normalIndex [
+ 0, 1, 5, 4, -1,
+ 0, 3, 2, 1, -1,
+ 0, 4, 7, 3, -1,
+ 1, 2, 6, 5, -1,
+ 2, 3, 7, 6, -1,
+ 4, 5, 6, 7, -1 ]
+ }
+ }
+}
+