#include #include #include #include #include #include #include #include #include #include #include // ------------------------------------------------------------------------- cpExtensions::Interaction::SphereWidget:: Self* cpExtensions::Interaction::SphereWidget:: New() { return(new Self); } // ------------------------------------------------------------------------- void cpExtensions::Interaction::SphereWidget:: SetInteractor(vtkRenderWindowInteractor* rwi) { this->Superclass::SetInteractor(rwi); TBaseStyle* s = dynamic_cast(rwi->GetInteractorStyle()); if (s != NULL) { s->AddMouseClickCommand(Self::_Click, this); //s->AddMouseDoubleClickCommand( Self::_DoubleClick, this ); s->AddKeyCommand(Self::_KeyPress, this); } // fi } // ------------------------------------------------------------------------- cpExtensions::Interaction::SphereWidget:: SphereWidget() : Superclass() { /*vtkSmartPointer self = vtkself::SafeDownCast(this->GetRepresentation());*/ //self->SetHandleSize(0); //self->SetRadialLine(2); this->SetRadius(7); this->SetPhiResolution(10); this->SetThetaResolution(20); //self->HandleVisibilityOff(); //self->SetHandleText(0); this->SetRepresentationToWireframe(); // Remove default translations /* vtkWidgetEventTranslator* t = this->GetEventTranslator(); t->RemoveTranslation(vtkCommand::LeftButtonPressEvent); t->RemoveTranslation(vtkCommand::MiddleButtonPressEvent); t->RemoveTranslation(vtkCommand::RightButtonPressEvent);*/ } // ------------------------------------------------------------------------- cpExtensions::Interaction::SphereWidget:: ~SphereWidget() { } // ------------------------------------------------------------------------- void cpExtensions::Interaction::SphereWidget:: _Click( void* data, const TBaseStyle::ButtonID& button, int* idx, double* pos, bool alt, bool ctr, bool sft ) { SphereWidget* self = reinterpret_cast(data); self->Superclass::StartInteraction(); self->InvokeEvent(vtkCommand::LeftButtonPressEvent, NULL); //if( self->WidgetState == vtkSphereWidget2::MovingSeed ) // return; //int st = self->WidgetRep->ComputeInteractionState( idx[ 0 ], idx[ 1 ] ); //if( st == vtkSeedRepresentation::NearSeed ) //{ // self->WidgetState = vtkSphereWidget2::MovingSeed; // // Invoke an event on ourself for the handles // self->InvokeEvent( vtkCommand::LeftButtonPressEvent, NULL ); // self->Superclass::StartInteraction( ); // self->InvokeEvent( vtkCommand::StartInteractionEvent, NULL ); // self->EventCallbackCommand->SetAbortFlag( 1 ); // self->Render( ); //} // fi } // ------------------------------------------------------------------------- void cpExtensions::Interaction::SphereWidget:: _DoubleClick( void* data, const TBaseStyle::ButtonID& button, int* idx, double* pos, bool alt, bool ctr, bool sft ) { } // ------------------------------------------------------------------------- void cpExtensions::Interaction::SphereWidget::_KeyPress(void* data, const char& key) { SphereWidget* self = reinterpret_cast(data); double handlePosition[3]; /* vtkself* self = vtkself::SafeDownCast(self->GetRepresentation()); */ auto center = self->GetCenter(); auto center2 = self->GetCenter(); auto radius = self->GetRadius(); self->Superclass::StartInteraction(); switch (key) { case 122: // Z & z case 90: radius += 0.1; //self->SetRadius(radius); break; case 88: // X & x case 120: radius -= 0.1; //self->SetRadius(radius); break; case 119: // W & w case 87: center[0] += 1; self->Translate(center, center2); break; case 83: // S & s case 115: center[0] -= 1; self->Translate(center, center2); break; case 65: // A & a case 97: center[1] += 1; self->SetCenter(center); break; case 100: // D & d case 68: center[1] -= 1; self->SetCenter(center); break; case 81: // Q & q case 113: center[2] += 1; self->SetCenter(center); break; case 69: // E & e case 101: center[2] -= 1; self->SetCenter(center); break; default: break; } self->SetRadius(radius); self->Translate(center, center2); vtkSmartPointer sphere = vtkSmartPointer::New(); self->InvokeEvent(vtkCommand::ModifiedEvent, NULL); self->Modified(); self->GetInteractor()->Render(); self->ReleaseFocus(); } // eof - $RCSfile$