KWHelloWorldExample-alex.cxx: Difference between revisions
From KitwarePublic
Jump to navigationJump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
<pre><nowiki># | <pre><nowiki>#include "vtkKWApplication.h" | ||
# | #include "vtkKWWindowBase.h" | ||
# | #include "vtkKWLabel.h" | ||
#include "vtkKWFrame.h" | |||
#include "vtkKWRenderWidget.h" | |||
#include "vtkKWHistogram.h" | |||
#include "vtkKWPiecewiseFunctionEditor.h" | |||
# | #include <vtksys/SystemTools.hxx> | ||
# | #include <vtksys/CommandLineArguments.hxx> | ||
#include "itkImageToVTKImageFilter.h" | |||
#include "itkImage.h" | #include "itkImage.h" | ||
#include "itkImageFileReader.h" | #include "itkImageFileReader.h" | ||
#include "vtkRenderer.h" | |||
#include "vtkPiecewiseFunction.h" | |||
#include "vtkVolumeProperty.h" | |||
#include "vtkVolume.h" | |||
#include "vtkVolumeRayCastCompositeFunction.h" | |||
#include "vtkFixedPointVolumeRayCastMapper.h" | |||
#include "vtkCamera.h" | |||
#include "vtkPointData.h" | |||
int | int my_main(int argc, char *argv[]) | ||
{ | { | ||
if( | // Initialize Tcl | ||
Tcl_Interp *interp = vtkKWApplication::InitializeTcl(argc, argv, &cerr); | |||
if (!interp) | |||
{ | { | ||
cerr << "Error: InitializeTcl failed" << endl ; | |||
return 1; | return 1; | ||
} | } | ||
// | // Load the Image via ITK | ||
const unsigned int Dimension = 3; | |||
const | typedef unsigned char InputPixelType; | ||
typedef unsigned char | |||
typedef itk::Image<InputPixelType, Dimension> InputImageType; | |||
typedef itk::ImageFileReader<InputImageType> ReaderType; | |||
ReaderType::Pointer reader = ReaderType::New(); | ReaderType::Pointer reader = ReaderType::New(); | ||
// reader->SetFileName( "/home/alex/interp/61457548-roi-8bit.tif" ); | |||
reader->SetFileName( "/home/alex/interp/61457548-roi-8bit-x4-ga-40-0.05-10-no_edges.tif" ); | |||
reader-> | try | ||
{ | |||
reader->Update(); | |||
} | |||
catch( itk::ExceptionObject & excep ) | |||
{ | |||
std::cerr << "Exception while reading input!"<< std::endl; | |||
std::cerr << excep << std::endl; | |||
} | |||
typedef itk::ImageToVTKImageFilter<InputImageType> FilterType; | |||
FilterType::Pointer imtoimfilt = FilterType::New(); | |||
typedef itk:: | imtoimfilt->SetInput( reader->GetOutput() ); | ||
try | |||
{ | |||
imtoimfilt->Update(); | |||
} | |||
// | catch( itk::ExceptionObject & except) | ||
{ | |||
std::cerr << "Exception while converting!"<< std::endl; | |||
std::cerr << except << std::endl; | |||
} | |||
// Create transfer mapping scalar value to opacity | |||
vtkPiecewiseFunction *opacTransFunc = vtkPiecewiseFunction::New(); | |||
opacTransFunc->AddPoint(0, 1.0); | |||
opacTransFunc->AddPoint(100, 0.0); | |||
opacTransFunc->AddPoint(255, 0.0); | |||
// The property describes how the data will look | |||
vtkVolumeProperty *vp = vtkVolumeProperty::New(); | |||
vp->SetScalarOpacity(opacTransFunc); | |||
vp->ShadeOn(); | |||
vp->SetInterpolationTypeToLinear(); | |||
vtkFixedPointVolumeRayCastMapper *rcm = vtkFixedPointVolumeRayCastMapper::New(); | |||
rcm->SetInput( imtoimfilt->GetOutput()); | |||
// The volume holds the mapper and the property and | |||
// can be used to position/orient the volume | |||
vtkVolume *volHead= vtkVolume::New(); | |||
volHead->SetMapper(rcm); | |||
volHead->SetProperty(vp); | |||
// Create the application | |||
// If --test was provided, ignore all registry settings, and exit silently | |||
// Restore the settings that have been saved to the registry, like | |||
// the geometry of the user interface so far. | |||
vtkKWApplication *app = vtkKWApplication::New(); | |||
app->SetName("KWHelloWorldExample-alex"); | |||
app->RestoreApplicationSettingsFromRegistry(); | |||
// Set a help link. Can be a remote link (URL), or a local file | |||
// vtksys::SystemTools::GetFilenamePath(__FILE__) + "/help.html"; | |||
app->SetHelpDialogStartingPage("http://www.kwwidgets.org"); | |||
// | // Add a window | ||
// | // Set 'SupportHelp' to automatically add a menu entry for the help link | ||
vtkKWWindowBase *win = vtkKWWindowBase::New(); | |||
win->SupportHelpOn(); | |||
app->AddWindow(win); | |||
win->Create(); | |||
vtkKWRenderWidget *hello_renderwidget = vtkKWRenderWidget::New(); | |||
hello_renderwidget->SetParent(win->GetViewFrame()); | |||
hello_renderwidget->Create(); | |||
vtkRenderer *hello_renderer = hello_renderwidget->GetRenderer(); | |||
hello_renderer->AddViewProp(volHead); | |||
hello_renderer->SetBackground(0.3, 0.6, 1.0); | |||
hello_renderer->GetActiveCamera()->ParallelProjectionOff(); | |||
hello_renderer->ResetCamera(); | |||
app->Script("pack %s -side left -fill both -anchor c -expand y", | |||
hello_renderwidget->GetWidgetName()); | |||
hello_renderwidget->Delete(); | |||
// build an histogram of the data, it will be used inside the editor | |||
// as if we were trying to tune a tfunc based on the real values | |||
// | vtkKWHistogram *pfed_hist = vtkKWHistogram::New(); | ||
pfed_hist->BuildHistogram( | |||
imtoimfilt->GetOutput()->GetPointData()->GetScalars(), 0); | |||
double *range = pfed_hist->GetRange(); | |||
// Assign our tfunc to the editor | |||
// Make sure we show the whole range of the tfunc | |||
// Use an histogram | |||
vtkKWPiecewiseFunctionEditor *pfed_tfunc2_editor = | |||
vtkKWPiecewiseFunctionEditor::New(); | |||
pfed_tfunc2_editor->SetParent(win->GetViewFrame()); | |||
pfed_tfunc2_editor->Create(); | |||
pfed_tfunc2_editor->SetBorderWidth(2); | |||
pfed_tfunc2_editor->SetReliefToGroove(); | |||
pfed_tfunc2_editor->SetPadX(2); | |||
pfed_tfunc2_editor->SetPadY(2); | |||
pfed_tfunc2_editor->ExpandCanvasWidthOff(); | |||
pfed_tfunc2_editor->SetCanvasWidth(250); | |||
pfed_tfunc2_editor->SetCanvasHeight(150); | |||
pfed_tfunc2_editor->SetLabelText("Opacity Function Editor"); | |||
pfed_tfunc2_editor->SetBalloonHelpString( | |||
"Piecewise transfer function editor. Guidelines are dispayed " | |||
"for each midpoint, ticks are displayed in the " | |||
"parameter space at the bottom, the width is set explicitly. " | |||
"The range and histogram are based on a real image data."); | |||
pfed_tfunc2_editor->SetPiecewiseFunction(opacTransFunc); | |||
pfed_tfunc2_editor->SetWholeParameterRangeToFunctionRange(); | |||
pfed_tfunc2_editor->SetVisibleParameterRangeToWholeParameterRange(); | |||
// pfed_tfunc2_editor->PointIndexVisibilityOff(); | |||
// pfed_tfunc2_editor->SelectedPointIndexVisibilityOn(); | |||
// pfed_tfunc2_editor->MidPointVisibilityOn(); | |||
// pfed_tfunc2_editor->PointGuidelineVisibilityOff(); | |||
// pfed_tfunc2_editor->MidPointGuidelineVisibilityOn(); | |||
// pfed_tfunc2_editor->MidPointGuidelineValueVisibilityOn(); | |||
// pfed_tfunc2_editor->SetMidPointGuidelineValueFormat("%-#6.0f"); | |||
// pfed_tfunc2_editor->MidPointEntryVisibilityOn(); | |||
// pfed_tfunc2_editor->SharpnessEntryVisibilityOn(); | |||
pfed_tfunc2_editor->ValueRangeVisibilityOff(); | |||
pfed_tfunc2_editor->ParameterRangeVisibilityOff(); | |||
pfed_tfunc2_editor->SetLabelPositionToTop(); | |||
pfed_tfunc2_editor->LockEndPointsParameterOn(); | |||
pfed_tfunc2_editor->SetHistogram(pfed_hist); | |||
pfed_tfunc2_editor->ParameterTicksVisibilityOn(); | |||
pfed_tfunc2_editor->ComputeValueTicksFromHistogramOn(); | |||
// pfed_tfunc2_editor->SetParameterTicksFormat( | |||
// pfed_tfunc2_editor->GetMidPointGuidelineValueFormat()); | |||
app->Script( | |||
"pack %s -side top -anchor nw -expand n -padx 2 -pady 20", | |||
pfed_tfunc2_editor->GetWidgetName()); | |||
pfed_tfunc2_editor->Delete(); | |||
opacTransFunc->Delete(); | |||
pfed_hist->Delete(); | |||
/* | |||
// Add a label, attach it to the view frame, and pack | |||
vtkKWLabel *hello_label = vtkKWLabel::New(); | |||
hello_label->SetParent(win->GetViewFrame()); | |||
hello_label->Create(); | |||
hello_label->SetText("Hello, World!"); | |||
app->Script("pack %s -side left -anchor c -expand y", | |||
hello_label->GetWidgetName()); | |||
hello_label->Delete(); | |||
*/ | |||
// Start the application | |||
// If --test was provided, do not enter the event loop and run this example | |||
// as a non-interactive test for software quality purposes. | |||
// | |||
// | |||
// | |||
int ret = 0; | |||
win->Display(); | |||
app->Start(argc, argv); | |||
ret = app->GetExitStatus(); | |||
win->Close(); | |||
// | // Deallocate and exit | ||
return | win->Delete(); | ||
app->Delete(); | |||
return ret; | |||
} | } | ||
</nowiki></pre> | #if defined(_WIN32) && !defined(__CYGWIN__) | ||
#include <windows.h> | |||
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int) | |||
{ | |||
int argc; | |||
char **argv; | |||
vtksys::SystemTools::ConvertWindowsCommandLineToUnixArguments( | |||
lpCmdLine, &argc, &argv); | |||
int ret = my_main(argc, argv); | |||
for (int i = 0; i < argc; i++) { delete [] argv[i]; } | |||
delete [] argv; | |||
return ret; | |||
} | |||
#else | |||
int main(int argc, char *argv[]) | |||
{ | |||
return my_main(argc, argv); | |||
} | |||
#endif</nowiki></pre> | |||
{{CompleteSetup/Template/Footer}} | {{CompleteSetup/Template/Footer}} |
Latest revision as of 16:41, 5 May 2006
#include "vtkKWApplication.h" #include "vtkKWWindowBase.h" #include "vtkKWLabel.h" #include "vtkKWFrame.h" #include "vtkKWRenderWidget.h" #include "vtkKWHistogram.h" #include "vtkKWPiecewiseFunctionEditor.h" #include <vtksys/SystemTools.hxx> #include <vtksys/CommandLineArguments.hxx> #include "itkImageToVTKImageFilter.h" #include "itkImage.h" #include "itkImageFileReader.h" #include "vtkRenderer.h" #include "vtkPiecewiseFunction.h" #include "vtkVolumeProperty.h" #include "vtkVolume.h" #include "vtkVolumeRayCastCompositeFunction.h" #include "vtkFixedPointVolumeRayCastMapper.h" #include "vtkCamera.h" #include "vtkPointData.h" int my_main(int argc, char *argv[]) { // Initialize Tcl Tcl_Interp *interp = vtkKWApplication::InitializeTcl(argc, argv, &cerr); if (!interp) { cerr << "Error: InitializeTcl failed" << endl ; return 1; } // Load the Image via ITK const unsigned int Dimension = 3; typedef unsigned char InputPixelType; typedef itk::Image<InputPixelType, Dimension> InputImageType; typedef itk::ImageFileReader<InputImageType> ReaderType; ReaderType::Pointer reader = ReaderType::New(); // reader->SetFileName( "/home/alex/interp/61457548-roi-8bit.tif" ); reader->SetFileName( "/home/alex/interp/61457548-roi-8bit-x4-ga-40-0.05-10-no_edges.tif" ); try { reader->Update(); } catch( itk::ExceptionObject & excep ) { std::cerr << "Exception while reading input!"<< std::endl; std::cerr << excep << std::endl; } typedef itk::ImageToVTKImageFilter<InputImageType> FilterType; FilterType::Pointer imtoimfilt = FilterType::New(); imtoimfilt->SetInput( reader->GetOutput() ); try { imtoimfilt->Update(); } catch( itk::ExceptionObject & except) { std::cerr << "Exception while converting!"<< std::endl; std::cerr << except << std::endl; } // Create transfer mapping scalar value to opacity vtkPiecewiseFunction *opacTransFunc = vtkPiecewiseFunction::New(); opacTransFunc->AddPoint(0, 1.0); opacTransFunc->AddPoint(100, 0.0); opacTransFunc->AddPoint(255, 0.0); // The property describes how the data will look vtkVolumeProperty *vp = vtkVolumeProperty::New(); vp->SetScalarOpacity(opacTransFunc); vp->ShadeOn(); vp->SetInterpolationTypeToLinear(); vtkFixedPointVolumeRayCastMapper *rcm = vtkFixedPointVolumeRayCastMapper::New(); rcm->SetInput( imtoimfilt->GetOutput()); // The volume holds the mapper and the property and // can be used to position/orient the volume vtkVolume *volHead= vtkVolume::New(); volHead->SetMapper(rcm); volHead->SetProperty(vp); // Create the application // If --test was provided, ignore all registry settings, and exit silently // Restore the settings that have been saved to the registry, like // the geometry of the user interface so far. vtkKWApplication *app = vtkKWApplication::New(); app->SetName("KWHelloWorldExample-alex"); app->RestoreApplicationSettingsFromRegistry(); // Set a help link. Can be a remote link (URL), or a local file // vtksys::SystemTools::GetFilenamePath(__FILE__) + "/help.html"; app->SetHelpDialogStartingPage("http://www.kwwidgets.org"); // Add a window // Set 'SupportHelp' to automatically add a menu entry for the help link vtkKWWindowBase *win = vtkKWWindowBase::New(); win->SupportHelpOn(); app->AddWindow(win); win->Create(); vtkKWRenderWidget *hello_renderwidget = vtkKWRenderWidget::New(); hello_renderwidget->SetParent(win->GetViewFrame()); hello_renderwidget->Create(); vtkRenderer *hello_renderer = hello_renderwidget->GetRenderer(); hello_renderer->AddViewProp(volHead); hello_renderer->SetBackground(0.3, 0.6, 1.0); hello_renderer->GetActiveCamera()->ParallelProjectionOff(); hello_renderer->ResetCamera(); app->Script("pack %s -side left -fill both -anchor c -expand y", hello_renderwidget->GetWidgetName()); hello_renderwidget->Delete(); // build an histogram of the data, it will be used inside the editor // as if we were trying to tune a tfunc based on the real values vtkKWHistogram *pfed_hist = vtkKWHistogram::New(); pfed_hist->BuildHistogram( imtoimfilt->GetOutput()->GetPointData()->GetScalars(), 0); double *range = pfed_hist->GetRange(); // Assign our tfunc to the editor // Make sure we show the whole range of the tfunc // Use an histogram vtkKWPiecewiseFunctionEditor *pfed_tfunc2_editor = vtkKWPiecewiseFunctionEditor::New(); pfed_tfunc2_editor->SetParent(win->GetViewFrame()); pfed_tfunc2_editor->Create(); pfed_tfunc2_editor->SetBorderWidth(2); pfed_tfunc2_editor->SetReliefToGroove(); pfed_tfunc2_editor->SetPadX(2); pfed_tfunc2_editor->SetPadY(2); pfed_tfunc2_editor->ExpandCanvasWidthOff(); pfed_tfunc2_editor->SetCanvasWidth(250); pfed_tfunc2_editor->SetCanvasHeight(150); pfed_tfunc2_editor->SetLabelText("Opacity Function Editor"); pfed_tfunc2_editor->SetBalloonHelpString( "Piecewise transfer function editor. Guidelines are dispayed " "for each midpoint, ticks are displayed in the " "parameter space at the bottom, the width is set explicitly. " "The range and histogram are based on a real image data."); pfed_tfunc2_editor->SetPiecewiseFunction(opacTransFunc); pfed_tfunc2_editor->SetWholeParameterRangeToFunctionRange(); pfed_tfunc2_editor->SetVisibleParameterRangeToWholeParameterRange(); // pfed_tfunc2_editor->PointIndexVisibilityOff(); // pfed_tfunc2_editor->SelectedPointIndexVisibilityOn(); // pfed_tfunc2_editor->MidPointVisibilityOn(); // pfed_tfunc2_editor->PointGuidelineVisibilityOff(); // pfed_tfunc2_editor->MidPointGuidelineVisibilityOn(); // pfed_tfunc2_editor->MidPointGuidelineValueVisibilityOn(); // pfed_tfunc2_editor->SetMidPointGuidelineValueFormat("%-#6.0f"); // pfed_tfunc2_editor->MidPointEntryVisibilityOn(); // pfed_tfunc2_editor->SharpnessEntryVisibilityOn(); pfed_tfunc2_editor->ValueRangeVisibilityOff(); pfed_tfunc2_editor->ParameterRangeVisibilityOff(); pfed_tfunc2_editor->SetLabelPositionToTop(); pfed_tfunc2_editor->LockEndPointsParameterOn(); pfed_tfunc2_editor->SetHistogram(pfed_hist); pfed_tfunc2_editor->ParameterTicksVisibilityOn(); pfed_tfunc2_editor->ComputeValueTicksFromHistogramOn(); // pfed_tfunc2_editor->SetParameterTicksFormat( // pfed_tfunc2_editor->GetMidPointGuidelineValueFormat()); app->Script( "pack %s -side top -anchor nw -expand n -padx 2 -pady 20", pfed_tfunc2_editor->GetWidgetName()); pfed_tfunc2_editor->Delete(); opacTransFunc->Delete(); pfed_hist->Delete(); /* // Add a label, attach it to the view frame, and pack vtkKWLabel *hello_label = vtkKWLabel::New(); hello_label->SetParent(win->GetViewFrame()); hello_label->Create(); hello_label->SetText("Hello, World!"); app->Script("pack %s -side left -anchor c -expand y", hello_label->GetWidgetName()); hello_label->Delete(); */ // Start the application // If --test was provided, do not enter the event loop and run this example // as a non-interactive test for software quality purposes. int ret = 0; win->Display(); app->Start(argc, argv); ret = app->GetExitStatus(); win->Close(); // Deallocate and exit win->Delete(); app->Delete(); return ret; } #if defined(_WIN32) && !defined(__CYGWIN__) #include <windows.h> int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int) { int argc; char **argv; vtksys::SystemTools::ConvertWindowsCommandLineToUnixArguments( lpCmdLine, &argc, &argv); int ret = my_main(argc, argv); for (int i = 0; i < argc; i++) { delete [] argv[i]; } delete [] argv; return ret; } #else int main(int argc, char *argv[]) { return my_main(argc, argv); } #endif