diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2026-08-24 11:16:07 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2026-08-24 11:16:07 +0200 |
| commit | c068f22329d5cc722622a2183bbb22eef2093df7 (patch) | |
| tree | 12d56c1aede67988a55e241364606bfbb4dba933 /tool_src/makeodt | |
| download | openparsec-c068f22329d5cc722622a2183bbb22eef2093df7.tar.xz openparsec-c068f22329d5cc722622a2183bbb22eef2093df7.zip | |
Diffstat (limited to 'tool_src/makeodt')
| -rw-r--r-- | tool_src/makeodt/COPYING | 482 | ||||
| -rw-r--r-- | tool_src/makeodt/Makefile | 18 | ||||
| -rw-r--r-- | tool_src/makeodt/getopt.cpp | 620 | ||||
| -rw-r--r-- | tool_src/makeodt/getopt.h | 78 | ||||
| -rwxr-xr-x | tool_src/makeodt/makeodt | bin | 0 -> 2023262 bytes | |||
| -rw-r--r-- | tool_src/makeodt/makeodt.cpp | 633 | ||||
| -rw-r--r-- | tool_src/makeodt/makeodt.h | 40 | ||||
| -rwxr-xr-x | tool_src/makeodt/makeodt.sln | 54 | ||||
| -rwxr-xr-x | tool_src/makeodt/makeodt.vcproj | 195 | ||||
| -rwxr-xr-x | tool_src/makeodt/makeodt.vcxproj | 159 | ||||
| -rwxr-xr-x | tool_src/makeodt/meshconv.exe | bin | 0 -> 361472 bytes | |||
| -rwxr-xr-x | tool_src/makeodt/planet1.wrl | 396 | ||||
| -rwxr-xr-x | tool_src/makeodt/test_ship | 526 | ||||
| -rwxr-xr-x | tool_src/makeodt/test_ship2.vrml | 52 | ||||
| -rwxr-xr-x | tool_src/makeodt/test_ship2.vrml~ | 52 | ||||
| -rwxr-xr-x | tool_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 Binary files differnew file mode 100755 index 0000000..39591b8 --- /dev/null +++ b/tool_src/makeodt/makeodt 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=""$/ParsecTools/makeodt", 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 Binary files differnew file mode 100755 index 0000000..bfd2b51 --- /dev/null +++ b/tool_src/makeodt/meshconv.exe 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 ] + } + } +} + |
