std::map / OpenMesh / Debug Error



  • Hallo,

    ich habe ein Problem mit OpenMesh welches ich nicht gelöst kriege.

    Es geht um eine eine Punkteliste im QString Format, für dich ich jeweils ein VertexHandle abspeichere und meinem Mesh hinzufüge.

    Es erfolgt eine Prüfung auf doppelte Punkte. Jede Facette ist temporär in einem Vector bestehend aus Vertex_Handles definiert und wird darüber trianguliert.

    In meinem Header definiert:

    typedef OpenMesh::PolyMesh_ArrayKernelT<>  MyMesh;
    typedef pair<QString, MyMesh::VertexHandle> Points_pair;
    
    class ...
    {
    private:
    map<QString,MyMesh::VertexHandle> pList;
    }
    

    Source-Datei:

    void QtDOMParser::addPolygon(const QDomElement &e, MyMesh &mesh)
    {
    	QString content;
    
    	QStringList coords;
    	QDomNodeList childNodes = e.childNodes();
    
    	vector<MyMesh::VertexHandle>  vertex_vhandles;
    	MyMesh::VertexHandle vHandle;
    
    	for (int i = 0; i < childNodes.length();i++)
    	{
    		QDomElement temp = childNodes.at(i).toElement();
    		if(temp.tagName() == "pos")
    		{
    			content = temp.text(); //QString of Point
    
    			map<QString, MyMesh::VertexHandle>::iterator iter = pList.find(content);
    			if(iter != pList.end())
    			{
    				vertex_vhandles.push_back(pList[content]);
    
    			}
    			else //Punkt noch nicht vorhanden
    			{
    				coords = content.split(' ');
    				vHandle = mesh.add_vertex(MyMesh::Point(coords.at(0).toDouble(),coords.at(1).toDouble(),coords.at(2).toDouble()));
    				pList.insert(Points_pair(content,vHandle));
    				vertex_vhandles.push_back(vHandle);
    				cout << "kein doppelter Punkt" << endl;
    			}
    		}
    
    	}
    	mesh.triangulate(mesh.add_face(vertex_vhandles)); // In dieser Zeile stürzt er ab -> Debug Error
    }
    

    Ich hatte sowas vorher schon in ähnlicher Form, nur ohne Überprüfung. Daher kann ich sagen, dass die Triangulierung und auch der Vector gültig sind.

    Meine Vermutung liegt eher auf dem vHandle. Eine Überwachung zeigte nur index Werte an. VertexHandles wurden anscheinend gar nicht eingetragen. Qstring aus Punktewerten dagegen schon.

    Versteht jmd den Fehler und kann mir sagen wie ich ihn zu lösen habe?


Anmelden zum Antworten