Added Ruben Lopez's Inventor/VRML 1.0 loader.
This commit is contained in:
3
AUTHORS
3
AUTHORS
@@ -114,7 +114,8 @@ Kristopher Bixler <kbixler@mac.com>
|
||||
Tino Schwarze <tino.schwarze@informatik.tu-chemnitz.de>
|
||||
-port to HP-UX.
|
||||
|
||||
|
||||
Ruben Lopez <ryu@gpul.org>
|
||||
- Inventor ascii/VRML 1.0 loader.
|
||||
Indirect Contributors
|
||||
---------------------
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ PLUGIN_DIRS = \
|
||||
rgb\
|
||||
lib3ds\
|
||||
flt\
|
||||
iv\
|
||||
obj\
|
||||
lwo\
|
||||
txp\
|
||||
|
||||
@@ -73,6 +73,7 @@ Registry::Registry()
|
||||
addFileExtensionAlias("geo", "lwo");
|
||||
addFileExtensionAlias("lw", "lwo");
|
||||
|
||||
addFileExtensionAlias("wrl", "iv");
|
||||
}
|
||||
|
||||
|
||||
|
||||
481
src/osgPlugins/iv/COPYING
Normal file
481
src/osgPlugins/iv/COPYING
Normal file
@@ -0,0 +1,481 @@
|
||||
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
|
||||
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!
|
||||
20
src/osgPlugins/iv/Makefile
Normal file
20
src/osgPlugins/iv/Makefile
Normal file
@@ -0,0 +1,20 @@
|
||||
TOPDIR = ../../..
|
||||
include $(TOPDIR)/Make/makedefs
|
||||
|
||||
CXXFILES =\
|
||||
main.cpp\
|
||||
nodecache.cpp\
|
||||
normals.cpp\
|
||||
osgvisitor.cpp\
|
||||
readerwriter.cpp\
|
||||
scanner.cpp\
|
||||
parser.cpp\
|
||||
|
||||
LIBS += $(OSG_LIBS) $(OTHER_LIBS)
|
||||
|
||||
TARGET_BASENAME = iv
|
||||
|
||||
include $(TOPDIR)/Make/cygwin_plugin_def
|
||||
PLUGIN = $(PLUGIN_PREFIX)$(TARGET_BASENAME).$(PLUGIN_EXT)
|
||||
|
||||
include $(TOPDIR)/Make/makerules
|
||||
16
src/osgPlugins/iv/Makefile.orig
Normal file
16
src/osgPlugins/iv/Makefile.orig
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
CXXFLAGS=-g -Wall
|
||||
OBJS=scanner.o parser.o main.o nodecache.o osgvisitor.o normals.o readerwriter.o
|
||||
TARGET=osgdb_iv.so
|
||||
|
||||
$(TARGET): $(OBJS)
|
||||
$(CXX) -shared $(OBJS) -o osgdb_wrl.so
|
||||
|
||||
scanner.cpp: scanner.l parser.cpp
|
||||
flex -oscanner.cpp scanner.l
|
||||
|
||||
parser.cpp: parser.y
|
||||
bison --debug -d -o parser.cpp parser.y
|
||||
|
||||
clean:
|
||||
rm -f *.o main $(TARGET) $(OBJS) scanner.cpp parser.cpp *~
|
||||
21
src/osgPlugins/iv/README
Normal file
21
src/osgPlugins/iv/README
Normal file
@@ -0,0 +1,21 @@
|
||||
This shared library can load both VRML1.0 and Inventor (they are practically
|
||||
the same, only changes the header).
|
||||
|
||||
Features:
|
||||
|
||||
* Polygonal geometry (IndexedFaceSet)
|
||||
* Materials
|
||||
* Transformations
|
||||
* External Textures (no inline ones)
|
||||
* Doesn't crash when unknown nodes or attributes are found, only ignores
|
||||
them.
|
||||
|
||||
To-Do:
|
||||
|
||||
* Use the new Geometry node of osg 0.9.0 that has support of vertex arrays
|
||||
* Use the front face attribute (clockwise/counterclockwise)
|
||||
* Implement more nodes. Maybe the cone, sphere, etc could be implemented
|
||||
with a fixed number of polygons, always the same, or maybe as a LOD node,
|
||||
that uses more or less polys depending on the distance to the camera.
|
||||
|
||||
Ruben lopez <ryu@gpul.org>
|
||||
35
src/osgPlugins/iv/atrfloat.h
Normal file
35
src/osgPlugins/iv/atrfloat.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __ATR_FLOAT_H__
|
||||
#define __ATR_FLOAT_H__
|
||||
|
||||
#include "attribute.h"
|
||||
|
||||
class AtrFloat: public Attribute {
|
||||
float value;
|
||||
public:
|
||||
AtrFloat(char *name, float val):Attribute(name) { value=val; }
|
||||
virtual char *type() { return "AtrFloat"; }
|
||||
float getValue() { return value; }
|
||||
/** clone the an object of the same type as the node.*/
|
||||
virtual Object* cloneType() const { return new AtrFloat(name,value); }
|
||||
};
|
||||
|
||||
#endif
|
||||
36
src/osgPlugins/iv/atrstring.h
Normal file
36
src/osgPlugins/iv/atrstring.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __ATR_STRING_H__
|
||||
#define __ATR_STRING_H__
|
||||
|
||||
#include "attribute.h"
|
||||
|
||||
class AtrString: public Attribute {
|
||||
char *value;
|
||||
public:
|
||||
AtrString(char *name, char *value):Attribute(name) { this->value=strdup(value); }
|
||||
~AtrString() { free (value); }
|
||||
virtual char *type() { return "AtrString"; }
|
||||
char *getValue() { return value; }
|
||||
/** clone the an object of the same type as the node.*/
|
||||
virtual Object* cloneType() const { return new AtrString(name,value); }
|
||||
};
|
||||
|
||||
#endif
|
||||
56
src/osgPlugins/iv/atrvec.h
Normal file
56
src/osgPlugins/iv/atrvec.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __ATR_VEC_H__
|
||||
#define __ATR_VEC_H__
|
||||
|
||||
#include "attribute.h"
|
||||
|
||||
class AtrVec: public Attribute {
|
||||
std::vector<float> values;
|
||||
public:
|
||||
AtrVec(char *name):Attribute(name) { }
|
||||
AtrVec(char *name, float x, float y):Attribute(name) {
|
||||
values.push_back(x);
|
||||
values.push_back(y);
|
||||
}
|
||||
AtrVec(char *name, float x, float y, float z):Attribute(name) {
|
||||
values.push_back(x);
|
||||
values.push_back(y);
|
||||
values.push_back(z);
|
||||
}
|
||||
AtrVec(char *name, float x, float y, float z, float k):Attribute(name) {
|
||||
values.push_back(x);
|
||||
values.push_back(y);
|
||||
values.push_back(z);
|
||||
values.push_back(k);
|
||||
}
|
||||
void addVal(float val) { values.push_back(val); }
|
||||
float getVal(int pos) { return values[pos]; }
|
||||
float getValABS(int pos) { return values[pos]>0?values[pos]:-values[pos]; }
|
||||
float getValCut(int pos) { return values[pos]>0?values[pos]:0.0f; }
|
||||
int getSize() { return values.size(); }
|
||||
virtual char *type() { return "AtrVec"; }
|
||||
|
||||
/** clone the an object of the same type as the node.*/
|
||||
virtual Object* cloneType() const { return new AtrVec(name); }
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
46
src/osgPlugins/iv/attribute.h
Normal file
46
src/osgPlugins/iv/attribute.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __ATTRIBUTE_H__
|
||||
#define __ATTRIBUTE_H__
|
||||
|
||||
#include <osg/Object>
|
||||
|
||||
class SG_EXPORT Attribute: public osg::Object {
|
||||
public:
|
||||
char *name;
|
||||
virtual char *type()=0;
|
||||
char *getName() { return name; }
|
||||
|
||||
// OSG Object API
|
||||
|
||||
/** clone the an object of the same type as the node.*/
|
||||
virtual Object* cloneType() const =0;
|
||||
/** return a clone of a node, with Object* return type.*/
|
||||
virtual Object* clone(const osg::CopyOp& copyop) const { return cloneType(); }
|
||||
/** return the name of the node's library.*/
|
||||
virtual const char* libraryName() const { return "osgdb_wrl"; }
|
||||
/** return the name of the node's class type.*/
|
||||
virtual const char* className() const { return "Attribute"; }
|
||||
protected:
|
||||
Attribute(char *name) {this->name=strdup(name); }
|
||||
~Attribute() {free(name); }
|
||||
};
|
||||
|
||||
#endif
|
||||
39
src/osgPlugins/iv/coordinate3.h
Normal file
39
src/osgPlugins/iv/coordinate3.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __COORDINATE3_H__
|
||||
#define __COORDINATE3_H__
|
||||
|
||||
#include "geometry.h"
|
||||
#include "mynode.h"
|
||||
|
||||
class Coordinate3: public MyNode {
|
||||
VertexList vertices;
|
||||
public:
|
||||
Coordinate3(VertexList *vertices) {
|
||||
this->vertices=*vertices;
|
||||
}
|
||||
virtual char *type() { return "Coordinate3"; }
|
||||
virtual void accept(MyNodeVisitor *v) { v->applyCoordinate3(this); }
|
||||
VertexList getVertices() { return vertices; }
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
32
src/osgPlugins/iv/geometry.h
Normal file
32
src/osgPlugins/iv/geometry.h
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __GEOMETRY_H__
|
||||
#define __GEOMETRY_H__
|
||||
|
||||
#include <vector>
|
||||
#include <osg/Vec3>
|
||||
|
||||
typedef std::vector<osg::Vec3> VertexList;
|
||||
typedef std::vector<int> VertexIndexList;
|
||||
typedef std::pair<float,float> TextureCoordVal;
|
||||
typedef std::vector<TextureCoordVal > TextureCoordList;
|
||||
typedef std::vector<VertexIndexList*> PolygonList;
|
||||
typedef float Matrix[16];
|
||||
#endif
|
||||
52
src/osgPlugins/iv/indexedfaceset.h
Normal file
52
src/osgPlugins/iv/indexedfaceset.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __INDEXED_FACE_SET_H__
|
||||
#define __INDEXED_FACE_SET_H__
|
||||
|
||||
#include "mynode.h"
|
||||
|
||||
class IndexedFaceSet: public MyNode {
|
||||
PolygonList polys;
|
||||
PolygonList textureIndices; // Indexed texture set.
|
||||
bool _hasTextureIndices;
|
||||
public:
|
||||
IndexedFaceSet() {}
|
||||
|
||||
IndexedFaceSet(PolygonList *p) {
|
||||
polys=*p;
|
||||
_hasTextureIndices=false;
|
||||
}
|
||||
|
||||
IndexedFaceSet(PolygonList *p, PolygonList *t) {
|
||||
polys=*p;
|
||||
textureIndices=*t;
|
||||
_hasTextureIndices=true;
|
||||
}
|
||||
|
||||
bool hasTextureIndices() { return _hasTextureIndices; }
|
||||
PolygonList getPolygons() { return polys; }
|
||||
PolygonList getTextureIndices() { return textureIndices; }
|
||||
virtual char *type() { return "IndexedFaceSet"; }
|
||||
virtual void accept(MyNodeVisitor *v) { v->applyIndexedFaceSet(this); }
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
38
src/osgPlugins/iv/ltstr.h
Normal file
38
src/osgPlugins/iv/ltstr.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __LTSTR_H__
|
||||
#define __LTSTR_H__
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/** @class ltstr
|
||||
*
|
||||
* @brief clase/estructura que implementa un algoritmo de comparacion
|
||||
* de dos cadenas para mapas cuyo indice es una cadena.
|
||||
*/
|
||||
struct ltstr
|
||||
{
|
||||
bool operator()(const char* s1, const char* s2) const
|
||||
{
|
||||
return strcmp(s1, s2) < 0;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
53
src/osgPlugins/iv/main.cpp
Normal file
53
src/osgPlugins/iv/main.cpp
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifdef WIN32
|
||||
# pragma warning (disable:4786)
|
||||
# pragma warning (disable:4541)
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include "mynode.h"
|
||||
#include "osgvisitor.h"
|
||||
|
||||
#include <osgGLUT/Viewer>
|
||||
#include <osgGLUT/glut>
|
||||
|
||||
extern int yyparse();
|
||||
extern int yydebug;
|
||||
extern MyNode *getRoot();
|
||||
extern FILE *yyin;
|
||||
|
||||
int isatty(int t) { return 0; }
|
||||
|
||||
osg::Node *readVRMLNode(const char *file) {
|
||||
yydebug=0;
|
||||
yyin=fopen(file,"r");
|
||||
std::cout << "Parsing..." << std::endl;
|
||||
yyparse();
|
||||
osg::ref_ptr<MyNode> n=getRoot();
|
||||
try {
|
||||
std::cout << "Generating OSG tree..." << std::endl;
|
||||
osg::ref_ptr<OSGVisitor> visitante=new OSGVisitor(n.get());
|
||||
return visitante->getRoot();
|
||||
} catch (...) {
|
||||
std::cerr << "VRML: error reading" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
22
src/osgPlugins/iv/main.h
Normal file
22
src/osgPlugins/iv/main.h
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#include <osg/Node>
|
||||
|
||||
osg::Node *readVRMLNode(const char *file);
|
||||
33
src/osgPlugins/iv/material.h
Normal file
33
src/osgPlugins/iv/material.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __MATERIAL_H__
|
||||
#define __MATERIAL_H__
|
||||
|
||||
#include "mynode.h"
|
||||
|
||||
class Material: public MyNode {
|
||||
public:
|
||||
Material() {}
|
||||
Material(MyNode *n): MyNode(n) {}
|
||||
virtual char *type() { return "Material"; }
|
||||
virtual void accept(MyNodeVisitor *v) { v->applyMaterial(this); }
|
||||
};
|
||||
|
||||
#endif
|
||||
36
src/osgPlugins/iv/matrixtransform.h
Normal file
36
src/osgPlugins/iv/matrixtransform.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __MATRIX_TRANSFORM_H__
|
||||
#define __MATRIX_TRANSFORM_H__
|
||||
|
||||
#include "mynode.h"
|
||||
#include "geometry.h"
|
||||
|
||||
class MatrixTransform: public MyNode {
|
||||
Matrix m;
|
||||
public:
|
||||
MatrixTransform(Matrix m) {memcpy(this->m,m,sizeof(float)*16);}
|
||||
float getElem(int i) { return m[i]; }
|
||||
virtual char *type() { return "MatrixTransform"; }
|
||||
virtual void accept(MyNodeVisitor *v) { v->applyMatrixTransform(this); }
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
88
src/osgPlugins/iv/mynode.h
Normal file
88
src/osgPlugins/iv/mynode.h
Normal file
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __NODE_H__
|
||||
#define __NODE_H__
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <iostream>
|
||||
#include "attribute.h"
|
||||
#include "mynodevisitor.h"
|
||||
#include "ltstr.h"
|
||||
|
||||
#ifdef WIN32
|
||||
# pragma warning (disable:4786)
|
||||
#endif
|
||||
|
||||
class MyNode : public osg::Object {
|
||||
public:
|
||||
typedef std::vector< osg::ref_ptr<MyNode> > MyNodeList;
|
||||
typedef std::map< const char*, osg::ref_ptr<Attribute>, ltstr > AttributeMap;
|
||||
protected:
|
||||
MyNodeList children;
|
||||
AttributeMap attributes;
|
||||
bool two_sided;
|
||||
public:
|
||||
MyNode() {two_sided=false;}
|
||||
MyNode(const MyNode *other) { children=other->children; attributes=other->attributes; two_sided=false; }
|
||||
virtual char *type() { return "MyNode"; } ///< Returns generic type
|
||||
void addAttribute(char *name, Attribute *atr) { attributes[name]=atr; }
|
||||
void addChild(MyNode *node) { children.push_back(node); }
|
||||
MyNodeList getChildren() { return children; }
|
||||
AttributeMap getAttributes() { return attributes; }
|
||||
Attribute *getAttribute(char *name) {
|
||||
if (attributes.find(name) != attributes.end()) {
|
||||
return attributes[name].get();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
void setChildren(MyNodeList children) { this->children=children; }
|
||||
void setAttributes(AttributeMap attributes) { this->attributes=attributes; }
|
||||
|
||||
void print(int indent) {
|
||||
for (int i=0;i<indent;i++) std::cout << " ";
|
||||
std::cout << type() << std::endl;
|
||||
MyNodeList::iterator iter;
|
||||
for (iter=children.begin();iter!=children.end();iter++) {
|
||||
osg::ref_ptr<MyNode> node = *iter;
|
||||
node->print(indent+4);
|
||||
}
|
||||
}
|
||||
void setTwoSided() { two_sided=true; }
|
||||
bool getTwoSided() { return two_sided; }
|
||||
virtual void accept(MyNodeVisitor *v) { v->applyMyNode(this); }
|
||||
|
||||
// OSG Object API
|
||||
|
||||
/** clone the an object of the same type as the node.*/
|
||||
virtual Object* cloneType() const { return new MyNode(); }
|
||||
/** return a clone of a node, with Object* return type.*/
|
||||
virtual Object* clone(const osg::CopyOp& copyop) const { return new MyNode(this); }
|
||||
/** return the name of the node's library.*/
|
||||
virtual const char* libraryName() const { return "osgdb_wrl"; }
|
||||
/** return the name of the node's class type.*/
|
||||
virtual const char* className() const { return "MyNode"; }
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
59
src/osgPlugins/iv/mynodevisitor.h
Normal file
59
src/osgPlugins/iv/mynodevisitor.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __MY_NODE_VISITOR_H__
|
||||
#define __MY_NODE_VISITOR_H__
|
||||
|
||||
class MyNode;
|
||||
class Material;
|
||||
class Coordinate3;
|
||||
class MatrixTransform;
|
||||
class Separator;
|
||||
class IndexedFaceSet;
|
||||
class TextureCoordinate;
|
||||
class Texture2;
|
||||
class Transform;
|
||||
|
||||
#include <osg/Object>
|
||||
|
||||
class MyNodeVisitor: public osg::Object {
|
||||
public:
|
||||
virtual void applyMyNode(MyNode *node)=0;
|
||||
virtual void applyMaterial(Material *material)=0;
|
||||
virtual void applyCoordinate3(Coordinate3 *coord)=0;
|
||||
virtual void applyMatrixTransform(MatrixTransform *tr)=0;
|
||||
virtual void applySeparator(Separator *sep)=0;
|
||||
virtual void applyIndexedFaceSet(IndexedFaceSet *ifs)=0;
|
||||
virtual void applyTextureCoordinate(TextureCoordinate *texc)=0;
|
||||
virtual void applyTexture2(Texture2 *tex)=0;
|
||||
virtual void applyTransform(Transform *trans)=0;
|
||||
|
||||
/** clone the an object of the same type as the node.*/
|
||||
virtual Object* cloneType() const = 0;
|
||||
/** return a clone of a node, with Object* return type.*/
|
||||
virtual Object* clone(const osg::CopyOp& copyop) const { return cloneType(); }
|
||||
/** return the name of the node's library.*/
|
||||
virtual const char* libraryName() const { return "osgdb_wrl"; }
|
||||
/** return the name of the node's class type.*/
|
||||
virtual const char* className() const { return "MyNodeVisitor"; }
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
22
src/osgPlugins/iv/nodecache.cpp
Normal file
22
src/osgPlugins/iv/nodecache.cpp
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#include "nodecache.h"
|
||||
|
||||
NodeCache::NodeMap NodeCache::nodes;
|
||||
44
src/osgPlugins/iv/nodecache.h
Normal file
44
src/osgPlugins/iv/nodecache.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __CACHE_NODOS_H__
|
||||
#define __CACHE_NODOS_H__
|
||||
|
||||
#include <map>
|
||||
#include "mynode.h"
|
||||
#include "ltstr.h"
|
||||
|
||||
class NodeCache {
|
||||
typedef std::map<char *, osg::ref_ptr<MyNode>, ltstr > NodeMap;
|
||||
static NodeMap nodes;
|
||||
public:
|
||||
static void addNode(char *name, MyNode *node) {
|
||||
nodes[name]=node;
|
||||
}
|
||||
static MyNode* getNode(char *name) {
|
||||
if (nodes.find(name) != nodes.end()) {
|
||||
return nodes[name].get();
|
||||
} else {
|
||||
std::cerr << "Node does not exist" << std::endl;
|
||||
return new MyNode();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
107
src/osgPlugins/iv/normals.cpp
Normal file
107
src/osgPlugins/iv/normals.cpp
Normal file
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
|
||||
#include "normals.h"
|
||||
#include <osg/Matrix>
|
||||
|
||||
#define CREASE_ANGLE 3.14159265356 * 45 / 180
|
||||
|
||||
float difAng(osg::Vec3 a, osg::Vec3 b) {
|
||||
float div = a.length() * b.length();
|
||||
return (div != 0.0f ? acosf( (a*b) / div) : 0.0f );
|
||||
}
|
||||
|
||||
osg::Vec3 calcNormal(osg::Vec3 &a, osg::Vec3 &b, osg::Vec3 &c) {
|
||||
osg::Vec3 norm;
|
||||
osg::Vec3 v1;
|
||||
osg::Vec3 v2;
|
||||
v1=b-c;
|
||||
v2=a-b;
|
||||
norm=v1 ^ v2; // cross product
|
||||
norm.normalize();
|
||||
return norm;
|
||||
}
|
||||
|
||||
void get3v(VertexList &vertices, VertexIndexList &vindex, int &a, int &b, int &c) {
|
||||
unsigned tam=vindex.size();
|
||||
unsigned i;
|
||||
b=0;c=0;
|
||||
a=vindex[0];
|
||||
for (i=1;i<tam;i++) {
|
||||
if (vertices[vindex[i]] != vertices[a]) { b=vindex[i];break; }
|
||||
}
|
||||
for (i=1;i<tam;i++) {
|
||||
if (vertices[vindex[i]] != vertices[a] && vertices[vindex[i]] != vertices[b]) { c=vindex[i];break; }
|
||||
}
|
||||
}
|
||||
|
||||
osg::Vec3 *calcNormals(VertexList &vertices, PolygonList &polygons, unsigned nvert_total) {
|
||||
unsigned nPoly=polygons.size();
|
||||
osg::Vec3 *normales_polys = new osg::Vec3[nPoly];
|
||||
osg::Vec3 *normales = new osg::Vec3[nvert_total];
|
||||
unsigned pos=0;
|
||||
unsigned poly;
|
||||
/* Phase 1: Get flat normals */
|
||||
for (poly=0;poly<nPoly;poly++) {
|
||||
VertexIndexList vindex=*polygons[poly];
|
||||
if (vindex.size() > 2) {
|
||||
int v0,v1,v2;
|
||||
get3v(vertices,vindex,v0,v1,v2);
|
||||
if (v0 == v1 || v0 == v2) {
|
||||
std::cerr << "ERROR: Vertices alineados: nv=" << vindex.size() << std::endl;
|
||||
}
|
||||
normales_polys[poly] = calcNormal(vertices[v0],
|
||||
vertices[v1],
|
||||
vertices[v2]);
|
||||
if (normales_polys[poly] == osg::Vec3(0,0,0) && vindex.size() > 2) {
|
||||
std::cerr << "##***" << "Normal nula VERTICES=" << vindex.size() << " " << vertices[v0] << " " << vertices[v1] << " " << vertices[v2] << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Phase 2: Selective smooth depending on crease angle */
|
||||
for (poly=0;poly<nPoly;poly++) {
|
||||
VertexIndexList vindex=*polygons[poly];
|
||||
unsigned j;
|
||||
osg::Vec3 pnormal=normales_polys[poly];
|
||||
for (j=0;j<vindex.size();j++) {
|
||||
int vertice=vindex[j];
|
||||
normales[pos]=osg::Vec3(pnormal[0],pnormal[1],pnormal[2]);
|
||||
unsigned poly2;
|
||||
for (poly2=0;poly2<nPoly;poly2++) {
|
||||
if (poly2 == poly) continue;
|
||||
VertexIndexList vindex2=*polygons[poly2];
|
||||
unsigned k;
|
||||
osg::Vec3 pnormal2=normales_polys[poly2];
|
||||
for (k=0;k<vindex2.size();k++) {
|
||||
if (vindex2[k] == vertice) {
|
||||
float ang=difAng(pnormal,pnormal2);
|
||||
if (ang < CREASE_ANGLE) {
|
||||
normales[pos]+=osg::Vec3(pnormal2[0],pnormal2[1],pnormal2[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
normales[pos].normalize();
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
/* Phase 3: All done ;) */
|
||||
return normales;
|
||||
}
|
||||
27
src/osgPlugins/iv/normals.h
Normal file
27
src/osgPlugins/iv/normals.h
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#include <osg/Matrix>
|
||||
#include "geometry.h"
|
||||
|
||||
osg::Vec3 calcNormal(osg::Vec3 &a, osg::Vec3 &b, osg::Vec3 &c);
|
||||
|
||||
osg::Vec3 *calcNormals(VertexList &vertices,
|
||||
PolygonList &polygons,
|
||||
unsigned nvert_total);
|
||||
299
src/osgPlugins/iv/osgvisitor.cpp
Normal file
299
src/osgPlugins/iv/osgvisitor.cpp
Normal file
@@ -0,0 +1,299 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifdef WIN32
|
||||
# pragma warning (disable:4786)
|
||||
# pragma warning (disable:4541)
|
||||
#endif
|
||||
#include <iostream>
|
||||
#include "osgvisitor.h"
|
||||
#include "material.h"
|
||||
#include "coordinate3.h"
|
||||
#include "separator.h"
|
||||
#include "matrixtransform.h"
|
||||
#include "indexedfaceset.h"
|
||||
#include "texturecoordinate.h"
|
||||
#include "texture2.h"
|
||||
#include "transform.h"
|
||||
|
||||
#include <osg/Geode>
|
||||
#include <osg/GeoSet>
|
||||
#include <osg/StateSet>
|
||||
#include <osg/Material>
|
||||
#include <osg/Texture>
|
||||
#include <osg/Transform>
|
||||
#include <osg/Transparency>
|
||||
#include <osg/CullFace>
|
||||
#include <osg/FrontFace>
|
||||
#include <osg/PolygonMode>
|
||||
|
||||
#include <osgDB/ReadFile>
|
||||
#include <osgUtil/SmoothingVisitor> ///< Para calcular normals
|
||||
#include <osgUtil/TriStripVisitor> ///< Para convertir a tristrip
|
||||
|
||||
|
||||
#include "atrvec.h"
|
||||
#include "atrfloat.h"
|
||||
#include "atrstring.h"
|
||||
|
||||
#include "ltstr.h"
|
||||
#include "normals.h"
|
||||
|
||||
#define CREASE_ANGLE 2//3.14159265359 * 2.0 / 3.0
|
||||
|
||||
class CacheObjetos {
|
||||
typedef std::map<osg::ref_ptr<Material>, osg::ref_ptr<osg::Material> > MaterialMap;
|
||||
typedef std::map<const char*, osg::ref_ptr<osg::Texture>, ltstr> TextureMap;
|
||||
typedef std::map<osg::ref_ptr<MyNode>, osg::ref_ptr<osg::Node> > NodeMap;
|
||||
|
||||
static MaterialMap materiales;
|
||||
static TextureMap textures;
|
||||
static NodeMap nodos;
|
||||
public:
|
||||
static osg::Node* getMyNode(MyNode* _node) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static osg::Material* getMaterial(Material* _material) {
|
||||
if (materiales.find(_material) == materiales.end()) {
|
||||
AtrVec *ambient=(AtrVec*)_material->getAttribute("ambientColor");
|
||||
AtrVec *diffuse=(AtrVec*)_material->getAttribute("diffuseColor");
|
||||
AtrVec *specular=(AtrVec*)_material->getAttribute("specularColor");
|
||||
AtrFloat *shininess=(AtrFloat*)_material->getAttribute("shininess");
|
||||
AtrFloat *transparency=(AtrFloat*)_material->getAttribute("transparency");
|
||||
osg::Material *material=new osg::Material();
|
||||
if (ambient) material->setAmbient(osg::Material::FRONT_AND_BACK,osg::Vec4(ambient->getValCut(0),ambient->getValCut(1),ambient->getValCut(2),1.0f));
|
||||
if (diffuse) material->setDiffuse(osg::Material::FRONT_AND_BACK,osg::Vec4(diffuse->getValCut(0),diffuse->getValCut(1),diffuse->getValCut(2),1.0f));
|
||||
if (specular) material->setSpecular(osg::Material::FRONT_AND_BACK,osg::Vec4(specular->getValCut(0),specular->getValCut(1),specular->getValCut(2),1.0f));
|
||||
if (shininess) material->setShininess(osg::Material::FRONT_AND_BACK,shininess->getValue());
|
||||
if (transparency) material->setTransparency(osg::Material::FRONT_AND_BACK,transparency->getValue());
|
||||
materiales[_material]=material;
|
||||
}
|
||||
return materiales[_material].get();
|
||||
}
|
||||
|
||||
static osg::Texture* getTextura(const char* _texture) {
|
||||
if (textures.find(_texture) == textures.end()) {
|
||||
osg::Texture *texture=new osg::Texture();
|
||||
texture->setImage(osgDB::readImageFile(_texture));
|
||||
texture->setWrap(osg::Texture::WRAP_S,osg::Texture::REPEAT);
|
||||
texture->setWrap(osg::Texture::WRAP_T,osg::Texture::REPEAT);
|
||||
std::cout << "Loading texture " << _texture << std::endl;
|
||||
textures[_texture]=texture;
|
||||
}
|
||||
return textures[_texture].get();
|
||||
}
|
||||
};
|
||||
|
||||
CacheObjetos::MaterialMap CacheObjetos::materiales;
|
||||
CacheObjetos::TextureMap CacheObjetos::textures;
|
||||
CacheObjetos::NodeMap CacheObjetos::nodos;
|
||||
|
||||
static void makeTransform(MatrixTransform *matriz_active, osg::Transform *nodo) {
|
||||
// Original
|
||||
osg::Matrix m(matriz_active->getElem(0),matriz_active->getElem(1),matriz_active->getElem(2),matriz_active->getElem(3),
|
||||
matriz_active->getElem(4),matriz_active->getElem(5),matriz_active->getElem(6),matriz_active->getElem(7),
|
||||
matriz_active->getElem(8),matriz_active->getElem(9),matriz_active->getElem(10),matriz_active->getElem(11),
|
||||
matriz_active->getElem(12),matriz_active->getElem(13),matriz_active->getElem(14),matriz_active->getElem(15));
|
||||
nodo->setMatrix(m);
|
||||
}
|
||||
|
||||
OSGVisitor::OSGVisitor(MyNode *nodo) {
|
||||
root=0;
|
||||
parent=0;
|
||||
coord3_active=0;
|
||||
tcoord_active=0;
|
||||
texture_active=0;
|
||||
material_active=0;
|
||||
total_vert=0;
|
||||
two_sided=false;
|
||||
nodo->accept(this);
|
||||
std::cout << "Model of " << total_vert << " vertices" << std::endl;
|
||||
}
|
||||
|
||||
void OSGVisitor::applyMyNode(MyNode *nodo) {
|
||||
}
|
||||
|
||||
void OSGVisitor::applyMaterial(Material *material) {
|
||||
material_active=material;
|
||||
}
|
||||
|
||||
void OSGVisitor::applyCoordinate3(Coordinate3 *coord) {
|
||||
coord3_active=coord;
|
||||
}
|
||||
|
||||
void OSGVisitor::applyMatrixTransform(MatrixTransform *tr) {
|
||||
makeTransform(tr,parent);
|
||||
}
|
||||
|
||||
void OSGVisitor::applySeparator(Separator *sep) {
|
||||
osg::Transform *group=new osg::Transform();
|
||||
if (root==0) {
|
||||
root=group;
|
||||
}
|
||||
if (parent!=0) {
|
||||
parent->addChild(group);
|
||||
}
|
||||
two_sided=false;
|
||||
MyNode::MyNodeList hijos=sep->getChildren();
|
||||
for (MyNode::MyNodeList::iterator iter=hijos.begin();iter!=hijos.end();iter++) {
|
||||
osg::ref_ptr<MyNode> hijo=*iter;
|
||||
parent=group;
|
||||
hijo->accept(this);
|
||||
}
|
||||
}
|
||||
|
||||
void OSGVisitor::applyIndexedFaceSet(IndexedFaceSet *ifs) {
|
||||
unsigned i,j;
|
||||
if (coord3_active == 0) {
|
||||
std::cerr << "ERROR: IndexedFaceSet without previous Coordinate3!" << std::endl;
|
||||
throw -1;
|
||||
}
|
||||
osg::Geode *geode=new osg::Geode();
|
||||
osg::GeoSet *objeto=new osg::GeoSet();
|
||||
osg::StateSet *state=new osg::StateSet();
|
||||
osg::FrontFace *frontface=new osg::FrontFace();
|
||||
frontface->setMode(osg::FrontFace::CLOCKWISE);
|
||||
state->setAttributeAndModes(frontface,osg::StateAttribute::ON);
|
||||
osg::CullFace *cull=new osg::CullFace();
|
||||
cull->setMode(osg::CullFace::BACK);
|
||||
if (ifs->getTwoSided() == false) {
|
||||
state->setAttributeAndModes(cull,osg::StateAttribute::ON);
|
||||
} else {
|
||||
std::cout << "Deactivating culling for this object" << std::endl;
|
||||
state->setAttributeAndModes(cull,osg::StateAttribute::OFF);
|
||||
osg::Transparency *transp=new osg::Transparency();
|
||||
transp->setFunction(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||
state->setAttribute(transp);
|
||||
state->setMode(GL_BLEND,osg::StateAttribute::ON);
|
||||
state->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
||||
}
|
||||
geode->setStateSet(state);
|
||||
/** Applying the material */
|
||||
if (material_active!=0) {
|
||||
osg::Material *material = CacheObjetos::getMaterial(material_active);
|
||||
state->setAttributeAndModes(material,osg::StateAttribute::ON);
|
||||
}
|
||||
/** Applying the texture */
|
||||
if (texture_active!=0) {
|
||||
AtrString *filename=(AtrString*)texture_active->getAttribute("filename");
|
||||
if (filename) {
|
||||
osg::Texture *texture=CacheObjetos::getTextura(filename->getValue());
|
||||
state->setTextureAttributeAndModes(0,texture,osg::StateAttribute::ON);
|
||||
}
|
||||
|
||||
}
|
||||
VertexList vertices=coord3_active->getVertices();
|
||||
PolygonList polys=ifs->getPolygons();
|
||||
TextureCoordList tcoord;
|
||||
if (tcoord_active) tcoord=tcoord_active->getTextureCoords();
|
||||
unsigned nPoly=polys.size();
|
||||
unsigned nvert_total=0;
|
||||
|
||||
objeto->setPrimType(osg::GeoSet::POLYGON);
|
||||
objeto->setNumPrims(nPoly);
|
||||
|
||||
/** Calculating length of primitives */
|
||||
int *long_primitivas=new int[nPoly];
|
||||
for (j=0;j<nPoly;j++) {
|
||||
long_primitivas[j]=polys[j]->size();
|
||||
nvert_total+=long_primitivas[j];
|
||||
}
|
||||
objeto->setPrimLengths(long_primitivas);
|
||||
this->total_vert+=nvert_total;
|
||||
|
||||
/** We change from the ad-hoc scenegraph to the OSG one */
|
||||
unsigned posCoords=0;
|
||||
osg::Vec3 *coords = new osg::Vec3[nvert_total];
|
||||
osg::Vec2 *tcoords = new osg::Vec2[nvert_total];
|
||||
osg::Vec3 *normalsFlat = new osg::Vec3[nvert_total];
|
||||
bool hasTextureIndices=ifs->hasTextureIndices();
|
||||
PolygonList textureIndices = ifs->getTextureIndices();
|
||||
for (j=0; j < nPoly; j++) {
|
||||
VertexIndexList vindex=*polys[j];
|
||||
VertexIndexList texindex;
|
||||
if (hasTextureIndices) texindex=*textureIndices[j];
|
||||
unsigned nVert=vindex.size();
|
||||
osg::Vec3 normal;
|
||||
if (nVert > 2) {
|
||||
normal = calcNormal(vertices[vindex[0]],vertices[vindex[1]],vertices[vindex[2]]);
|
||||
} else {
|
||||
normal = osg::Vec3(0,0,0);
|
||||
}
|
||||
for (i=0; i < nVert; i++) {
|
||||
int vert = vindex[i];
|
||||
coords[posCoords].set(vertices[vert][0],vertices[vert][1],vertices[vert][2]);
|
||||
normalsFlat[posCoords].set(normal[0],normal[1],normal[2]);
|
||||
if (tcoord_active) {
|
||||
if (hasTextureIndices) {
|
||||
int coord=texindex[i];
|
||||
tcoords[posCoords].set(tcoord[coord].first,tcoord[coord].second);
|
||||
} else {
|
||||
tcoords[posCoords].set(tcoord[vert].first,tcoord[vert].second);
|
||||
}
|
||||
}
|
||||
posCoords++;
|
||||
}
|
||||
}
|
||||
|
||||
/** Establishing parameters of the geoset */
|
||||
objeto->setCoords(coords);
|
||||
if (tcoord_active) {
|
||||
objeto->setTextureCoords(tcoords);
|
||||
objeto->setTextureBinding(osg::GeoSet::BIND_PERVERTEX);
|
||||
}
|
||||
//osg::Vec3 *normals=calcNormals(vertices,polys,nvert_total);
|
||||
//objeto->setNormals(normals);
|
||||
|
||||
geode->addDrawable(objeto);
|
||||
parent->addChild(geode);
|
||||
}
|
||||
|
||||
void OSGVisitor::applyTextureCoordinate(TextureCoordinate *texc) {
|
||||
tcoord_active=texc;
|
||||
}
|
||||
|
||||
void OSGVisitor::applyTexture2(Texture2 *tex) {
|
||||
texture_active=tex;
|
||||
}
|
||||
|
||||
void OSGVisitor::applyTransform(Transform *trans) {
|
||||
osg::Matrix scale;
|
||||
osg::Matrix rotate;
|
||||
osg::Matrix translate;
|
||||
AtrVec *_scale=(AtrVec*)trans->getAttribute("scaleFactor");
|
||||
AtrVec *_rotate=(AtrVec*)trans->getAttribute("rotation");
|
||||
AtrVec *_translate=(AtrVec*)trans->getAttribute("translation");
|
||||
if (_scale) {
|
||||
scale.makeScale(_scale->getVal(0),_scale->getVal(1),_scale->getVal(2));
|
||||
}
|
||||
if (_rotate) {
|
||||
rotate.makeRotate(_rotate->getVal(3),_rotate->getVal(0),_rotate->getVal(1),_rotate->getVal(2));
|
||||
}
|
||||
if (_translate) {
|
||||
translate.makeTranslate(_translate->getVal(0),_translate->getVal(1),_translate->getVal(2));
|
||||
}
|
||||
parent->setMatrix(scale*rotate*translate);
|
||||
}
|
||||
|
||||
|
||||
osg::Node* OSGVisitor::getRoot() {
|
||||
return root;
|
||||
}
|
||||
|
||||
53
src/osgPlugins/iv/osgvisitor.h
Normal file
53
src/osgPlugins/iv/osgvisitor.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __VISITANTE_OSG_H__
|
||||
#define __VISITANTE_OSG_H__
|
||||
|
||||
#include "mynodevisitor.h"
|
||||
#include <osg/Group>
|
||||
|
||||
class OSGVisitor: public MyNodeVisitor {
|
||||
osg::Node *root;
|
||||
osg::Transform *parent;
|
||||
Coordinate3 *coord3_active;
|
||||
TextureCoordinate *tcoord_active;
|
||||
Texture2 *texture_active;
|
||||
Material *material_active;
|
||||
int total_vert;
|
||||
bool two_sided;
|
||||
public:
|
||||
OSGVisitor(MyNode *node);
|
||||
|
||||
virtual void applyMyNode(MyNode* node);
|
||||
virtual void applyMaterial(Material *material);
|
||||
virtual void applyCoordinate3(Coordinate3 *coord);
|
||||
virtual void applyMatrixTransform(MatrixTransform *tr);
|
||||
virtual void applySeparator(Separator *sep);
|
||||
virtual void applyIndexedFaceSet(IndexedFaceSet *ifs);
|
||||
virtual void applyTextureCoordinate(TextureCoordinate *texc);
|
||||
virtual void applyTexture2(Texture2 *tex);
|
||||
virtual void applyTransform(Transform *trans);
|
||||
osg::Node* getRoot();
|
||||
|
||||
virtual Object* cloneType() const { return new OSGVisitor(0); }
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
1218
src/osgPlugins/iv/parser.cpp
Normal file
1218
src/osgPlugins/iv/parser.cpp
Normal file
File diff suppressed because it is too large
Load Diff
40
src/osgPlugins/iv/parser.cpp.h
Normal file
40
src/osgPlugins/iv/parser.cpp.h
Normal file
@@ -0,0 +1,40 @@
|
||||
typedef union {
|
||||
char *s_value;
|
||||
float f_value;
|
||||
MyNode *nodo;
|
||||
Attribute *attribute;
|
||||
VertexList *vlist;
|
||||
VertexIndexList *vindex;
|
||||
TextureCoordList *tcoord;
|
||||
PolygonList *plist;
|
||||
Matrix matrix;
|
||||
int i_value;
|
||||
} YYSTYPE;
|
||||
#define STRING 257
|
||||
#define QUOTED_STRING 258
|
||||
#define FLOAT 259
|
||||
#define INT 260
|
||||
#define SEPARATOR 261
|
||||
#define DEF 262
|
||||
#define UN_MATERIAL 263
|
||||
#define DIFFUSE_COLOR 264
|
||||
#define COORDINATE3 265
|
||||
#define INDEXED_FACE_SET 266
|
||||
#define A_POINT 267
|
||||
#define COORD_INDEX 268
|
||||
#define TEXTURE_COORD_INDEX 269
|
||||
#define NORMAL_INDEX 270
|
||||
#define TEXTURE_COORDINATE 271
|
||||
#define TEXTURE2 272
|
||||
#define MATRIX_TRANSFORM 273
|
||||
#define MATRIX 274
|
||||
#define LISTA_VACIA 275
|
||||
#define FINPOLY 276
|
||||
#define DOBLE_CARA 277
|
||||
#define VECTOR 278
|
||||
#define VRML_HEADER 279
|
||||
#define TRANSFORM 280
|
||||
#define USE 281
|
||||
|
||||
|
||||
extern YYSTYPE yylval;
|
||||
49
src/osgPlugins/iv/parser.hpp
Normal file
49
src/osgPlugins/iv/parser.hpp
Normal file
@@ -0,0 +1,49 @@
|
||||
#ifndef BISON_PARSER_HPP
|
||||
# define BISON_PARSER_HPP
|
||||
|
||||
#ifndef YYSTYPE
|
||||
typedef union {
|
||||
char *s_value;
|
||||
float f_value;
|
||||
MyNode *nodo;
|
||||
Attribute *attribute;
|
||||
VertexList *vlist;
|
||||
VertexIndexList *vindex;
|
||||
TextureCoordList *tcoord;
|
||||
PolygonList *plist;
|
||||
Matrix matrix;
|
||||
int i_value;
|
||||
} yystype;
|
||||
# define YYSTYPE yystype
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
#endif
|
||||
# define STRING 257
|
||||
# define QUOTED_STRING 258
|
||||
# define FLOAT 259
|
||||
# define INT 260
|
||||
# define SEPARATOR 261
|
||||
# define DEF 262
|
||||
# define UN_MATERIAL 263
|
||||
# define DIFFUSE_COLOR 264
|
||||
# define COORDINATE3 265
|
||||
# define INDEXED_FACE_SET 266
|
||||
# define A_POINT 267
|
||||
# define COORD_INDEX 268
|
||||
# define TEXTURE_COORD_INDEX 269
|
||||
# define NORMAL_INDEX 270
|
||||
# define TEXTURE_COORDINATE 271
|
||||
# define TEXTURE2 272
|
||||
# define MATRIX_TRANSFORM 273
|
||||
# define MATRIX 274
|
||||
# define LISTA_VACIA 275
|
||||
# define FINPOLY 276
|
||||
# define DOBLE_CARA 277
|
||||
# define VECTOR 278
|
||||
# define VRML_HEADER 279
|
||||
# define TRANSFORM 280
|
||||
# define USE 281
|
||||
|
||||
|
||||
extern YYSTYPE yylval;
|
||||
|
||||
#endif /* not BISON_PARSER_HPP */
|
||||
159
src/osgPlugins/iv/parser.y
Normal file
159
src/osgPlugins/iv/parser.y
Normal file
@@ -0,0 +1,159 @@
|
||||
%{
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifdef WIN32
|
||||
# pragma warning (disable:4786)
|
||||
# pragma warning (disable:4541)
|
||||
#endif
|
||||
|
||||
#include <malloc.h>
|
||||
#include "mynode.h"
|
||||
#include <stdlib.h>
|
||||
#include "geometry.h"
|
||||
#include "nodecache.h"
|
||||
|
||||
#include "material.h"
|
||||
#include "coordinate3.h"
|
||||
#include "separator.h"
|
||||
#include "matrixtransform.h"
|
||||
#include "indexedfaceset.h"
|
||||
#include "texturecoordinate.h"
|
||||
#include "texture2.h"
|
||||
#include "transform.h"
|
||||
|
||||
#include "atrfloat.h"
|
||||
#include "atrstring.h"
|
||||
#include "atrvec.h"
|
||||
#include "string.h"
|
||||
extern int yyline;
|
||||
extern int yylex();
|
||||
void yyerror(char *str,...);
|
||||
static MyNode *root_node;
|
||||
|
||||
%}
|
||||
|
||||
%union {
|
||||
char *s_value;
|
||||
float f_value;
|
||||
MyNode *nodo;
|
||||
Attribute *attribute;
|
||||
VertexList *vlist;
|
||||
VertexIndexList *vindex;
|
||||
TextureCoordList *tcoord;
|
||||
PolygonList *plist;
|
||||
Matrix matrix;
|
||||
int i_value;
|
||||
};
|
||||
|
||||
%token <s_value> STRING
|
||||
%token <s_value> QUOTED_STRING
|
||||
%token <f_value> FLOAT
|
||||
%token <i_value> INT
|
||||
%token SEPARATOR DEF UN_MATERIAL DIFFUSE_COLOR COORDINATE3 INDEXED_FACE_SET
|
||||
%token A_POINT COORD_INDEX TEXTURE_COORD_INDEX NORMAL_INDEX TEXTURE_COORDINATE TEXTURE2
|
||||
%token MATRIX_TRANSFORM MATRIX
|
||||
%token LISTA_VACIA FINPOLY
|
||||
%token DOBLE_CARA
|
||||
%token VECTOR
|
||||
%token VRML_HEADER
|
||||
%token TRANSFORM
|
||||
%token USE
|
||||
|
||||
%type <vlist> points
|
||||
%type <plist> polylist
|
||||
%type <vindex> vertexilist
|
||||
%type <tcoord> coords
|
||||
%type <nodo> node_contents
|
||||
%type <nodo> node
|
||||
%type <attribute> attr
|
||||
%type <matrix> matrix
|
||||
%start vrml_file
|
||||
|
||||
|
||||
%%
|
||||
|
||||
vrml_file: VRML_HEADER node { root_node=$2; }
|
||||
;
|
||||
|
||||
node:
|
||||
UN_MATERIAL '{' node_contents '}' { $$=new Material($3); delete $3;}
|
||||
| TEXTURE2 '{' node_contents '}' { $$=new Texture2($3); delete $3;}
|
||||
| COORDINATE3 '{' A_POINT '[' points ']' '}' { $$=new Coordinate3($5); delete $5; }
|
||||
| INDEXED_FACE_SET '{' COORD_INDEX '[' polylist ']' '}' {$$=new IndexedFaceSet($5); delete $5; }
|
||||
| INDEXED_FACE_SET '{' COORD_INDEX '[' polylist ']' TEXTURE_COORD_INDEX '[' polylist ']' '}' {$$=new IndexedFaceSet($5,$9); delete $5; delete $9; }
|
||||
| INDEXED_FACE_SET '{' COORD_INDEX '[' polylist ']' NORMAL_INDEX '[' polylist ']' '}' {$$=new IndexedFaceSet($5); delete $5; delete $9; }
|
||||
| INDEXED_FACE_SET '{' DOBLE_CARA COORD_INDEX '[' polylist ']' '}' {$$=new IndexedFaceSet($6); delete $6; $$->setTwoSided(); }
|
||||
| INDEXED_FACE_SET '{' DOBLE_CARA COORD_INDEX '[' polylist ']' TEXTURE_COORD_INDEX '[' polylist ']' '}' {$$=new IndexedFaceSet($6,$10); delete $6; delete $10; $$->setTwoSided(); $$->setTwoSided(); }
|
||||
| INDEXED_FACE_SET '{' DOBLE_CARA COORD_INDEX '[' polylist ']' NORMAL_INDEX '[' polylist ']' '}' {$$=new IndexedFaceSet($6); delete $6; delete $10; $$->setTwoSided(); }
|
||||
| MATRIX_TRANSFORM '{' MATRIX matrix '}' { $$=new MatrixTransform($4); }
|
||||
| TEXTURE_COORDINATE '{' A_POINT '[' coords ']' '}' { $$=new TextureCoordinate($5); delete $5; }
|
||||
| TRANSFORM '{' node_contents '}' { $$=new Transform($3); delete $3; }
|
||||
| STRING '{' node_contents '}' { $$=$3; }
|
||||
| SEPARATOR '{' node_contents '}' {$$=new Separator($3); delete $3; }
|
||||
;
|
||||
|
||||
node_contents: { $$=new MyNode(); }
|
||||
| node_contents attr { $1->addAttribute($2->getName(), $2); $$=$1; }
|
||||
| node_contents DEF STRING node { NodeCache::addNode($3,$4); $1->addChild($4); $$=$1; }
|
||||
| node_contents node { $1->addChild($2); $$=$1; }
|
||||
| node_contents USE STRING {$1->addChild(NodeCache::getNode($3)); $$=$1; }
|
||||
| VECTOR '[' points ']' { delete $3;$$=new MyNode(); }
|
||||
;
|
||||
|
||||
points: points FLOAT FLOAT FLOAT { $1->push_back(osg::Vec3($2,$3,$4)); $$=$1; }
|
||||
| { $$=new VertexList(); }
|
||||
;
|
||||
|
||||
polylist: polylist vertexilist { $1->push_back($2);$$=$1; }
|
||||
| { $$=new PolygonList(); }
|
||||
;
|
||||
|
||||
vertexilist: INT vertexilist { $2->push_back($1);$$=$2; }
|
||||
| FINPOLY { $$=new VertexIndexList(); }
|
||||
;
|
||||
|
||||
matrix:
|
||||
FLOAT FLOAT FLOAT FLOAT
|
||||
FLOAT FLOAT FLOAT FLOAT
|
||||
FLOAT FLOAT FLOAT FLOAT
|
||||
FLOAT FLOAT FLOAT FLOAT {Matrix m; m[0]=$1; m[1]=$2; m[2]=$3;m[3]=$4;m[4]=$5;m[5]=$6;m[6]=$7;m[7]=$8;m[8]=$9;m[9]=$10;m[10]=$11;m[11]=$12;m[12]=$13;m[13]=$14;m[14]=$15;m[15]=$16; memcpy($$,m,sizeof(m));}
|
||||
|
||||
;
|
||||
|
||||
attr: STRING FLOAT { $$=new AtrFloat($1,$2); }
|
||||
| STRING STRING { $$=new AtrString($1,$2); }
|
||||
| STRING FLOAT FLOAT { $$=new AtrVec($1,$2,$3); }
|
||||
| STRING FLOAT FLOAT FLOAT { $$=new AtrVec($1,$2,$3,$4); }
|
||||
| STRING FLOAT FLOAT FLOAT FLOAT { $$=new AtrVec($1,$2,$3,$4,$5); }
|
||||
| STRING QUOTED_STRING { $$=new AtrString($1,$2); }
|
||||
;
|
||||
|
||||
coords: coords FLOAT FLOAT { $1->push_back(TextureCoordVal($2,$3));$$=$1; }
|
||||
| { $$=new TextureCoordList(); }
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
void yyerror(char *str,...)
|
||||
{
|
||||
printf("There was an error near line %d : \"%s\"!!!\n",yyline,str);fflush(stdout);
|
||||
}
|
||||
|
||||
MyNode *getRoot() { return root_node; }
|
||||
32
src/osgPlugins/iv/readerwriter.cpp
Normal file
32
src/osgPlugins/iv/readerwriter.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifdef WIN32
|
||||
# pragma warning (disable:4786)
|
||||
# pragma warning (disable:4541)
|
||||
#endif
|
||||
#include "readerwriter.h"
|
||||
#include "main.h"
|
||||
|
||||
osgDB::ReaderWriter::ReadResult VrmlReaderWriter::readNode(const std::string& fileName,
|
||||
const osgDB::ReaderWriter::Options*) {
|
||||
return readVRMLNode(fileName.c_str());
|
||||
}
|
||||
|
||||
osgDB::RegisterReaderWriterProxy<VrmlReaderWriter> g_readerWriter_VRML_Proxy;
|
||||
40
src/osgPlugins/iv/readerwriter.h
Normal file
40
src/osgPlugins/iv/readerwriter.h
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __LECTOR_ESCRITOR_H__
|
||||
#define __LECTOR_ESCRITOR_H__
|
||||
|
||||
#include <osgDB/FileNameUtils>
|
||||
#include <osgDB/Registry>
|
||||
#include <osgDB/ReadFile>
|
||||
#include <osgDB/FileUtils>
|
||||
#include <osgDB/ReaderWriter>
|
||||
|
||||
class VrmlReaderWriter: public osgDB::ReaderWriter {
|
||||
public:
|
||||
VrmlReaderWriter() { }
|
||||
virtual const char* className() { return "VRML"; }
|
||||
virtual bool acceptsExtension(const std::string& extension) {
|
||||
return osgDB::equalCaseInsensitive(extension,"wrl")
|
||||
|| osgDB::equalCaseInsensitive(extension,"iv");
|
||||
}
|
||||
virtual ReadResult readNode(const std::string& fileName,const osgDB::ReaderWriter::Options*);
|
||||
};
|
||||
|
||||
#endif
|
||||
2094
src/osgPlugins/iv/scanner.cpp
Normal file
2094
src/osgPlugins/iv/scanner.cpp
Normal file
File diff suppressed because it is too large
Load Diff
85
src/osgPlugins/iv/scanner.l
Normal file
85
src/osgPlugins/iv/scanner.l
Normal file
@@ -0,0 +1,85 @@
|
||||
%{
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
#include "mynode.h"
|
||||
#include "geometry.h"
|
||||
#include "parser.hpp"
|
||||
#include <string.h>
|
||||
int yyline=1;
|
||||
%}
|
||||
|
||||
DIGIT [0-9]
|
||||
%x cindex
|
||||
%x def
|
||||
%%
|
||||
<INITIAL,cindex>[ \t\r,]
|
||||
<INITIAL,cindex>"\n" { yyline++; }
|
||||
DEF { BEGIN def;return DEF; }
|
||||
Coordinate3 { return COORDINATE3; }
|
||||
Texture2 { return TEXTURE2; }
|
||||
Separator { return SEPARATOR; }
|
||||
Material { return UN_MATERIAL; }
|
||||
IndexedFaceSet { return INDEXED_FACE_SET; }
|
||||
TextureCoordinate2 { return TEXTURE_COORDINATE; }
|
||||
Transform { return TRANSFORM; }
|
||||
MatrixTransform { return MATRIX_TRANSFORM; }
|
||||
DobleCara { return DOBLE_CARA; }
|
||||
matrix { return MATRIX; }
|
||||
point { return A_POINT; }
|
||||
coordIndex { BEGIN cindex;return COORD_INDEX; }
|
||||
textureCoordIndex { BEGIN cindex;return TEXTURE_COORD_INDEX; }
|
||||
normalIndex { BEGIN cindex;return NORMAL_INDEX; }
|
||||
vector { return VECTOR; }
|
||||
<cindex>-1 { return FINPOLY; }
|
||||
<INITIAL,cindex>\] { BEGIN INITIAL; return ']'; }
|
||||
USE { BEGIN def;return USE; }
|
||||
"#VRML\ V1.0 ascii" { return VRML_HEADER; }
|
||||
"#Inventor\ V2.0 ascii" { return VRML_HEADER; }
|
||||
#[^\n\r]*
|
||||
"-"?{DIGIT}+"."{DIGIT}* {
|
||||
yylval.f_value=strtod(yytext,NULL);
|
||||
return FLOAT;
|
||||
}
|
||||
"-"?{DIGIT}+"."{DIGIT}*[Ee][\+-]{DIGIT}+ {
|
||||
yylval.f_value=strtod(yytext,NULL);
|
||||
return FLOAT;
|
||||
}
|
||||
"-"?{DIGIT}+[Ee][\+-]{DIGIT}+ {
|
||||
yylval.f_value=strtod(yytext,NULL);
|
||||
return FLOAT;
|
||||
}
|
||||
<INITIAL>"-"?{DIGIT}+ {
|
||||
yylval.f_value=(float)strtol(yytext,NULL,10);
|
||||
return FLOAT;
|
||||
}
|
||||
<cindex>"-"?{DIGIT}+ {
|
||||
yylval.i_value=strtol(yytext,NULL,10);
|
||||
return INT;
|
||||
}
|
||||
<INITIAL,cindex>[,{}\[\]] { return yytext[0]; }
|
||||
[a-zA-Z0-9\-\_\*]*\ *\[\]
|
||||
<INITIAL,def>[a-zA-Z0-9\-\_\*\!\.]* { BEGIN INITIAL;yylval.s_value=strdup(yytext);return STRING; }
|
||||
\"[^\"]*\" { yylval.s_value=strdup(yytext+1);yylval.s_value[strlen(yylval.s_value)-1]=0;return QUOTED_STRING; }
|
||||
|
||||
%%
|
||||
|
||||
int yywrap(void)
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
33
src/osgPlugins/iv/separator.h
Normal file
33
src/osgPlugins/iv/separator.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __SEPARATOR_H__
|
||||
#define __SEPARATOR_H__
|
||||
|
||||
#include "mynode.h"
|
||||
|
||||
class Separator: public MyNode {
|
||||
public:
|
||||
Separator() {}
|
||||
Separator(MyNode *n): MyNode(n) {}
|
||||
virtual char *type() { return "Separator"; }
|
||||
virtual void accept(MyNodeVisitor *v) { v->applySeparator(this); }
|
||||
};
|
||||
|
||||
#endif
|
||||
33
src/osgPlugins/iv/texture2.h
Normal file
33
src/osgPlugins/iv/texture2.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __TEXTURE2_H__
|
||||
#define __TEXTURE2_H__
|
||||
|
||||
#include "mynode.h"
|
||||
|
||||
class Texture2: public MyNode {
|
||||
public:
|
||||
Texture2() {}
|
||||
Texture2(MyNode *n): MyNode(n) {}
|
||||
virtual char *type() { return "Texture2"; }
|
||||
virtual void accept(MyNodeVisitor *v) { v->applyTexture2(this); }
|
||||
};
|
||||
|
||||
#endif
|
||||
37
src/osgPlugins/iv/texturecoordinate.h
Normal file
37
src/osgPlugins/iv/texturecoordinate.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __TEXTURE_COORDINATE_H__
|
||||
#define __TEXTURE_COORDINATE_H__
|
||||
|
||||
#include "mynode.h"
|
||||
|
||||
class TextureCoordinate: public MyNode {
|
||||
TextureCoordList tcoords;
|
||||
public:
|
||||
TextureCoordinate() {}
|
||||
TextureCoordinate(TextureCoordList *t) {
|
||||
tcoords=*t;
|
||||
}
|
||||
virtual char *type() { return "TextureCoordinate"; }
|
||||
virtual void accept(MyNodeVisitor *v) { v->applyTextureCoordinate(this); }
|
||||
TextureCoordList getTextureCoords() { return tcoords; }
|
||||
};
|
||||
|
||||
#endif
|
||||
33
src/osgPlugins/iv/transform.h
Normal file
33
src/osgPlugins/iv/transform.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* osgDB::wrl - a VRML 1.0 loader for OpenSceneGraph
|
||||
* Copyright (C) 2002 Ruben Lopez <ryu@gpul.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser 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
|
||||
*/
|
||||
|
||||
#ifndef __TRANSFORM_H__
|
||||
#define __TRANSFORM_H__
|
||||
|
||||
#include "mynode.h"
|
||||
|
||||
class Transform: public MyNode {
|
||||
public:
|
||||
Transform() {}
|
||||
Transform(MyNode *n): MyNode(n) {}
|
||||
virtual char *type() { return "Transform"; }
|
||||
virtual void accept(MyNodeVisitor *v) { v->applyTransform(this); }
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user