MCPcopy Create free account
hub / github.com/Kitware/VTK / Spin

Method Spin

Interaction/Style/vtkInteractorStyleTrackballActor.cxx:295–362  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

293
294//------------------------------------------------------------------------------
295void vtkInteractorStyleTrackballActor::Spin()
296{
297 if (this->CurrentRenderer == nullptr || this->InteractionProp == nullptr)
298 {
299 return;
300 }
301
302 vtkRenderWindowInteractor* rwi = this->Interactor;
303 vtkCamera* cam = this->CurrentRenderer->GetActiveCamera();
304
305 // Get the axis to rotate around = vector from eye to origin
306
307 double* obj_center = this->InteractionProp->GetCenter();
308
309 double motion_vector[3];
310 double view_point[3];
311
312 if (cam->GetParallelProjection())
313 {
314 // If parallel projection, want to get the view plane normal...
315 cam->ComputeViewPlaneNormal();
316 cam->GetViewPlaneNormal(motion_vector);
317 }
318 else
319 {
320 // Perspective projection, get vector from eye to center of actor
321 cam->GetPosition(view_point);
322 motion_vector[0] = view_point[0] - obj_center[0];
323 motion_vector[1] = view_point[1] - obj_center[1];
324 motion_vector[2] = view_point[2] - obj_center[2];
325 vtkMath::Normalize(motion_vector);
326 }
327
328 double disp_obj_center[3];
329
330 this->ComputeWorldToDisplay(obj_center[0], obj_center[1], obj_center[2], disp_obj_center);
331
332 double newAngle =
333 vtkMath::DegreesFromRadians(atan2(rwi->GetEventPosition()[1] - disp_obj_center[1],
334 rwi->GetEventPosition()[0] - disp_obj_center[0]));
335
336 double oldAngle =
337 vtkMath::DegreesFromRadians(atan2(rwi->GetLastEventPosition()[1] - disp_obj_center[1],
338 rwi->GetLastEventPosition()[0] - disp_obj_center[0]));
339
340 double scale[3];
341 scale[0] = scale[1] = scale[2] = 1.0;
342
343 double** rotate = new double*[1];
344 rotate[0] = new double[4];
345
346 rotate[0][0] = newAngle - oldAngle;
347 rotate[0][1] = motion_vector[0];
348 rotate[0][2] = motion_vector[1];
349 rotate[0][3] = motion_vector[2];
350
351 this->Prop3DTransform(this->InteractionProp, obj_center, 1, rotate, scale);
352

Callers 1

OnMouseMoveMethod · 0.95

Calls 9

Prop3DTransformMethod · 0.95
GetActiveCameraMethod · 0.80
ComputeWorldToDisplayMethod · 0.80
RenderMethod · 0.65
NormalizeFunction · 0.50
GetCenterMethod · 0.45
GetPositionMethod · 0.45

Tested by

no test coverage detected