void ElementTreeModel::setElement(vtkUnstructuredGridAlgorithm const*const grid, const unsigned elem_index) { _mesh_source = grid; this->clearView(); MeshLib::VtkMappedMeshSource const*const source = dynamic_cast<MeshLib::VtkMappedMeshSource const*const>(grid); if (!source) return; const MeshLib::Mesh* mesh = source->GetMesh(); const MeshLib::Element* elem = mesh->getElement(elem_index); QList<QVariant> elemData; elemData << "Element " + QString::number(elem_index) << "" << "" << ""; TreeItem* elemItem = new TreeItem(elemData, _rootItem); _rootItem->appendChild(elemItem); QList<QVariant> typeData; typeData << "Element Type: " << QString::fromStdString(MeshElemType2String(elem->getGeomType())); TreeItem* typeItem = new TreeItem(typeData, elemItem); elemItem->appendChild(typeItem); QList<QVariant> materialData; auto materialIds = mesh->getProperties().getPropertyVector<int>("MaterialIDs"); QString matIdString = !materialIds ? QString("not defined") : QString::number((*materialIds)[elem->getID()]); materialData << "MaterialID: " << matIdString; TreeItem* matItem = new TreeItem(materialData, elemItem); elemItem->appendChild(matItem); QList<QVariant> volData; volData << "Area/Volume: " << QString::number(mesh->getElement(elem_index)->getContent()); TreeItem* volItem = new TreeItem(volData, elemItem); elemItem->appendChild(volItem); QList<QVariant> nodeListData; nodeListData << "Nodes" << "" << "" << ""; TreeItem* nodeListItem = new TreeItem(nodeListData, elemItem); elemItem->appendChild(nodeListItem); //const std::vector<MeshLib::Node*> nodes_vec = grid->getNodes(); std::size_t nElemNodes = elem->getNumberOfBaseNodes(); for (std::size_t i = 0; i < nElemNodes; i++) { const MeshLib::Node* node = elem->getNode(i); QList<QVariant> nodeData; nodeData << "Node " + QString::number(node->getID()) << QString::number((*node)[0]) << QString::number((*node)[1]) << QString::number((*node)[2]); TreeItem* nodeItem = new TreeItem(nodeData, nodeListItem); nodeListItem->appendChild(nodeItem); } reset(); }
void ElementQualityMetric::errorMsg (Element const& elem, std::size_t idx) const { ERR ("Error in MeshQualityChecker::check() - Calculated value of element is below double precision minimum."); ERR ("Points of %s-Element %d: ", MeshElemType2String(elem.getGeomType()).c_str(), idx); for (std::size_t i(0); i < elem.getNBaseNodes(); i++) { const double* coords = elem.getNode(i)->getCoords(); ERR ("\t Node %d: (%f, %f, %f)", i, coords[0], coords[1], coords[2]); } }
const Node* Element::getNode(unsigned i) const { #ifndef NDEBUG if (i < getNumberOfNodes()) #endif return _nodes[i]; #ifndef NDEBUG ERR("Error in MeshLib::Element::getNode() - Index %d in %s", i, MeshElemType2String(getGeomType()).c_str()); return nullptr; #endif }
void EdgeRatioMetric::calculateQuality() { // get all elements of mesh const std::vector<MeshLib::Element*>& elements(_mesh.getElements()); const std::size_t nElements (_mesh.getNumberOfElements()); for (std::size_t k(0); k < nElements; k++) { Element const& elem (*elements[k]); switch (elem.getGeomType()) { case MeshElemType::LINE: _element_quality_metric[k] = 1.0; break; case MeshElemType::TRIANGLE: { _element_quality_metric[k] = checkTriangle(*elem.getNode(0), *elem.getNode(1), *elem.getNode(2)); break; } case MeshElemType::QUAD: { _element_quality_metric[k] = checkQuad(*elem.getNode(0), *elem.getNode(1), *elem.getNode(2), *elem.getNode(3)); break; } case MeshElemType::TETRAHEDRON: { _element_quality_metric[k] = checkTetrahedron(*elem.getNode(0), *elem.getNode(1), *elem.getNode(2), *elem.getNode(3)); break; } case MeshElemType::PRISM: { std::vector<const MathLib::Point3d*> pnts; for (std::size_t j(0); j < 6; j++) pnts.push_back(elem.getNode(j)); _element_quality_metric[k] = checkPrism(pnts); break; } case MeshElemType::PYRAMID: { std::vector<const MathLib::Point3d*> pnts; for (std::size_t j(0); j < 5; j++) pnts.push_back(elem.getNode(j)); _element_quality_metric[k] = checkPyramid(pnts); break; } case MeshElemType::HEXAHEDRON: { std::vector<const MathLib::Point3d*> pnts; for (std::size_t j(0); j < 8; j++) pnts.push_back(elem.getNode(j)); _element_quality_metric[k] = checkHexahedron(pnts); break; } default: ERR ("MeshQualityShortestLongestRatio::check () check for element type %s not implemented.", MeshElemType2String(elem.getGeomType()).c_str()); } } }