You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.1 KiB
C++

#include "PostGraphObjectLight.h"
#include "FITK_Component/FITKRenderWindowVTK/FITKGraph3DWindowVTK.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPostLight.h"
#include <vtkRenderer.h>
#include <vtkCamera.h>
#include <vtkLight.h>
namespace Interface
{
PostGraphObjectLight::PostGraphObjectLight(FITKCFDPostLight* lightData, Comp::FITKGraph3DWindowVTK* graph3DWidget) :
_lightData(lightData), _graph3DWidget(graph3DWidget)
{
if (_graph3DWidget == nullptr || _lightData == nullptr)return;
vtkRenderer* render = _graph3DWidget->getVTKRenderer(0);
if (render == nullptr)return;
_VTKLight = vtkLight::New();
_VTKLight->SwitchOn();
_VTKLight->SetIntensity(1);
render->AddLight(_VTKLight);
}
PostGraphObjectLight::~PostGraphObjectLight()
{
if (_graph3DWidget) {
vtkRenderer* render = _graph3DWidget->getVTKRenderer(0);
if (render)render->RemoveLight(_VTKLight);
}
if (_VTKLight) {
_VTKLight->Delete();
_VTKLight = nullptr;
}
}
void PostGraphObjectLight::update()
{
if (_VTKLight == nullptr || _lightData == nullptr)return;
switch (_lightData->getLightType()) {
case Interface::FITKPostLightType::Post_Positional: {
_VTKLight->SetPositional(true);
break;
}
case Interface::FITKPostLightType::Post_Direction: {
_VTKLight->SetPositional(false);
break;
}
}
double position[3] = { 0,0,0 }, focalPoint[3] = { 0,0,0 }, color[3] = { 0,0,0 }, coneAngle = 0.0;
_lightData->getPosition(position);
_VTKLight->SetPosition(position);
_lightData->getFocalPoint(focalPoint);
_VTKLight->SetFocalPoint(focalPoint);
coneAngle = _lightData->getConeAngle();
_VTKLight->SetConeAngle(coneAngle);
_lightData->getColor(color);
_VTKLight->SetColor(color[0], color[1], color[2]);
}
FITKCFDPostLight* PostGraphObjectLight::getLightData()
{
return _lightData;
}
}