adds a point to the point table
| 124 | |
| 125 | // adds a point to the point table |
| 126 | PointId ObjReader::addPoint(PointViewPtr view, VTN vertex) |
| 127 | { |
| 128 | XYZW v, t, n; |
| 129 | PointRef pt = view->point(m_index); |
| 130 | m_index++; |
| 131 | |
| 132 | int64_t vertexIndex = std::get<0>(vertex) - 1; |
| 133 | if (vertexIndex < 0 || (size_t)vertexIndex >= m_vertices.size()) |
| 134 | throwError("Vertex index '" + std::to_string(vertexIndex + 1) + "` specified " |
| 135 | "for face doesn't exist."); |
| 136 | v = m_vertices.at(vertexIndex); |
| 137 | pt.setField(Dimension::Id::X, v.x); |
| 138 | pt.setField(Dimension::Id::Y, v.y); |
| 139 | pt.setField(Dimension::Id::Z, v.z); |
| 140 | pt.setField(Dimension::Id::W, v.w); |
| 141 | |
| 142 | int64_t textureIndex = std::get<1>(vertex) - 1; |
| 143 | if (textureIndex >= 0) { |
| 144 | if ((size_t)textureIndex >= m_textureVertices.size()) |
| 145 | throwError("Texture vertex index '" + std::to_string(textureIndex + 1) + "' specified " |
| 146 | "for face doesn't exist."); |
| 147 | t = m_textureVertices.at(textureIndex); |
| 148 | pt.setField(Dimension::Id::TextureU, t.x); |
| 149 | pt.setField(Dimension::Id::TextureV, t.y); |
| 150 | pt.setField(Dimension::Id::TextureW, t.z); |
| 151 | } |
| 152 | |
| 153 | int64_t normalIndex = std::get<2>(vertex) - 1; |
| 154 | if (normalIndex >= 0) { |
| 155 | if ((size_t)normalIndex >= m_normalVertices.size()) |
| 156 | throwError("Normal vertex index '" + std::to_string(normalIndex + 1) + "' specified " |
| 157 | "for face doesn't exist."); |
| 158 | n = m_normalVertices.at(normalIndex); |
| 159 | pt.setField(Dimension::Id::NormalX, n.x); |
| 160 | pt.setField(Dimension::Id::NormalY, n.y); |
| 161 | pt.setField(Dimension::Id::NormalZ, n.z); |
| 162 | } |
| 163 | return pt.pointId(); |
| 164 | } |
| 165 | |
| 166 | void ObjReader::newVertex(double x, double y, double z) |
| 167 | { |
no test coverage detected