VisualizationToolkit - Meshresolution, Cells

  • hallo

    ich habe durch einlesen über vtkObjReader, weiterverarbeitet mit vtkTriangleFilter, vtkdecimate, vtkPolyDataNormals eine vtkpolydata, und ich möchte daraus den median der meshmaschenweite(abstand zwischen den einzelnen punkten) berechnen, bin mit aber nicht im klaren wie ich vorgehen soll. das soll als mass für die Resolution dienen (eine bereits implementierte methode habe ich nicht gefunden)

    cPoints=ViewNormals->GetOutput()->GetNumberOfCells();
    for(ID=0;ID<cPoints;ID++)
    {
    ViewNormals->GetOutput()->GetCell(ID,cell);
    cell->GetEdge(ID); //cell..vtkCell
    length[ID]=sqrt(cell->GetEdge(ID)->GetLength2()); //length..floatarray
    }

    ich bin mit jetzt nicht sicher ob der code stimmt, ich hab das feld ausgegeben und da gibts für gewissen feldelemente unmögliche (extrem große) werte, wo ich mir denk, der liest halt grad was zufällig am speicherplatz steht. Ich habe zweifel ob es richtig ist, die schleife über alle zellen laufen zu lassen. Kommt jede Kante genau einmal vor..?

    edge=cell->GetNumberOfEdges();

    habe ich versucht, liefert den wert 3. ich nehme mal an, dass das so sein muss weil ich vtkTriangleFilter angewendet habe.

    leider werd ich aus der Doku auch nicht mehr schlauer. freu mich über tipps

    danke
    markus

  • eine lösung, die ich gefunden habe:

    int i,k,l,edge,e=0;
    float dummy,median;
    float fBounds[6];
    vtkFloatArray *length = vtkFloatArray::New();
    vtkGenericCell *cell = vtkGenericCell::New();

    length->SetNumberOfTuples(1);
    for(i=0;i<ViewNormals->GetOutput()->GetNumberOfCells();i++)
    {
    ViewNormals->GetOutput()->GetCell(i,cell);
    for (edge=0;edge<cell->GetNumberOfEdges();edge++)
    {
    cell->GetEdge(edge);
    cell->GetEdge(edge)->GetBounds(fBounds);
    length->InsertNextValue(sqrt(pow(fBounds[1]-fBounds[0],2)+pow(fBounds[3]-fBounds[2],2)+pow(fBounds[5]-fBounds[4],2)));
    e++;
    }
    }

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!