Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

178 lines
5.0 KiB

2 years ago
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: Win32Cone.cxx,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
//
// This example is a windows application (instead of a console application)
// version of Examples/Tutorial/Step1/Cxx/Cone.cxx. It is organized in a more
// object oriented manner and shows a fairly minimal windows VTK application.
//
#include "windows.h"
// first include the required header files for the vtk classes we are using
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
static HANDLE hinst;
long FAR PASCAL WndProc(HWND, UINT, UINT, LONG);
// define the vtk part as a simple c++ class
class myVTKApp
{
public:
myVTKApp(HWND parent);
~myVTKApp();
private:
vtkRenderWindow *renWin;
vtkRenderer *renderer;
vtkRenderWindowInteractor *iren;
vtkConeSource *cone;
vtkPolyDataMapper *coneMapper;
vtkActor *coneActor;
};
int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
static char szAppName[] = "Win32Cone";
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
if (!hPrevInstance)
{
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.lpszMenuName = NULL;
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.lpszClassName = szAppName;
RegisterClass (&wndclass);
}
hinst = hInstance;
hwnd = CreateWindow ( szAppName,
"Draw Window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
400,
480,
NULL,
NULL,
hInstance,
NULL);
ShowWindow (hwnd, nCmdShow);
UpdateWindow (hwnd);
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
long FAR PASCAL WndProc (HWND hwnd, UINT message,
UINT wParam, LONG lParam)
{
static HWND ewin;
static myVTKApp *theVTKApp;
switch (message)
{
case WM_CREATE:
{
ewin = CreateWindow("button","Exit",
WS_CHILD | WS_VISIBLE | SS_CENTER,
0,400,400,60,
hwnd,(HMENU)2,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),
NULL);
theVTKApp = new myVTKApp(hwnd);
return 0;
}
case WM_COMMAND:
switch (wParam)
{
case 2:
PostQuitMessage (0);
if (theVTKApp)
{
delete theVTKApp;
theVTKApp = NULL;
}
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage (0);
if (theVTKApp)
{
delete theVTKApp;
theVTKApp = NULL;
}
return 0;
}
return DefWindowProc (hwnd, message, wParam, lParam);
}
myVTKApp::myVTKApp(HWND hwnd)
{
// Similar to Examples/Tutorial/Step1/Cxx/Cone.cxx
// We create the basic parts of a pipeline and connect them
this->renderer = vtkRenderer::New();
this->renWin = vtkRenderWindow::New();
this->renWin->AddRenderer(this->renderer);
// setup the parent window
this->renWin->SetParentId(hwnd);
this->iren = vtkRenderWindowInteractor::New();
this->iren->SetRenderWindow(this->renWin);
this->cone = vtkConeSource::New();
this->cone->SetHeight( 3.0 );
this->cone->SetRadius( 1.0 );
this->cone->SetResolution( 10 );
this->coneMapper = vtkPolyDataMapper::New();
this->coneMapper->SetInputConnection(this->cone->GetOutputPort());
this->coneActor = vtkActor::New();
this->coneActor->SetMapper(this->coneMapper);
this->renderer->AddActor(this->coneActor);
this->renderer->SetBackground(0.2,0.4,0.3);
this->renWin->SetSize(400,400);
// Finally we start the interactor so that event will be handled
this->renWin->Render();
}
myVTKApp::~myVTKApp()
{
renWin->Delete();
renderer->Delete();
iren->Delete();
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
}