// Create the box mesh void GLC_Box::createMeshAndWire() { Q_ASSERT(GLC_Mesh::isEmpty()); createWire(); const GLfloat lgX= static_cast<const GLfloat>(m_dLgX / 2.0); const GLfloat lgY= static_cast<const GLfloat>(m_dLgY / 2.0); const GLfloat lgZ= static_cast<const GLfloat>(m_dLgZ / 2.0); GLfloatVector verticeVector; GLfloatVector normalsVector; GLfloatVector texelVector; // Face 1 verticeVector << -lgX; verticeVector << -lgY; verticeVector << lgZ; normalsVector << 0.0f; normalsVector << 0.0f; normalsVector << 1.0f; texelVector << 0.0f; texelVector << 0.0f; verticeVector << lgX; verticeVector << -lgY; verticeVector << lgZ; normalsVector << 0.0f; normalsVector << 0.0f; normalsVector << 1.0f; texelVector << 1.0f; texelVector << 0.0f; verticeVector << lgX; verticeVector << lgY; verticeVector << lgZ; normalsVector << 0.0f; normalsVector << 0.0f; normalsVector << 1.0f; texelVector << 1.0f; texelVector << 1.0f; verticeVector << -lgX; verticeVector << lgY; verticeVector << lgZ; normalsVector << 0.0f; normalsVector << 0.0f; normalsVector << 1.0f; texelVector << 0.0f; texelVector << 1.0f; // Face 2 verticeVector << lgX; verticeVector << -lgY; verticeVector << lgZ; normalsVector << 1.0f; normalsVector << 0.0f; normalsVector << 0.0f; texelVector << 0.0f; texelVector << 0.0f; verticeVector << lgX; verticeVector << -lgY; verticeVector << -lgZ; normalsVector << 1.0f; normalsVector << 0.0f; normalsVector << 0.0f; texelVector << 1.0f; texelVector << 0.0f; verticeVector << lgX; verticeVector << lgY; verticeVector << -lgZ; normalsVector << 1.0f; normalsVector << 0.0f; normalsVector << 0.0f; texelVector << 1.0f; texelVector << 1.0f; verticeVector << lgX; verticeVector << lgY; verticeVector << lgZ; normalsVector << 1.0f; normalsVector << 0.0f; normalsVector << 0.0f; texelVector << 0.0f; texelVector << 1.0f; // Face 3 verticeVector << -lgX; verticeVector << -lgY; verticeVector << -lgZ; normalsVector << -1.0f; normalsVector << 0.0f; normalsVector << 0.0f; texelVector << 0.0f; texelVector << 0.0f; verticeVector << -lgX; verticeVector << -lgY; verticeVector << lgZ; normalsVector << -1.0f; normalsVector << 0.0f; normalsVector << 0.0f; texelVector << 1.0f; texelVector << 0.0f; verticeVector << -lgX; verticeVector << lgY; verticeVector << lgZ; normalsVector << -1.0f; normalsVector << 0.0f; normalsVector << 0.0f; texelVector << 1.0f; texelVector << 1.0f; verticeVector << -lgX; verticeVector << lgY; verticeVector << -lgZ; normalsVector << -1.0f; normalsVector << 0.0f; normalsVector << 0.0f; texelVector << 0.0f; texelVector << 1.0f; // Face 4 verticeVector << lgX; verticeVector << -lgY; verticeVector << -lgZ; normalsVector << 0.0f; normalsVector << 0.0f; normalsVector << -1.0f; texelVector << 0.0f; texelVector << 0.0f; verticeVector << -lgX; verticeVector << -lgY; verticeVector << -lgZ; normalsVector << 0.0f; normalsVector << 0.0f; normalsVector << -1.0f; texelVector << 1.0f; texelVector << 0.0f; verticeVector << -lgX; verticeVector << lgY; verticeVector << -lgZ; normalsVector << 0.0f; normalsVector << 0.0f; normalsVector << -1.0f; texelVector << 1.0f; texelVector << 1.0f; verticeVector << lgX; verticeVector << lgY; verticeVector << -lgZ; normalsVector << 0.0f; normalsVector << 0.0f; normalsVector << -1.0f; texelVector << 0.0f; texelVector << 1.0f; // Face 5 verticeVector << -lgX; verticeVector << lgY; verticeVector << lgZ; normalsVector << 0.0f; normalsVector << 1.0f; normalsVector << 0.0f; texelVector << 0.0f; texelVector << 0.0f; verticeVector << lgX; verticeVector << lgY; verticeVector << lgZ; normalsVector << 0.0f; normalsVector << 1.0f; normalsVector << 0.0f; texelVector << 1.0f; texelVector << 0.0f; verticeVector << lgX; verticeVector << lgY; verticeVector << -lgZ; normalsVector << 0.0f; normalsVector << 1.0f; normalsVector << 0.0f; texelVector << 1.0f; texelVector << 1.0f; verticeVector << -lgX; verticeVector << lgY; verticeVector << -lgZ; normalsVector << 0.0f; normalsVector << 1.0f; normalsVector << 0.0f; texelVector << 0.0f; texelVector << 1.0f; // Face 6 verticeVector << -lgX; verticeVector << -lgY; verticeVector << -lgZ; normalsVector << 0.0f; normalsVector << -1.0f; normalsVector << 0.0f; texelVector << 0.0f; texelVector << 0.0f; verticeVector << lgX; verticeVector << -lgY; verticeVector << -lgZ; normalsVector << 0.0f; normalsVector << -1.0f; normalsVector << 0.0f; texelVector << 1.0f; texelVector << 0.0f; verticeVector << lgX; verticeVector << -lgY; verticeVector << lgZ; normalsVector << 0.0f; normalsVector << -1.0f; normalsVector << 0.0f; texelVector << 1.0f; texelVector << 1.0f; verticeVector << -lgX; verticeVector << -lgY; verticeVector << lgZ; normalsVector << 0.0f; normalsVector << -1.0f; normalsVector << 0.0f; texelVector << 0.0f; texelVector << 1.0f; // Add bulk data in to the mesh GLC_Mesh::addVertice(verticeVector); GLC_Mesh::addNormals(normalsVector); GLC_Mesh::addTexels(texelVector); // Set the material to use GLC_Material* pMaterial; if (hasMaterial()) { pMaterial= this->firstMaterial(); } else { pMaterial= new GLC_Material(); } IndexList index; // Face 1 index << 0 << 1 << 3 << 2; GLC_Mesh::addTrianglesStrip(pMaterial, index); index.clear(); // Face 2 index << 4 << 5 << 7 << 6; GLC_Mesh::addTrianglesStrip(pMaterial, index); index.clear(); // Face 3 index << 8 << 9 << 11 << 10; GLC_Mesh::addTrianglesStrip(pMaterial, index); index.clear(); // Face 4 index << 12 << 13 << 15 << 14; GLC_Mesh::addTrianglesStrip(pMaterial, index); index.clear(); // Face 5 index << 16 << 17 << 19 << 18; GLC_Mesh::addTrianglesStrip(pMaterial, index); index.clear(); // Face 6 index << 20 << 21 << 23 << 22; GLC_Mesh::addTrianglesStrip(pMaterial, index); index.clear(); GLC_Mesh::finish(); }
//Load TSM file GLC_World GLWidget::loadTSMFile( const QString &filename ) { RhBuilderPtr reader = makePtr<RhBuilder>(filename.toStdString()); TSplinePtr spline = reader->findTSpline(); GLC_World w; IndexList face; QList<float> vertex; QList<float> normal; TTessellator tessellator(spline); TImagePtr image = spline->getTImage(); // Go through all the faces in TImage and create abjects TFacVIterator fiter = image->faceIteratorBegin(); for (;fiter!=image->faceIteratorEnd();fiter++) { TFacePtr tface = *fiter; TriMeshPtr trimesh = tessellator.interpolateFace(tface); P3dVIterator piter = trimesh->pointIteratorBegin(); for (piter;piter!=trimesh->pointIteratorEnd();piter++) { vertex.push_back((*piter)->x()); vertex.push_back((*piter)->y()); vertex.push_back((*piter)->z()); } N3dVIterator niter = trimesh->normalIteratorBegin(); for (;niter!=trimesh->normalIteratorEnd();niter++) { normal.push_back((*niter)->i()); normal.push_back((*niter)->j()); normal.push_back((*niter)->k()); } TriVIterator titer = trimesh->triangleIteratorBegin(); for (;titer!=trimesh->triangleIteratorEnd();titer++) { face.push_back((*titer)->point_indices[0]); face.push_back((*titer)->point_indices[1]); face.push_back((*titer)->point_indices[2]); } GLC_Mesh* glc_mesh = new GLC_Mesh(); glc_mesh->addTriangles(0,face); face.clear(); glc_mesh->addVertice(vertex.toVector()); vertex.clear(); glc_mesh->addNormals(normal.toVector()); normal.clear(); glc_mesh->finish(); GLC_3DRep *rep = new GLC_3DRep(glc_mesh); glc_mesh = NULL; // Set the material GLC_Material* pCurrentMat= NULL; pCurrentMat= rep->geomAt(0)->firstMaterial(); pCurrentMat->setAmbientColor(Qt::gray); pCurrentMat->setDiffuseColor(Qt::gray); // Add objects (faces) to the world collection w.collection()->add(*rep); } return w; }