Shape Shape::createShape( ShapeType type, float size /* = 1.0f */, float texturing /* = 2.0f */, int resolution /* = 16 */, float width /* = 0.0f */, float height /* = 0.0f */, float depth /* = 0.0f */) { this->setSize(size); this->setResolution(resolution); switch (type) { case SPHERE: this->setVertices(createSphere(size, resolution, true)); break; case PYRAMID: this->setVertices(createPyramid(size, texturing)); break; case TETRAHEDRON: this->setVertices(createTetrahedron(size, texturing)); break; case CUBOID: this->setVertices(createCuboid(size, width, height, depth, texturing)); break; default: break; } this->setMesh(Mesh(this->m_vertices, this->m_vertices.size())); return *(this); }
void readGeometry(scene_data* scene, const boost::property_tree::ptree& pt) { boost::property_tree::ptree::const_iterator iter = pt.begin(); for (; iter != pt.end(); ++iter) { std::string name = iter->first; geometry* geom; if (name == "cube") geom = createBox(); else if (name == "tetrahedron") geom = createTetrahedron(); else if (name == "pyramid") geom = createPyramid(); else if (name == "disk") { int slices = iter->second.get_child("slices").get_value<int>(); geom = createDisk(slices); } else if (name == "cylinder") { int slices = iter->second.get_child("slices").get_value<int>(); int stacks = iter->second.get_child("stacks").get_value<int>(); geom = createCylinder(stacks, slices); } else if (name == "sphere") { int slices = iter->second.get_child("slices").get_value<int>(); int stacks = iter->second.get_child("stacks").get_value<int>(); geom = createSphere(stacks, slices); } else if (name == "torus") { float radius = iter->second.get_child("radius").get_value<float>(); int slices = iter->second.get_child("slices").get_value<int>(); int stacks = iter->second.get_child("stacks").get_value<int>(); geom = createTorus(radius, stacks, slices); } else if (name == "plane") { int width = iter->second.get_child("width").get_value<int>(); int depth = iter->second.get_child("depth").get_value<int>(); geom = createPlane(width, depth); } else if (name == "sierpinski") { int divisions = iter->second.get_child("divisions").get_value<int>(); geom = createSierpinski(divisions); } else { std::cerr << "Error - Geometry type not recognised: " << name << std::endl; exit(EXIT_FAILURE); } scene->geometry[name] = geom; } }