added skyplaneEmitter
This commit is contained in:
@@ -6,18 +6,24 @@
|
||||
#include <vtkPolyDataMapper.h>
|
||||
#include <vtkTransform.h>
|
||||
#include <vtkTransformPolyDataFilter.h>
|
||||
#include <vtkPlaneSource.h>
|
||||
#include <vtkAppendPolyData.h>
|
||||
#include <vtkPolyData.h>
|
||||
#include <vtkProperty.h>
|
||||
#include "Math/vtkDense.h"
|
||||
|
||||
namespace uLib {
|
||||
namespace Vtk {
|
||||
|
||||
vtkEmitterPrimary::vtkEmitterPrimary(Geant::EmitterPrimary &emitter)
|
||||
: m_emitter(emitter), m_Poly(nullptr), m_Actor(vtkActor::New()) {
|
||||
: m_emitter(emitter), m_Actor(vtkActor::New()) {
|
||||
|
||||
vtkNew<vtkArrowSource> arrow;
|
||||
|
||||
// Default arrow is along X+. Rotate to point towards Z- relative to the origin
|
||||
// Default arrow is along X+.
|
||||
// Scale it to 1 meter (1000 mm) and rotate to point towards Z- (local)
|
||||
vtkNew<vtkTransform> transform;
|
||||
transform->Scale(1000.0, 1000.0, 1000.0);
|
||||
transform->RotateY(90.0);
|
||||
|
||||
vtkNew<vtkTransformPolyDataFilter> transformFilter;
|
||||
@@ -28,7 +34,7 @@ vtkEmitterPrimary::vtkEmitterPrimary(Geant::EmitterPrimary &emitter)
|
||||
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
|
||||
mapper->SetInputData(transformFilter->GetOutput());
|
||||
m_Actor->SetMapper(mapper);
|
||||
m_Actor->SetScale(1000.0); // 1 meter long
|
||||
m_Actor->SetScale(1.0);
|
||||
|
||||
vtkNew<vtkMatrix4x4> vmat;
|
||||
Matrix4fToVtk(m_emitter.GetWorldMatrix(), vmat);
|
||||
@@ -68,5 +74,53 @@ void vtkEmitterPrimary::Update() {
|
||||
m_emitter.Updated();
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------- //
|
||||
// vtkSkyPlaneEmitterPrimary
|
||||
|
||||
vtkSkyPlaneEmitterPrimary::vtkSkyPlaneEmitterPrimary(Geant::SkyPlaneEmitterPrimary &emitter)
|
||||
: vtkEmitterPrimary(emitter), m_skyEmitter(emitter), m_PlaneSource(vtkPlaneSource::New()) {
|
||||
|
||||
vtkNew<vtkAppendPolyData> append;
|
||||
// Base class constructor already set an arrow. We keep it as a directional indicator.
|
||||
append->AddInputData(vtkPolyData::SafeDownCast(m_Actor->GetMapper()->GetInput()));
|
||||
append->AddInputConnection(m_PlaneSource->GetOutputPort());
|
||||
|
||||
vtkNew<vtkPolyDataMapper> mapper;
|
||||
mapper->SetInputConnection(append->GetOutputPort());
|
||||
m_Actor->SetMapper(mapper);
|
||||
|
||||
m_Actor->GetProperty()->SetOpacity(0.5);
|
||||
m_Actor->GetProperty()->SetColor(0.2, 0.6, 0.9);
|
||||
|
||||
this->contentUpdate();
|
||||
}
|
||||
|
||||
vtkSkyPlaneEmitterPrimary::~vtkSkyPlaneEmitterPrimary() {
|
||||
m_PlaneSource->Delete();
|
||||
}
|
||||
|
||||
void vtkSkyPlaneEmitterPrimary::contentUpdate() {
|
||||
uLib::Vector2f size = m_skyEmitter.GetSkySize();
|
||||
m_PlaneSource->SetOrigin(-size(0)/2.0, -size(1)/2.0, 0.0);
|
||||
m_PlaneSource->SetPoint1( size(0)/2.0, -size(1)/2.0, 0.0);
|
||||
m_PlaneSource->SetPoint2(-size(0)/2.0, size(1)/2.0, 0.0);
|
||||
m_PlaneSource->Update();
|
||||
|
||||
vtkEmitterPrimary::contentUpdate();
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------- //
|
||||
// vtkQuadMeshEmitterPrimary
|
||||
|
||||
vtkQuadMeshEmitterPrimary::vtkQuadMeshEmitterPrimary(Geant::QuadMeshEmitterPrimary &emitter)
|
||||
: vtkEmitterPrimary(emitter), m_meshEmitter(emitter) {
|
||||
this->contentUpdate();
|
||||
}
|
||||
|
||||
void vtkQuadMeshEmitterPrimary::contentUpdate() {
|
||||
// For now stick with the arrow. In the future visualize the mesh if useful.
|
||||
vtkEmitterPrimary::contentUpdate();
|
||||
}
|
||||
|
||||
} // namespace Vtk
|
||||
} // namespace uLib
|
||||
|
||||
Reference in New Issue
Block a user