[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