hello,
I have tried to follow the article in the manual about reading from existing geometry data.
I seem to have a problem though.
here is some code
NodePathCollection nodePathCollection = environ.find_all_matches("**/+GeomNode");
for (int i = 0; i < nodePathCollection.size(); ++i)
{
NodePath nodePath = nodePathCollection[i];
PT(GeomNode) geomNode = nodePath.node();
ProcessGeomNode(geomNode);
}
and here
void ProcessPrimitive(CPT(GeomPrimitive) prim, CPT(GeomVertexData) data)
{
GeomVertexReader vertex = GeomVertexReader(data, "vertex");
prim = prim->decompose();
for (int p = 0; p < prim->get_num_primitives(); ++p)
{
int start = prim->get_primitive_start(p);
int end = prim->get_primitive_end(p);
for (int i = start; i < end; ++i)
{
int vertID = prim->get_vertex(i);
vertex.set_row(vertID);
std::cout << "primitive" << p << "has vertex " << vertID << "\n";
}
}
}
void ProcessVertexData(CPT(GeomVertexData) data)
{
GeomVertexReader vertex = GeomVertexReader(data, "vertex");
GeomVertexReader texcoord = GeomVertexReader(data, "texcoord");
unsigned int index = 0;
while (!vertex.is_at_end())
{
const LVecBase3f& v = vertex.get_data3f();
const LVecBase2f& t = texcoord.get_data2f();
std::cout << "v" << index << "[" << v.get_x() << "," << v.get_y() << "," << v.get_z() << "]\n";
++index;
}
}
void ProcessGeom(CPT(Geom) geom)
{
CPT(GeomVertexData) vdata = geom->get_vertex_data();
ProcessVertexData(vdata);
for (int i = 0; i < geom->get_num_primitives(); ++i)
{
CPT(GeomPrimitive) prim = geom->get_primitive(i);
ProcessPrimitive(prim, vdata);
}
}
void ProcessGeomNode(PT(GeomNode) geomNode)
{
for (int i = 0; i < geomNode->get_num_geoms(); ++i)
{
CPT(Geom) geom = geomNode->get_geom(i);
ProcessGeom(geom);
}
}
this fails with
error C2440: ‘initializing’ : cannot convert from ‘PandaNode *’ to ‘PointerTo’
on this line PT(GeomNode) geomNode = nodePath.node();
i was wondering if I need to do it like this instead
GeomNode* geomNode = static_cast<GeomNode*>(nodePath.node());
also anyone knows if my code looks correct ?
Chrys