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.

209 lines
6.4 KiB

2 years ago
//---------------------------------------------------------------------------
//
// Demo Borland + vtk Project,
//
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#include "Form_Test.h"
//
#include "vtkActor.h"
#include "vtkAssemblyPath.h"
#include "vtkAssemblyNode.h"
#include "vtkElevationFilter.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkShrinkPolyData.h"
#include "vtkSphereSource.h"
#include "vtkTriangleFilter.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "vtkBorlandRenderWindow"
#pragma resource "*.dfm"
TVTK_Form *VTK_Form;
//---------------------------------------------------------------------------
__fastcall TVTK_Form::TVTK_Form(TComponent* Owner) : TForm(Owner)
{
shrink = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TVTK_Form::FormDestroy(TObject *Sender)
{
if (shrink)
{
shrink->Delete();
}
// The release of graphics resources is required here in
// the event that an actor is switched between solid
// and wireframe representations. This cannot be implemented within
// vtkBorlandRenderWindow, since ReleaseGraphicsResources, when called
// by a vtkProp's mapper, will cause the internal vtkWin32OpenGLRenderWindow
// to fail during MakeCurrent.
vtkRenderer* ren1 = vtkWindow1->GetRenderer();
vtkRenderWindow* renwin1 = vtkWindow1->GetRenderWindow();
vtkPropCollection* collection = ren1->GetViewProps();
if(collection)
{
collection->InitTraversal();
for (int i = 0; i < collection->GetNumberOfItems(); i++)
{
vtkActor *actor = vtkActor::SafeDownCast(collection->GetNextProp());
if(actor)
{
actor->ReleaseGraphicsResources(renwin1);
ren1->RemoveViewProp(actor);
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TVTK_Form::HeaderControl1SectionClick(THeaderControl *HeaderControl, THeaderSection *Section)
{
if (Section->Text=="Mode")
{
TPoint p = HeaderControl->ClientToScreen(TPoint(0,0));
ModeMenu->Popup(p.x + Section->Left, p.y - 0);
}
else if (Section->Text=="Window")
{
TPoint p = HeaderControl->ClientToScreen(TPoint(0,0));
WindowMenu->Popup(p.x + Section->Left, p.y - 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TVTK_Form::TrackBallMode1Click(TObject *Sender)
{
if (Sender==JoystickMode1)
{
vtkWindow1->SetInteractorMode(IM_JoystickCamera);
JoystickMode1->Checked = true;
}
if (Sender==TrackBallMode1)
{
vtkWindow1->SetInteractorMode(IM_TrackballCamera);
TrackBallMode1->Checked = true;
}
if (Sender==FlightMode1)
{
vtkWindow1->SetInteractorMode(IM_Flight);
FlightMode1->Checked = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TVTK_Form::BackgroundColour1Click(TObject *Sender)
{
if (!backgroundcolor->Execute())
{
return;
}
DWORD L = ColorToRGB(backgroundcolor->Color);
double rgb[3] = { GetRValue(L)/255.0, GetGValue(L)/255.0, GetBValue(L)/255.0 };
vtkWindow1->GetRenderer()->SetBackground(rgb);
vtkWindow1->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TVTK_Form::ResetCamera1Click(TObject *Sender)
{
vtkWindow1->GetRenderer()->ResetCamera();
vtkWindow1->Invalidate();
}
//---------------------------------------------------------------------------
//
//
// Here's a demo
//
//
//---------------------------------------------------------------------------
void __fastcall TVTK_Form::bc1Click(TObject *Sender)
{
if (shrink)
{
return;
}
vtkSphereSource *sphere = vtkSphereSource::New();
sphere->SetThetaResolution(36.0);
sphere->SetPhiResolution(18.0);
sphere->SetRadius(1.0);
shrink = vtkShrinkPolyData::New();
shrink->SetShrinkFactor( ShrinkScroll->Position/100.0 );
shrink->SetInput( sphere->GetOutput() );
vtkElevationFilter *elev = vtkElevationFilter::New();
elev->SetInput( shrink->GetOutput() );
elev->SetLowPoint(-1,-1,-1);
elev->SetHighPoint( 1, 1, 1);
elev->SetScalarRange(0,1);
vtkPolyDataMapper *aMapper = vtkPolyDataMapper::New();
aMapper->SetInput( elev->GetPolyDataOutput() );
aMapper->SetScalarRange(0,1);
vtkActor *anActor = vtkActor::New();
anActor->SetMapper(aMapper);
// Use these functions to get the actual RenderWindow/Renderers.
vtkWindow1->GetRenderer()->AddActor(anActor);
// We don't need these any more, they are reference counted by the
// pipeline and we can delete them. They'll be destructed when everything
// finishes. We'll keep a pointer to the shrinkfilter so we can use our
// scroller.
anActor->Delete();
aMapper->Delete();
sphere->Delete();
elev->Delete();
vtkWindow1->GetRenderer()->ResetCamera();
vtkWindow1->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TVTK_Form::ShrinkScrollChange(TObject *Sender)
{
if (!shrink)
{
return;
}
shrink->SetShrinkFactor( ShrinkScroll->Position/100.0 );
vtkWindow1->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TVTK_Form::vtkWindow1Enter(TObject *Sender)
{
BorderWindow->Color = clMaroon;
}
//---------------------------------------------------------------------------
void __fastcall TVTK_Form::vtkWindow1Exit(TObject *Sender)
{
BorderWindow->Color = clBtnFace;
}
//---------------------------------------------------------------------------
void __fastcall TVTK_Form::FormShow(TObject *Sender)
{
// These calls are made to enforce creation of the internal
// vtk components of the vtkBorlandRenderWindow. If this were
// not done, clicking on the component would attempt to pass
// window messages to non-existent entities. This behaviour
// could be changed in future.
vtkRenderWindowInteractor * iact = vtkWindow1->GetInteractor();
vtkRenderer* ren1 = vtkWindow1->GetRenderer();
}
//---------------------------------------------------------------------------