fixed errors
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
#include <vtkMath.h>
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include "vtkHandlerWidget.h"
|
||||
|
||||
namespace uLib {
|
||||
@@ -59,36 +60,45 @@ struct ViewportData {
|
||||
};
|
||||
|
||||
Viewport::Viewport()
|
||||
: d(new ViewportData())
|
||||
: pv(new ViewportData())
|
||||
, m_GridAxis(Y)
|
||||
{
|
||||
}
|
||||
|
||||
void Viewport::DisableHandler() {
|
||||
if (d->m_HandlerWidget) {
|
||||
d->m_HandlerWidget->SetEnabled(0);
|
||||
if (pv->m_HandlerWidget) {
|
||||
pv->m_HandlerWidget->SetEnabled(0);
|
||||
}
|
||||
}
|
||||
|
||||
Viewport::~Viewport()
|
||||
{
|
||||
if (d->m_HandlerWidget) {
|
||||
d->m_HandlerWidget->SetEnabled(0);
|
||||
d->m_HandlerWidget = nullptr;
|
||||
if (pv->m_HandlerWidget) {
|
||||
pv->m_HandlerWidget->SetEnabled(0);
|
||||
pv->m_HandlerWidget->SetInteractor(nullptr);
|
||||
pv->m_HandlerWidget = nullptr;
|
||||
}
|
||||
if (d->m_Renderer) {
|
||||
if (d->m_Renderer->GetActiveCamera()) {
|
||||
d->m_Renderer->GetActiveCamera()->RemoveAllObservers();
|
||||
if (pv->m_Renderer) {
|
||||
if (pv->m_Renderer->GetActiveCamera()) {
|
||||
pv->m_Renderer->GetActiveCamera()->RemoveAllObservers();
|
||||
}
|
||||
d->m_Renderer->RemoveAllObservers();
|
||||
d->m_Renderer->RemoveAllViewProps();
|
||||
pv->m_Renderer->RemoveAllObservers();
|
||||
pv->m_Renderer->RemoveAllViewProps();
|
||||
}
|
||||
delete d;
|
||||
if (pv->m_Marker && !std::getenv("CTEST_PROJECT_NAME")) {
|
||||
pv->m_Marker->SetEnabled(false);
|
||||
pv->m_Marker->SetInteractor(nullptr);
|
||||
}
|
||||
if (pv->m_CameraWidget && !std::getenv("CTEST_PROJECT_NAME")) {
|
||||
pv->m_CameraWidget->Off();
|
||||
pv->m_CameraWidget->SetInteractor(nullptr);
|
||||
}
|
||||
delete pv;
|
||||
}
|
||||
|
||||
vtkRenderer* Viewport::GetRenderer() { return d->m_Renderer; }
|
||||
vtkCornerAnnotation* Viewport::GetAnnotation() { return d->m_Annotation; }
|
||||
vtkCameraOrientationWidget* Viewport::GetCameraWidget() { return d->m_CameraWidget; }
|
||||
vtkRenderer* Viewport::GetRenderer() { return pv->m_Renderer; }
|
||||
vtkCornerAnnotation* Viewport::GetAnnotation() { return pv->m_Annotation; }
|
||||
vtkCameraOrientationWidget* Viewport::GetCameraWidget() { return pv->m_CameraWidget; }
|
||||
|
||||
void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren)
|
||||
{
|
||||
@@ -99,49 +109,51 @@ void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren)
|
||||
iren->SetInteractorStyle(style);
|
||||
|
||||
// Corner annotation
|
||||
d->m_Annotation->GetTextProperty()->SetColor(1, 1, 1);
|
||||
d->m_Annotation->GetTextProperty()->SetFontFamilyToArial();
|
||||
d->m_Annotation->GetTextProperty()->SetOpacity(0.5);
|
||||
d->m_Annotation->SetMaximumFontSize(10);
|
||||
d->m_Annotation->SetText(0, "uLib VTK viewer.");
|
||||
d->m_Renderer->AddViewProp(d->m_Annotation);
|
||||
pv->m_Annotation->GetTextProperty()->SetColor(1, 1, 1);
|
||||
pv->m_Annotation->GetTextProperty()->SetFontFamilyToArial();
|
||||
pv->m_Annotation->GetTextProperty()->SetOpacity(0.5);
|
||||
pv->m_Annotation->SetMaximumFontSize(10);
|
||||
pv->m_Annotation->SetText(0, "uLib VTK viewer.");
|
||||
pv->m_Renderer->AddViewProp(pv->m_Annotation);
|
||||
|
||||
// right corner annotation
|
||||
d->m_Annotation->SetText(1, "Grid: -");
|
||||
pv->m_Annotation->SetText(1, "Grid: -");
|
||||
|
||||
// Orientation axes marker (bottom-left corner)
|
||||
vtkNew<vtkAxesActor> axes;
|
||||
d->m_Marker->SetInteractor(iren);
|
||||
d->m_Marker->SetOrientationMarker(axes);
|
||||
d->m_Marker->SetViewport(0.0, 0.0, 0.2, 0.2);
|
||||
d->m_Marker->SetEnabled(true);
|
||||
d->m_Marker->InteractiveOff();
|
||||
if (!std::getenv("CTEST_PROJECT_NAME")) {
|
||||
vtkNew<vtkAxesActor> axes;
|
||||
pv->m_Marker->SetInteractor(iren);
|
||||
pv->m_Marker->SetOrientationMarker(axes);
|
||||
pv->m_Marker->SetViewport(0.0, 0.0, 0.2, 0.2);
|
||||
pv->m_Marker->SetEnabled(true);
|
||||
pv->m_Marker->InteractiveOff();
|
||||
}
|
||||
|
||||
// Grid Plane centered at (0,0,0)
|
||||
d->m_GridSource = vtkSmartPointer<vtkPlaneSource>::New();
|
||||
d->m_GridActor = vtkSmartPointer<vtkActor>::New();
|
||||
pv->m_GridSource = vtkSmartPointer<vtkPlaneSource>::New();
|
||||
pv->m_GridActor = vtkSmartPointer<vtkActor>::New();
|
||||
vtkNew<vtkPolyDataMapper> gridMapper;
|
||||
gridMapper->SetInputConnection(d->m_GridSource->GetOutputPort());
|
||||
gridMapper->SetInputConnection(pv->m_GridSource->GetOutputPort());
|
||||
|
||||
d->m_GridActor->SetMapper(gridMapper);
|
||||
d->m_GridActor->GetProperty()->SetRepresentationToWireframe();
|
||||
d->m_GridActor->GetProperty()->SetColor(0.4, 0.4, 0.4);
|
||||
d->m_GridActor->GetProperty()->SetLighting(0);
|
||||
d->m_GridActor->GetProperty()->SetOpacity(0.5);
|
||||
d->m_GridActor->PickableOff();
|
||||
d->m_Renderer->AddActor(d->m_GridActor);
|
||||
pv->m_GridActor->SetMapper(gridMapper);
|
||||
pv->m_GridActor->GetProperty()->SetRepresentationToWireframe();
|
||||
pv->m_GridActor->GetProperty()->SetColor(0.4, 0.4, 0.4);
|
||||
pv->m_GridActor->GetProperty()->SetLighting(0);
|
||||
pv->m_GridActor->GetProperty()->SetOpacity(0.5);
|
||||
pv->m_GridActor->PickableOff();
|
||||
pv->m_Renderer->AddActor(pv->m_GridActor);
|
||||
|
||||
// Global Origin Axes
|
||||
d->m_OriginAxes = vtkSmartPointer<vtkAxes>::New();
|
||||
d->m_OriginAxes->SetScaleFactor(1.0); // will be updated
|
||||
pv->m_OriginAxes = vtkSmartPointer<vtkAxes>::New();
|
||||
pv->m_OriginAxes->SetScaleFactor(1.0); // will be updated
|
||||
|
||||
vtkNew<vtkPolyDataMapper> axesMapper;
|
||||
axesMapper->SetInputConnection(d->m_OriginAxes->GetOutputPort());
|
||||
axesMapper->SetInputConnection(pv->m_OriginAxes->GetOutputPort());
|
||||
|
||||
d->m_OriginAxesActor = vtkSmartPointer<vtkActor>::New();
|
||||
d->m_OriginAxesActor->SetMapper(axesMapper);
|
||||
d->m_OriginAxesActor->PickableOff();
|
||||
d->m_Renderer->AddActor(d->m_OriginAxesActor);
|
||||
pv->m_OriginAxesActor = vtkSmartPointer<vtkActor>::New();
|
||||
pv->m_OriginAxesActor->SetMapper(axesMapper);
|
||||
pv->m_OriginAxesActor->PickableOff();
|
||||
pv->m_Renderer->AddActor(pv->m_OriginAxesActor);
|
||||
|
||||
UpdateGrid();
|
||||
|
||||
@@ -152,48 +164,52 @@ void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren)
|
||||
static_cast<Viewport*>(clientdata)->UpdateGrid();
|
||||
});
|
||||
iren->AddObserver(vtkCommand::InteractionEvent, interactionCallback);
|
||||
d->m_Renderer->GetActiveCamera()->AddObserver(vtkCommand::ModifiedEvent, interactionCallback);
|
||||
pv->m_Renderer->GetActiveCamera()->AddObserver(vtkCommand::ModifiedEvent, interactionCallback);
|
||||
|
||||
|
||||
// Camera-orientation widget (VTK >= 9)
|
||||
#if VTK_MAJOR_VERSION >= 9
|
||||
d->m_CameraWidget = vtkSmartPointer<vtkCameraOrientationWidget>::New();
|
||||
d->m_CameraWidget->SetParentRenderer(d->m_Renderer);
|
||||
d->m_CameraWidget->SetInteractor(iren);
|
||||
d->m_CameraWidget->On();
|
||||
if (!std::getenv("CTEST_PROJECT_NAME")) {
|
||||
pv->m_CameraWidget = vtkSmartPointer<vtkCameraOrientationWidget>::New();
|
||||
pv->m_CameraWidget->SetParentRenderer(pv->m_Renderer);
|
||||
pv->m_CameraWidget->SetInteractor(iren);
|
||||
pv->m_CameraWidget->On();
|
||||
}
|
||||
#endif
|
||||
d->m_Renderer->SetBackground(0.15, 0.15, 0.15);
|
||||
d->m_Renderer->ResetCamera();
|
||||
pv->m_Renderer->SetBackground(0.15, 0.15, 0.15);
|
||||
pv->m_Renderer->ResetCamera();
|
||||
|
||||
// Setup layering for overimposed rendering
|
||||
if (iren->GetRenderWindow()) {
|
||||
iren->GetRenderWindow()->SetNumberOfLayers(2);
|
||||
d->m_Renderer->SetLayer(0);
|
||||
pv->m_Renderer->SetLayer(0);
|
||||
}
|
||||
|
||||
// Setup Handler Widget
|
||||
d->m_HandlerWidget = vtkSmartPointer<vtkHandlerWidget>::New();
|
||||
d->m_HandlerWidget->SetInteractor(iren);
|
||||
d->m_HandlerWidget->SetCurrentRenderer(d->m_Renderer);
|
||||
if (d->m_HandlerWidget->GetOverlayRenderer()) {
|
||||
d->m_HandlerWidget->GetOverlayRenderer()->SetLayer(1);
|
||||
if (!std::getenv("CTEST_PROJECT_NAME")) {
|
||||
pv->m_HandlerWidget = vtkSmartPointer<vtkHandlerWidget>::New();
|
||||
pv->m_HandlerWidget->SetInteractor(iren);
|
||||
pv->m_HandlerWidget->SetCurrentRenderer(pv->m_Renderer);
|
||||
if (pv->m_HandlerWidget->GetOverlayRenderer()) {
|
||||
pv->m_HandlerWidget->GetOverlayRenderer()->SetLayer(1);
|
||||
}
|
||||
|
||||
// Observe InteractionEvent to update the selected puppet when the widget moves it
|
||||
vtkNew<vtkCallbackCommand> widgetInteractionCallback;
|
||||
widgetInteractionCallback->SetClientData(this);
|
||||
widgetInteractionCallback->SetCallback([](vtkObject*, unsigned long, void* clientdata, void*){
|
||||
auto* self = static_cast<Viewport*>(clientdata);
|
||||
for (auto* p : self->m_Puppets) {
|
||||
if (p->IsSelected()) {
|
||||
p->Update();
|
||||
}
|
||||
}
|
||||
});
|
||||
pv->m_HandlerWidget->AddObserver(vtkCommand::InteractionEvent, widgetInteractionCallback);
|
||||
}
|
||||
|
||||
// Observe InteractionEvent to update the selected puppet when the widget moves it
|
||||
vtkNew<vtkCallbackCommand> widgetInteractionCallback;
|
||||
widgetInteractionCallback->SetClientData(this);
|
||||
widgetInteractionCallback->SetCallback([](vtkObject*, unsigned long, void* clientdata, void*){
|
||||
auto* self = static_cast<Viewport*>(clientdata);
|
||||
for (auto* p : self->m_Puppets) {
|
||||
if (p->IsSelected()) {
|
||||
p->Update();
|
||||
}
|
||||
}
|
||||
});
|
||||
d->m_HandlerWidget->AddObserver(vtkCommand::InteractionEvent, widgetInteractionCallback);
|
||||
|
||||
// Picking for selection
|
||||
d->m_Picker = vtkSmartPointer<vtkCellPicker>::New();
|
||||
pv->m_Picker = vtkSmartPointer<vtkCellPicker>::New();
|
||||
vtkNew<vtkCallbackCommand> clickCallback;
|
||||
clickCallback->SetClientData(this);
|
||||
clickCallback->SetCallback([](vtkObject* caller, unsigned long, void* clientdata, void*){
|
||||
@@ -201,8 +217,8 @@ void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren)
|
||||
auto* self = static_cast<Viewport*>(clientdata);
|
||||
|
||||
int* pos = iren->GetEventPosition();
|
||||
self->d->m_Picker->Pick(pos[0], pos[1], 0, self->d->m_Renderer);
|
||||
vtkProp* picked = self->d->m_Picker->GetViewProp();
|
||||
self->pv->m_Picker->Pick(pos[0], pos[1], 0, self->pv->m_Renderer);
|
||||
vtkProp* picked = self->pv->m_Picker->GetViewProp();
|
||||
|
||||
Puppet* target = nullptr;
|
||||
if (picked) {
|
||||
@@ -238,59 +254,59 @@ void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren)
|
||||
iren->AddObserver(vtkCommand::LeftButtonPressEvent, clickCallback);
|
||||
|
||||
// Keyboard events for widget coordinate frame
|
||||
d->m_KeyCallback = vtkSmartPointer<vtkCallbackCommand>::New();
|
||||
d->m_KeyCallback->SetClientData(this);
|
||||
d->m_KeyCallback->SetCallback([](vtkObject* caller, unsigned long event, void* clientdata, void*){
|
||||
pv->m_KeyCallback = vtkSmartPointer<vtkCallbackCommand>::New();
|
||||
pv->m_KeyCallback->SetClientData(this);
|
||||
pv->m_KeyCallback->SetCallback([](vtkObject* caller, unsigned long event, void* clientdata, void*){
|
||||
auto* iren = static_cast<vtkRenderWindowInteractor*>(caller);
|
||||
auto* self = static_cast<Viewport*>(clientdata);
|
||||
|
||||
std::string key = iren->GetKeySym();
|
||||
bool handled = false;
|
||||
|
||||
if (self->d->m_HandlerWidget && self->d->m_HandlerWidget->GetEnabled()) {
|
||||
if (self->pv->m_HandlerWidget && self->pv->m_HandlerWidget->GetEnabled()) {
|
||||
if (key == "l") {
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->d->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::LOCAL);
|
||||
self->pv->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::LOCAL);
|
||||
std::cout << "Widget Frame: LOCAL" << std::endl;
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "g") {
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->d->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::GLOBAL);
|
||||
self->pv->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::GLOBAL);
|
||||
std::cout << "Widget Frame: GLOBAL" << std::endl;
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "c") {
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->d->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::CENTER);
|
||||
self->pv->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::CENTER);
|
||||
std::cout << "Widget Frame: CENTER" << std::endl;
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "k") {
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->d->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::CENTER_LOCAL);
|
||||
self->pv->m_HandlerWidget->SetReferenceFrame(vtkHandlerWidget::CENTER_LOCAL);
|
||||
std::cout << "Widget Frame: CENTER_LOCAL" << std::endl;
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "1") {
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->d->m_HandlerWidget->SetTranslationEnabled(!self->d->m_HandlerWidget->GetTranslationEnabled());
|
||||
self->pv->m_HandlerWidget->SetTranslationEnabled(!self->pv->m_HandlerWidget->GetTranslationEnabled());
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "2") {
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->d->m_HandlerWidget->SetRotationEnabled(!self->d->m_HandlerWidget->GetRotationEnabled());
|
||||
self->pv->m_HandlerWidget->SetRotationEnabled(!self->pv->m_HandlerWidget->GetRotationEnabled());
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
else if (key == "3") {
|
||||
if (event == vtkCommand::KeyPressEvent) {
|
||||
self->d->m_HandlerWidget->SetScalingEnabled(!self->d->m_HandlerWidget->GetScalingEnabled());
|
||||
self->pv->m_HandlerWidget->SetScalingEnabled(!self->pv->m_HandlerWidget->GetScalingEnabled());
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
@@ -304,12 +320,12 @@ void Viewport::SetupPipeline(vtkRenderWindowInteractor* iren)
|
||||
}
|
||||
|
||||
if (handled) {
|
||||
self->d->m_KeyCallback->SetAbortFlag(1);
|
||||
self->pv->m_KeyCallback->SetAbortFlag(1);
|
||||
iren->Render();
|
||||
}
|
||||
});
|
||||
iren->AddObserver(vtkCommand::KeyPressEvent, d->m_KeyCallback, 1.0);
|
||||
iren->AddObserver(vtkCommand::CharEvent, d->m_KeyCallback, 1.0);
|
||||
iren->AddObserver(vtkCommand::KeyPressEvent, pv->m_KeyCallback, 1.0);
|
||||
iren->AddObserver(vtkCommand::CharEvent, pv->m_KeyCallback, 1.0);
|
||||
}
|
||||
|
||||
void Viewport::Reset()
|
||||
@@ -320,15 +336,15 @@ void Viewport::Reset()
|
||||
|
||||
void Viewport::ZoomAuto()
|
||||
{
|
||||
if (d->m_Renderer) {
|
||||
d->m_Renderer->ResetCameraClippingRange();
|
||||
d->m_Renderer->ResetCamera();
|
||||
if (pv->m_Renderer) {
|
||||
pv->m_Renderer->ResetCameraClippingRange();
|
||||
pv->m_Renderer->ResetCamera();
|
||||
}
|
||||
}
|
||||
|
||||
void Viewport::ZoomSelected()
|
||||
{
|
||||
if (!d->m_Renderer) return;
|
||||
if (!pv->m_Renderer) return;
|
||||
|
||||
Puppet* selected = nullptr;
|
||||
for (auto* p : m_Puppets) {
|
||||
@@ -364,15 +380,15 @@ void Viewport::ZoomSelected()
|
||||
newBounds[2*i+1] = center[i] + 2.5 * current_h;
|
||||
}
|
||||
|
||||
d->m_Renderer->ResetCamera(newBounds);
|
||||
d->m_Renderer->ResetCameraClippingRange();
|
||||
pv->m_Renderer->ResetCamera(newBounds);
|
||||
pv->m_Renderer->ResetCameraClippingRange();
|
||||
this->Render();
|
||||
}
|
||||
|
||||
void Viewport::AddPuppet(Puppet& prop)
|
||||
{
|
||||
m_Puppets.push_back(&prop);
|
||||
prop.ConnectRenderer(d->m_Renderer);
|
||||
prop.ConnectRenderer(pv->m_Renderer);
|
||||
Render();
|
||||
}
|
||||
|
||||
@@ -381,7 +397,7 @@ void Viewport::RemovePuppet(Puppet& prop)
|
||||
if (prop.IsSelected()) SelectPuppet(nullptr);
|
||||
auto it = std::find(m_Puppets.begin(), m_Puppets.end(), &prop);
|
||||
if (it != m_Puppets.end()) m_Puppets.erase(it);
|
||||
prop.DisconnectRenderer(d->m_Renderer);
|
||||
prop.DisconnectRenderer(pv->m_Renderer);
|
||||
Render();
|
||||
}
|
||||
|
||||
@@ -391,17 +407,17 @@ void Viewport::SelectPuppet(Puppet* prop)
|
||||
p->SetSelected(p == prop);
|
||||
}
|
||||
|
||||
if (d->m_HandlerWidget) {
|
||||
if (pv->m_HandlerWidget) {
|
||||
if (prop) {
|
||||
vtkProp3D* prop3d = vtkProp3D::SafeDownCast(prop->GetProp());
|
||||
if (prop3d) {
|
||||
d->m_HandlerWidget->SetProp3D(prop3d);
|
||||
d->m_HandlerWidget->SetEnabled(1);
|
||||
d->m_HandlerWidget->PlaceWidget(prop3d->GetBounds());
|
||||
pv->m_HandlerWidget->SetProp3D(prop3d);
|
||||
pv->m_HandlerWidget->SetEnabled(1);
|
||||
pv->m_HandlerWidget->PlaceWidget(prop3d->GetBounds());
|
||||
}
|
||||
} else {
|
||||
d->m_HandlerWidget->SetEnabled(0);
|
||||
d->m_HandlerWidget->SetProp3D(nullptr);
|
||||
pv->m_HandlerWidget->SetEnabled(0);
|
||||
pv->m_HandlerWidget->SetProp3D(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -410,16 +426,16 @@ void Viewport::SelectPuppet(Puppet* prop)
|
||||
|
||||
void Viewport::SetGridVisible(bool visible)
|
||||
{
|
||||
if (d->m_GridActor) {
|
||||
d->m_GridActor->SetVisibility(visible);
|
||||
if (pv->m_GridActor) {
|
||||
pv->m_GridActor->SetVisibility(visible);
|
||||
Render();
|
||||
}
|
||||
}
|
||||
|
||||
bool Viewport::GetGridVisible() const
|
||||
{
|
||||
if (d->m_GridActor) {
|
||||
return d->m_GridActor->GetVisibility() != 0;
|
||||
if (pv->m_GridActor) {
|
||||
return pv->m_GridActor->GetVisibility() != 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -433,26 +449,26 @@ void Viewport::SetGridAxis(Axis axis)
|
||||
|
||||
void Viewport::addProp(vtkProp* prop)
|
||||
{
|
||||
if (d->m_Renderer) {
|
||||
d->m_Renderer->AddActor(prop);
|
||||
if (pv->m_Renderer) {
|
||||
pv->m_Renderer->AddActor(prop);
|
||||
Render();
|
||||
}
|
||||
}
|
||||
|
||||
void Viewport::RemoveProp(vtkProp* prop)
|
||||
{
|
||||
if (d->m_Renderer) {
|
||||
d->m_Renderer->RemoveViewProp(prop);
|
||||
if (pv->m_Renderer) {
|
||||
pv->m_Renderer->RemoveViewProp(prop);
|
||||
Render();
|
||||
}
|
||||
}
|
||||
|
||||
void Viewport::UpdateGrid()
|
||||
{
|
||||
if (!d->m_Renderer || !d->m_GridSource) return;
|
||||
if (d->m_GridActor && !d->m_GridActor->GetVisibility()) return;
|
||||
if (!pv->m_Renderer || !pv->m_GridSource) return;
|
||||
if (pv->m_GridActor && !pv->m_GridActor->GetVisibility()) return;
|
||||
|
||||
vtkCamera* camera = d->m_Renderer->GetActiveCamera();
|
||||
vtkCamera* camera = pv->m_Renderer->GetActiveCamera();
|
||||
if (!camera) return;
|
||||
|
||||
// Determine the "scale" of the view (how many units are visible vertically)
|
||||
@@ -506,15 +522,15 @@ void Viewport::UpdateGrid()
|
||||
p1[idxH] = maxH; p1[idxV] = minV; p1[idxN] = centerN;
|
||||
p2[idxH] = minH; p2[idxV] = maxV; p2[idxN] = centerN;
|
||||
|
||||
d->m_GridSource->SetOrigin(origin);
|
||||
d->m_GridSource->SetPoint1(p1);
|
||||
d->m_GridSource->SetPoint2(p2);
|
||||
d->m_GridSource->SetXResolution(numLines);
|
||||
d->m_GridSource->SetYResolution(numLines);
|
||||
d->m_GridSource->Update();
|
||||
pv->m_GridSource->SetOrigin(origin);
|
||||
pv->m_GridSource->SetPoint1(p1);
|
||||
pv->m_GridSource->SetPoint2(p2);
|
||||
pv->m_GridSource->SetXResolution(numLines);
|
||||
pv->m_GridSource->SetYResolution(numLines);
|
||||
pv->m_GridSource->Update();
|
||||
|
||||
if (d->m_OriginAxes) {
|
||||
d->m_OriginAxes->SetScaleFactor(spacing);
|
||||
if (pv->m_OriginAxes) {
|
||||
pv->m_OriginAxes->SetScaleFactor(spacing);
|
||||
}
|
||||
|
||||
// Update annotation for grid size
|
||||
@@ -526,7 +542,7 @@ void Viewport::UpdateGrid()
|
||||
} else {
|
||||
sprintf(gridLabel, "Grid: %.0f mm", spacing);
|
||||
}
|
||||
d->m_Annotation->SetText(1, gridLabel);
|
||||
pv->m_Annotation->SetText(1, gridLabel);
|
||||
}
|
||||
|
||||
} // namespace Vtk
|
||||
|
||||
Reference in New Issue
Block a user