Panda3D
cLwoSurfaceBlockTMap.cxx
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file cLwoSurfaceBlockTMap.cxx
10  * @author drose
11  * @date 2001-04-30
12  */
13 
14 #include "cLwoSurfaceBlockTMap.h"
15 #include "lwoToEggConverter.h"
16 
18 #include "lwoSurfaceBlockRefObj.h"
19 #include "compose_matrix.h"
20 #include "dcast.h"
21 
22 /**
23  *
24  */
25 CLwoSurfaceBlockTMap::
26 CLwoSurfaceBlockTMap(LwoToEggConverter *converter, const LwoSurfaceBlockTMap *tmap) :
27  _converter(converter),
28  _tmap(tmap)
29 {
30  _center.set(0.0, 0.0, 0.0);
31  _size.set(1.0, 1.0, 1.0);
32  _rotation.set(0.0, 0.0, 0.0);
33  _csys = LwoSurfaceBlockCoordSys::T_object;
34  _reference_object = "(none)";
35 
36  // Scan the chunks in the body.
37  int num_chunks = _tmap->get_num_chunks();
38  for (int i = 0; i < num_chunks; i++) {
39  const IffChunk *chunk = _tmap->get_chunk(i);
40 
41  if (chunk->is_of_type(LwoSurfaceBlockTransform::get_class_type())) {
42  const LwoSurfaceBlockTransform *trans = DCAST(LwoSurfaceBlockTransform, chunk);
43  if (trans->get_id() == IffId("CNTR")) {
44  _center = trans->_vec;
45  } else if (trans->get_id() == IffId("SIZE")) {
46  _size = trans->_vec;
47  } else if (trans->get_id() == IffId("ROTA")) {
48  _rotation = trans->_vec;
49  }
50 
51  } else if (chunk->is_of_type(LwoSurfaceBlockRefObj::get_class_type())) {
52  const LwoSurfaceBlockRefObj *ref = DCAST(LwoSurfaceBlockRefObj, chunk);
53  _reference_object = ref->_name;
54 
55  } else if (chunk->is_of_type(LwoSurfaceBlockCoordSys::get_class_type())) {
56  const LwoSurfaceBlockCoordSys *csys = DCAST(LwoSurfaceBlockCoordSys, chunk);
57  _csys = csys->_type;
58  }
59  }
60 }
61 
62 /**
63  * Fills up the indicated matrix with the net transform indicated by the TMAP
64  * chunk, accounting for scale, rotate, and translate.
65  */
67 get_transform(LMatrix4d &mat) const {
68  LPoint3d hpr(rad_2_deg(_rotation[0]),
69  rad_2_deg(-_rotation[1]),
70  rad_2_deg(-_rotation[2]));
71  compose_matrix(mat, LCAST(double, _size), hpr,
72  LCAST(double, _center), CS_yup_left);
73 }
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
The tMap chunk within a LwoSurfaceBlock chunk.
void get_transform(LMatrix4d &mat) const
Fills up the indicated matrix with the net transform indicated by the TMAP chunk, accounting for scal...
Specifies whether texture coordinates are computed based on the vertices&#39; world coordinates or local ...
The basic kind of record in an EA "IFF" file, which the LightWave object file is based on...
Definition: iffChunk.h:30
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This class supervises the construction of an EggData structure from the data represented by the LwoHe...
Specifies a center point, scale, or rotation for the texture coordinates in this shader&#39;s texture map...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
bool is_of_type(TypeHandle handle) const
Returns true if the current object is or derives from the indicated type.
Definition: typedObject.I:28
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
Specifies a reference object that the texture UV&#39;s are to be computed relative to.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
A four-byte chunk ID appearing in an "IFF" file.
Definition: iffId.h:26
IffId get_id() const
Returns the ID associated with this chunk.
Definition: iffChunk.I:25