add vtk geant solid and scene
This commit is contained in:
@@ -100,6 +100,7 @@ vtkHandlerWidget::vtkHandlerWidget() : d(new HandlerWidgetData()) {
|
||||
}
|
||||
|
||||
vtkHandlerWidget::~vtkHandlerWidget() {
|
||||
this->SetEnabled(0);
|
||||
delete d;
|
||||
}
|
||||
|
||||
@@ -194,9 +195,12 @@ void vtkHandlerWidget::SetEnabled(int enabling) {
|
||||
|
||||
this->Enabled = 0;
|
||||
this->Highlight(nullptr);
|
||||
this->Interactor->RemoveObserver(this->EventCallbackCommand);
|
||||
if (this->Interactor->GetRenderWindow()) {
|
||||
this->Interactor->GetRenderWindow()->RemoveRenderer(this->d->m_OverlayRenderer);
|
||||
if (this->Interactor) {
|
||||
this->Interactor->RemoveObserver(this->EventCallbackCommand);
|
||||
if (this->Interactor->GetRenderWindow()) {
|
||||
this->Interactor->GetRenderWindow()->MakeCurrent();
|
||||
this->Interactor->GetRenderWindow()->RemoveRenderer(this->d->m_OverlayRenderer);
|
||||
}
|
||||
}
|
||||
this->d->m_OverlayRenderer->RemoveAllViewProps();
|
||||
this->InvokeEvent(::vtkCommand::DisableEvent, nullptr);
|
||||
@@ -792,21 +796,23 @@ void vtkHandlerWidget::UpdateGizmoPosition() {
|
||||
if (bboxSize < 1e-6) bboxSize = 1.0;
|
||||
|
||||
double screenLimit = bboxSize * 2.0; // Default if no renderer
|
||||
if (this->CurrentRenderer) {
|
||||
int *sz = this->CurrentRenderer->GetSize();
|
||||
if (sz[1] > 0) {
|
||||
double pixelSize = std::min(sz[0], sz[1]) / 5.0;
|
||||
vtkCamera *cam = this->CurrentRenderer->GetActiveCamera();
|
||||
if (cam->GetParallelProjection()) {
|
||||
screenLimit = (pixelSize / (double)sz[1]) * 2.0 * cam->GetParallelScale();
|
||||
} else {
|
||||
double dist = cam->GetDistance();
|
||||
double angleRad = vtkMath::Pi() * cam->GetViewAngle() / 180.0;
|
||||
double viewHeightAtDist = 2.0 * dist * tan(angleRad / 2.0);
|
||||
screenLimit = (pixelSize / (double)sz[1]) * viewHeightAtDist;
|
||||
if (this->CurrentRenderer && this->CurrentRenderer->GetRenderWindow() && this->CurrentRenderer->GetRenderWindow()->GetInteractor()) {
|
||||
int *sz = this->CurrentRenderer->GetSize();
|
||||
if (sz[1] > 0) {
|
||||
double pixelSize = std::min(sz[0], sz[1]) / 5.0;
|
||||
vtkCamera *cam = this->CurrentRenderer->GetActiveCamera();
|
||||
if (cam) {
|
||||
if (cam->GetParallelProjection()) {
|
||||
screenLimit = (pixelSize / (double)sz[1]) * 2.0 * cam->GetParallelScale();
|
||||
} else {
|
||||
double dist = cam->GetDistance();
|
||||
double angleRad = vtkMath::Pi() * cam->GetViewAngle() / 180.0;
|
||||
double viewHeightAtDist = 2.0 * dist * tan(angleRad / 2.0);
|
||||
screenLimit = (pixelSize / (double)sz[1]) * viewHeightAtDist;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
double scaleFactor = std::min(bboxSize, screenLimit);
|
||||
|
||||
vtkNew<vtkMatrix4x4> mat_gizmo;
|
||||
|
||||
Reference in New Issue
Block a user