| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University. All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license. You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file lwoSurface.cxx
- * @author drose
- * @date 2001-04-24
- */
- #include "lwoSurface.h"
- #include "iffInputFile.h"
- #include "lwoSurfaceBlock.h"
- #include "lwoSurfaceColor.h"
- #include "lwoSurfaceParameter.h"
- #include "lwoSurfaceSidedness.h"
- #include "lwoSurfaceSmoothingAngle.h"
- #include "indent.h"
- TypeHandle LwoSurface::_type_handle;
- /**
- * Reads the data of the chunk in from the given input file, if possible. The
- * ID and length of the chunk have already been read. stop_at is the byte
- * position of the file to stop at (based on the current position at
- * in->get_bytes_read()). Returns true on success, false otherwise.
- */
- bool LwoSurface::
- read_iff(IffInputFile *in, size_t stop_at) {
- _name = in->get_string();
- _source = in->get_string();
- read_subchunks_iff(in, stop_at);
- return true;
- }
- /**
- *
- */
- void LwoSurface::
- write(std::ostream &out, int indent_level) const {
- indent(out, indent_level)
- << get_id() << " {\n";
- indent(out, indent_level + 2)
- << "name = \"" << _name << "\", source = \"" << _source << "\"\n";
- write_chunks(out, indent_level + 2);
- indent(out, indent_level)
- << "}\n";
- }
- /**
- * Allocates and returns a new chunk of the appropriate type based on the
- * given ID, according to the context given by this chunk itself.
- */
- IffChunk *LwoSurface::
- make_new_chunk(IffInputFile *in, IffId id) {
- if (id == IffId("COLR")) {
- return new LwoSurfaceColor;
- } else if (id == IffId("DIFF") ||
- id == IffId("LUMI") ||
- id == IffId("SPEC") ||
- id == IffId("REFL") ||
- id == IffId("TRAN") ||
- id == IffId("TRNL") ||
- id == IffId("GLOS") ||
- id == IffId("SHRP") ||
- id == IffId("BUMP") ||
- id == IffId("RSAN") ||
- id == IffId("RIND")) {
- return new LwoSurfaceParameter;
- } else if (id == IffId("SIDE")) {
- return new LwoSurfaceSidedness;
- } else if (id == IffId("SMAN")) {
- return new LwoSurfaceSmoothingAngle;
- } else if (id == IffId("BLOK")) {
- return new LwoSurfaceBlock;
- } else {
- return IffChunk::make_new_chunk(in, id);
- }
- }
|