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
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();
|
||
|
}
|