15 #include "colladaPrimitive.h"
16 #include "geomLines.h"
17 #include "geomLinestrips.h"
18 #include "geomTriangles.h"
19 #include "geomTrifans.h"
20 #include "geomTristrips.h"
23 #include "pre_collada_include.h"
24 #include <dom/domLines.h>
25 #include <dom/domLinestrips.h>
26 #include <dom/domPolygons.h>
27 #include <dom/domPolylist.h>
28 #include <dom/domTriangles.h>
29 #include <dom/domTrifans.h>
30 #include <dom/domTristrips.h>
32 #if PANDA_COLLADA_VERSION < 15
33 #define domInput_local_offsetRef domInputLocalOffsetRef
43 : _stride (1), _gprim (prim) {
45 PT(GeomVertexArrayFormat) aformat = new GeomVertexArrayFormat;
48 for (
size_t in = 0; in < inputs.getCount(); ++in) {
52 input->make_vertex_columns(aformat);
56 PT(GeomVertexFormat) format = new GeomVertexFormat();
57 format->add_array(aformat);
59 _geom = new
Geom(_vdata);
60 _geom->add_primitive(_gprim);
69 from_dom(domLines &prim) {
71 if (prim.getUserData() != NULL) {
77 prim.getInput_array());
78 new_prim->_material = prim.getMaterial();
80 prim.setUserData(new_prim);
82 domPRef p = prim.getP();
84 new_prim->load_primitive(*p);
98 if (prim.getUserData() != NULL) {
104 prim.getInput_array());
105 new_prim->_material = prim.getMaterial();
107 prim.setUserData(new_prim);
109 new_prim->load_primitives(prim.getP_array());
122 if (prim.getUserData() != NULL) {
131 prim.getInput_array());
132 new_prim->_material = prim.getMaterial();
134 prim.setUserData(new_prim);
136 new_prim->load_primitives(prim.getP_array());
138 if (prim.getPh_array().getCount() > 0) {
140 <<
"Polygons with holes are not supported!\n";
154 if (prim.getUserData() != NULL) {
165 new_prim->_material = prim.getMaterial();
167 prim.setUserData(new_prim);
169 domPRef p = prim.getP();
170 domPolylist::domVcountRef vcounts = prim.getVcount();
171 if (p == NULL || vcounts == NULL) {
175 new_prim->
write_data(new_prim->_vdata, 0, *p);
178 for (
size_t i = 0; i < values.getCount(); ++i) {
179 unsigned int vcount = values[i];
180 gprim->add_next_vertices(vcount);
181 gprim->close_primitive();
195 if (prim.getUserData() != NULL) {
201 prim.getInput_array());
202 new_prim->_material = prim.getMaterial();
204 prim.setUserData(new_prim);
206 domPRef p = prim.getP();
208 new_prim->load_primitive(*p);
222 if (prim.getUserData() != NULL) {
228 prim.getInput_array());
229 new_prim->_material = prim.getMaterial();
231 prim.setUserData(new_prim);
233 new_prim->load_primitives(prim.getP_array());
246 if (prim.getUserData() != NULL) {
252 prim.getInput_array());
253 new_prim->_material = prim.getMaterial();
255 prim.setUserData(new_prim);
257 new_prim->load_primitives(prim.getP_array());
269 unsigned int num_vertices = p.getValue().getCount() / _stride;
272 for (it = _inputs.begin(); it != _inputs.end(); ++it) {
273 (*it)->write_data(vdata, start_row, p, _stride);
284 void ColladaPrimitive::
285 load_primitive(domP &p) {
286 _gprim->add_next_vertices(write_data(_vdata, 0, p));
287 _gprim->close_primitive();
295 void ColladaPrimitive::
296 load_primitives(domP_Array &p_array) {
299 for (
size_t i = 0; i < p_array.getCount(); ++i) {
300 unsigned int num_vertices = write_data(_vdata, start_row, *p_array[i]);
301 _gprim->add_next_vertices(num_vertices);
302 _gprim->close_primitive();
303 start_row += num_vertices;
Defines a series of triangle fans.
This is an abstract base class for a family of classes that represent the fundamental geometry primit...
Defines a series of triangle strips.
This defines the actual numeric vertex data stored in a Geom, in the structure defined by a particula...
A container for geometry primitives.
Defines a series of disconnected line segments.
static ColladaPrimitive * from_dom(domLines &lines)
Returns the ColladaPrimitive object that represents the provided DOM input element.
Defines a series of line strips.
Defines a series of disconnected triangles.
Class that deals with COLLADA primitive structures, such as <triangles> and <polylist>.
unsigned int write_data(GeomVertexData *vdata, int start_row, domP &p)
Writes the vertex data to the GeomVertexData.