[vtkusers] Problem with SetRepresentation
paddi.m at gmx.net
paddi.m at gmx.net
Sat Jan 10 21:51:01 EST 2009
Hi,
I try to use different presentations for my actors inside VTK 5.2. As an
interactor I use the wxVTKRenderWindowInteractor. It doesn't matter
which representation I choose I always see the whole surface (like
SetRepresentationToSurface). But if I check my actor before adding it to
a renderer the vtkProperty has the right value :-(
I know it should be simple - but I don't see an error...
Thanks in advance,
Patrik
vtkProp* Im_VTKUtil::BuildMesh(Im_MeshPtr theMesh)
{
vtkProp* result = NULL;
if (theMesh)
{
Im_OSUtils theHelper;
std::string matName;
vtkProperty* vtkMaterial = NULL;
theMesh->CalcNormals();
if (theMesh->GetMaterial())
vtkMaterial = BuildMaterial(theMesh->GetMaterial(),
theMesh->GetDisplayMode());
// matName = theHelper.ToAscii(theMesh->GetMaterial()->GetName());
long nbFaces = theMesh->NbFaces();
long nbPoints = theMesh->NbVertices();
Im_Vec3D v1;
vtkPolyData *meshpoly = vtkPolyData::New();
vtkPoints *points = vtkPoints::New();
vtkCellArray *polys = vtkCellArray::New();
// vtkFloatArray *scalars = vtkFloatArray::New();
for (long i = 0; i < nbPoints; i++)
{
v1 = theMesh->GetVertex(i);
points->InsertPoint(i, v1.X(), v1.Y(), v1.Z());
}
long i1, i2, i3;
for (long i = 0; i < nbFaces; i++)
{
if (theMesh->GetFaceIndices(i1, i2, i3, i))
{
polys->InsertNextCell(3);
polys->InsertCellPoint(i1);
polys->InsertCellPoint(i2);
polys->InsertCellPoint(i3);
}
}
meshpoly->SetPoints(points);
meshpoly->SetPolys(polys);
vtkPolyDataNormals *normals = vtkPolyDataNormals::New();
normals->SetInput(meshpoly);
normals->SetFeatureAngle(60.0);
vtkPolyDataMapper *meshMapper = vtkPolyDataMapper::New();
meshMapper->SetInput(normals->GetOutput());
/*
vtkPainterPolyDataMapper * meshMapper = vtkPainterPolyDataMapper::New();
meshMapper->SetInput(normals->GetOutput());
*/
vtkActor *meshActor = vtkActor::New();
meshActor->SetMapper(meshMapper);
if (NULL != vtkMaterial)
meshActor->SetProperty(vtkMaterial);
result = meshActor;
}
return result;
}
vtkProperty* Im_VTKUtil::BuildMaterial(Im_MaterialPtr theMaterial, const
Im_Entity3D::Im_EntityDisplayMode& theDisplayMode)
{
vtkProperty* result = NULL;
if (theMaterial)
{
Im_Color tmpColor;
result = vtkProperty::New();
SetDisplayMode(result, theDisplayMode);
tmpColor = theMaterial->GetAmbient()->GetPropertyValue();
result->SetAmbientColor(tmpColor.GetRed(), tmpColor.GetGreen(),
tmpColor.GetBlue());
tmpColor = theMaterial->GetDiffuse()->GetPropertyValue();
result->SetDiffuseColor(tmpColor.GetRed(), tmpColor.GetGreen(),
tmpColor.GetBlue());
tmpColor = theMaterial->GetSpecular()->GetPropertyValue();
result->SetSpecularColor(tmpColor.GetRed(), tmpColor.GetGreen(),
tmpColor.GetBlue());
result->SetSpecularPower(theMaterial->GetShininess());
result->SetOpacity(abs(1-theMaterial->GetTransparency()));
}
return result;
}
void Im_VTKUtil::SetDisplayMode(vtkProperty* theMaterial, const
Im_Entity3D::Im_EntityDisplayMode& theDisplayMode)
{
if (NULL != theMaterial)
{
switch (theDisplayMode)
{
case Im_Entity3D::Im_Points:
theMaterial->SetRepresentationToPoints();
break;
case Im_Entity3D::Im_Box:
case Im_Entity3D::Im_WireFrame:
theMaterial->SetRepresentationToWireframe();
break;
default:
theMaterial->SetRepresentationToSurface();
break;
}
}
}
Thanks
More information about the vtkusers
mailing list