[vtkusers] SetAbortCheckMethod in VC++ doesn´t work!!!

Jose Manjon jmanjon at fis.upv.es
Wed Nov 28 05:58:21 EST 2001


Hi there,

I am trying to use SetAbortCheckMethod() in VC++ but no way.

program runs OK but I can not interact with volume in any time until last LOD is acheived (SetAbortCheckMethod doesn´t works)

has anyone experience with this problem???

how can I do it????

jose

The code is this:

// Cheching abort

void CheckAbort(void *arg)
{
  C3DView * vis=(C3DView *)arg;
  int foo=((vtkRenderWindow*) vis->GetParent())->GetEventPending();
  if(foo!=0) ((vtkRenderWindow*) vis->GetParent())->SetAbortRender(1);
}

// Setting abortmethod and displaying data

void C3DView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
 C3DDoc *doc = (C3DDoc *) GetDocument();
 CXSEGDoc * pDoc=doc->pDoc;

 if(data==NULL)
 {
  CChildFrame *ven=(CChildFrame *)GetParentFrame();
      ven->m_estado.ShowWindow(SW_HIDE);
        ven->SetWindowPos(NULL, 0, 0,500,500,SWP_NOMOVE | SWP_NOZORDER);

  // leo los datos

  double factor=1;
  if(doc->subsampling) factor=0.5;

  data=vtkStructuredPoints::New();
  data->SetDimensions(pDoc->m_ani[0].Rows*factor,pDoc->m_ani[0].Columns*factor,pDoc->fuentes*doc->resz*factor);
  data->SetScalarType(VTK_UNSIGNED_SHORT);
  data->SetNumberOfScalarComponents(1);
  data->AllocateScalars();

        unsigned short * ptr=(unsigned short *) data->GetScalarPointer();

  int inc=1/factor;
  int ima=(factor==0.5 && pDoc->fuentes%2!=0)?pDoc->fuentes-1:pDoc->fuentes;

  for(int i=0;i<ima*doc->resz;i+=inc)
  for(int y=0;y<pDoc->m_ani[0].Columns;y+=inc)
  for(int x=0;x<pDoc->m_ani[0].Rows;x+=inc)
  {
     if(doc->objeto==0) *ptr++ = pDoc->m_ani[i/doc->resz].Bitmap[y*pDoc->m_ani[0].Rows+x];
     if(doc->objeto==1)
     {
             if(pDoc->m_ani[i/doc->resz].Mascara[y*pDoc->m_ani[0].Rows+x]>=1) *ptr++ =
pDoc->m_ani[i/doc->resz].Bitmap[y*pDoc->m_ani[0].Rows+x];
    else *ptr++ =0;
     }
     if(doc->objeto==2)
     {
             if(pDoc->m_ani[i/doc->resz].Mascara[y*pDoc->m_ani[0].Rows+x]==0) *ptr++ =
pDoc->m_ani[i/doc->resz].Bitmap[y*pDoc->m_ani[0].Rows+x];
    else *ptr++ =0;
     }
  }

  plano=vtkPlane::New();
        plano->SetOrigin(factor*pDoc->m_ani[0].Columns/2,factor*pDoc->m_ani[0].Rows/2,factor*pDoc->fuentes/2);
     plano->SetNormal(0,0,-1);

  ancho=factor*pDoc->m_ani[0].Columns;
  alto=factor*pDoc->m_ani[0].Rows;
  fuentes=factor*pDoc->fuentes;

  // creo el modelo

        volumeLOD=vtkLODProp3D::New();

  // Create a transfer function mapping scalar value to opacity
        vtkPiecewiseFunction *opacity = vtkPiecewiseFunction::New();
        opacity->AddPoint(30.0,0.0);
     opacity->AddPoint(255,1.0);

  vtkColorTransferFunction *colorTransferFunction=vtkColorTransferFunction::New();
  if(doc->color==1)
  {
          colorTransferFunction->AddRGBPoint(0.0,0.0,0.0,0.0);
          colorTransferFunction->AddRGBPoint(255.0,1.0,1.0,1.0);
  }
  else
  {
          colorTransferFunction->AddRGBPoint(0.0,0.0,0.0,0.0);
          colorTransferFunction->AddRGBPoint(30.0,0.0,0.0,0.0);
    colorTransferFunction->AddRGBPoint(60.0,0.7,0.5,0.0);
          colorTransferFunction->AddRGBPoint(255.0,1.0,1.0,1.0);
  }

        // Create a property for the volume and set the transfer functions.
        vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New();
        volumeProperty->SetColor(colorTransferFunction);
        volumeProperty->SetScalarOpacity(opacity);

        // LOD Level of detail

        vtkImageResample *resampler1=vtkImageResample::New();
        resampler1->SetInput(data);
        resampler1->SetAxisMagnificationFactor(0,0.2);
        resampler1->SetAxisMagnificationFactor(1,0.2);
        resampler1->SetAxisMagnificationFactor(2,0.2);

        vtkImageResample *resampler2=vtkImageResample::New();
        resampler2->SetInput(data);
        resampler2->SetAxisMagnificationFactor(0,0.6);
        resampler2->SetAxisMagnificationFactor(1,0.6);
        resampler2->SetAxisMagnificationFactor(2,0.6);

        lowresMapper=vtkVolumeTextureMapper2D::New();
        lowresMapper->SetInput(resampler1->GetOutput());

        medresMapper=vtkVolumeTextureMapper2D::New();
        medresMapper->SetInput(resampler2->GetOutput());

        hiresMapper=vtkVolumeTextureMapper2D::New();
        hiresMapper->SetInput(data);

  // LOD

        id1=volumeLOD->AddLOD(lowresMapper,volumeProperty,0.0);
        id2=volumeLOD->AddLOD(medresMapper,volumeProperty,0.0);
        id3=volumeLOD->AddLOD(hiresMapper,volumeProperty,0.0);

  // check method



  ((vtkRenderWindow*)GetParent())->SetAbortCheckMethod(CheckAbort,this);



  // añado el modelo a la ventana

        this->Renderer->AddProp(volumeLOD);
        this->Renderer->ResetCamera();
 }

 this->vtkMFCRenderView::OnUpdate(pSender, lHint, pHint);
}

----------------------------------------------------------
Jose Vicente Manjón Herrera
GIM (Group of Medical Informatics)
Applied Physics Department
Technical University of Valencia
46022 Valencia (SPAIN)
----------------------------------------------------------





More information about the vtkusers mailing list