[vtkusers] Problems reading EnSight data
Hector Diez
hedicu at gmail.com
Tue Nov 20 11:33:30 EST 2007
Hi all,
I tried to translate the tcl example
http://public.kitware.com/cgi-bin/viewcvs.cgi/*checkout*/Graphics/Testing/Tcl/EnSight6Elements.tcl?root=VTK&content-type=text/plain
into c++ and the compiler says that the SetDefaultExecutivePrototype
method is protected in the vtkAlgorithm class. So i wrote a small
subclass of vtkAlgorithm and now I can call that function. The problem
I get now during runtime is
ERROR: In $VTK/Filtering/vtkDemandDrivenPipeline.cxx, line 710
vtkCompositeDataPipeline (0x15128d0): Input port 0 of algorithm
vtkGeometryFilter(0x1512710) has 0 connections but is not optional.
Do you have any idea of what am I doing wrong?
Here is the code:
#include <vtkRenderer.h>
#include <vtkCarbonRenderWindow.h>
#include <vtkGenericEnSightReader.h>
#include <vtkEnSightGoldReader.h>
#include <vtkCompositeDataPipeline.h>
#include <vtkGeometryFilter.h>
#include <vtkArrayCalculator.h>
#include <vtkHierarchicalPolyDataMapper.h>
#include <vtkActor.h>
#include "/home/diez/libspcnav/vtkSpcNavInteractor.h"
class MyAlgorithm : public vtkAlgorithm {
public:
MyAlgorithm() {}
~MyAlgorithm(){}
static void SetDefaultExecutivePrototype(vtkExecutive* proto){
{
if (MyAlgorithm::DefaultExecutivePrototype == proto)
{
return;
}
if (MyAlgorithm::DefaultExecutivePrototype)
{
MyAlgorithm::DefaultExecutivePrototype->UnRegister(0);
MyAlgorithm::DefaultExecutivePrototype = 0;
}
proto->Register(0);
MyAlgorithm::DefaultExecutivePrototype = proto;
}
}
};
int main() {
// create a rendering window and renderer
vtkRenderer *ren1 = vtkRenderer::New();
vtkCarbonRenderWindow *renWin = vtkCarbonRenderWindow::New();
renWin->AddRenderer(ren1);
renWin->StereoCapableWindowOn();
vtkSpcNavInteractor *spcnav = new vtkSpcNavInteractor();
spcnav->SetRenderWindow(renWin);
spcnav->SetRotationVelocity(0.00008,0.00008,0.00008);
spcnav->SetTranslationVelocity(0.008,0.009,0.008);
vtkEnSightGoldReader *reader = vtkEnSightGoldReader::New();
// Make sure all algorithms use the composite data pipeline
vtkCompositeDataPipeline *cdp = vtkCompositeDataPipeline::New();
//MyAlgorithm *myalg = new MyAlgorithm();
MyAlgorithm::SetDefaultExecutivePrototype(cdp);
cdp->Delete();
reader->SetCaseFileName("$vtkdata/Data/EnSight/elements6.case");
reader->Update();
vtkGeometryFilter *geom = vtkGeometryFilter::New();
geom->SetInputConnection(reader-> GetOutputPort());
vtkArrayCalculator *calc = vtkArrayCalculator::New();
calc-> SetInputConnection(geom-> GetOutputPort());
calc-> SetAttributeModeToUsePointData();
calc-> SetFunction("pointCVectors_r . pointCVectors_i + pointScalars");
calc-> AddScalarArrayName("pointScalars", 0);
calc-> AddVectorArrayName("pointCVectors_r", 0, 1, 2);
calc-> AddVectorArrayName("pointCVectors_i", 0, 1, 2);
calc-> SetResultArrayName("test");
vtkHierarchicalPolyDataMapper *mapper = vtkHierarchicalPolyDataMapper::New();
mapper-> SetInputConnection(calc-> GetOutputPort());
mapper-> SetColorModeToMapScalars();
mapper-> SetScalarModeToUsePointFieldData();
mapper-> ColorByArrayComponent("test", 0);
mapper-> SetScalarRange(0, 36000);
vtkActor *actor = vtkActor::New();
actor-> SetMapper(mapper);
// assign our actor to the renderer
ren1-> AddActor(actor);
renWin-> Render();
spcnav->Start();
}
Thank you.
Hector.
More information about the vtkusers
mailing list