示例#1
0
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();
}
示例#2
0
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]);
	}
}
示例#3
0
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
}
示例#4
0
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());
        }
    }
}