[vtkusers] Help! Using implicit function to draw Sphere and using boolean operations.

Rahul Goela rahulgoela at yahoo.com
Tue Sep 2 04:39:12 EDT 2003


Hi,

I am new to VTK. I need to create two spheres using
implicit functions and try boolien operations, such as
Union on them. 

For the starters, I tried writting a code to create a
sphere using q quadratic equation, and draw the image.


I get the following error -
--------------------------------------------------------
error C2664: 'SetInput' : cannot convert parameter 1
from 'class vtkImageData *' to 'class vtkDataSet *'
        Types pointed to are unrelated; conversion
requires reinterpret_cast, C-style cast or
function-style cast
: error C2664: 'SetInput' : cannot convert parameter 1
from 'class vtkImageData *' to 'class vtkDataSet *'
        Types pointed to are unrelated; conversion
requires reinterpret_cast, C-style cast or
function-style cast
Error executing cl.exe.
--------------------------------------------------------

My source Code is as follows -

-------------------------------------------------------
#include "vtkSphereSource.h"
#include "vtkQuadric.h"
#include "vtkSampleFunction.h"
#include "vtkContourFilter.h"
#include "vtkOutlineFilter.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkProperty.h"

void main ()
{
 	
  // -- create the quadric function object --
  // create the quadric function definition
  //F(x,y,z) = x^2 + y^2 + z^2 + R^2.
	
  vtkQuadric *quadric = vtkQuadric::New();
  quadric->SetCoefficients(1,1,1,0,0,0,0,0,0,1);

  // sample the quadric function
  vtkSampleFunction *sample =
vtkSampleFunction::New();
  sample->SetSampleDimensions(60,60,60);
  sample->SetImplicitFunction(quadric);

  // Create five surfaces F(x,y,z) = constant between
range specified
  vtkContourFilter *sphereSurface =
vtkContourFilter::New();
  sphereSurface->SetInput(sample->GetOutput());
  sphereSurface->SetValue(0, 0.0);

  // map the contours to graphical primitives
  vtkPolyDataMapper *contMapper =
vtkPolyDataMapper::New();
  contMapper->SetInput(sphereSurface->GetOutput());
  //contMapper->SetScalarRange(0.0, 1.2);

  // create an actor for the contours
  vtkActor *contActor = vtkActor::New();
  contActor->SetMapper(contMapper);

  // -- create a box around the function to indicate
the sampling volume --

  // create outline
  vtkOutlineFilter *outline = vtkOutlineFilter::New();
  outline->SetInput(sample->GetOutput());

  // map it to graphics primitives
  vtkPolyDataMapper *outlineMapper =
vtkPolyDataMapper::New();
  outlineMapper->SetInput(outline->GetOutput());

  // create an actor for it
  vtkActor *outlineActor = vtkActor::New();
  outlineActor->SetMapper(outlineMapper);
  //outlineActor->GetProperty()->SetColor(0,0,0);

  // -- render both of the objects --

  // a renderer and render window
  vtkRenderer *ren1 = vtkRenderer::New();
  vtkRenderWindow *renWin = vtkRenderWindow::New();
  renWin->AddRenderer(ren1);

  // an interactor
  vtkRenderWindowInteractor *iren =
vtkRenderWindowInteractor::New();
  iren->SetRenderWindow(renWin);

  // add the actors to the scene
  ren1->AddActor(contActor);
  ren1->AddActor(outlineActor);
  ren1->SetBackground(1,1,1); // Background color
white

  // render an image (lights and cameras are created
automatically)
  renWin->Render();

  // begin mouse interaction
  iren->Start();
}
---------------------------------------------------------

Kindly help me out as to how to solve this error. Also
if there is a web-site with some examples referring to
use of boolean Implicit function, kindly let me know.

Thanks in advance

Rahul



________________________________________________________________________
Yahoo! India Promos: Win TVs, Bikes, DVD players & more!
Go to http://in.promos.yahoo.com



More information about the vtkusers mailing list