@@ -80,22 +80,37 @@ namespace SCIRun {
8080 {
8181 glm::vec2 screenSpace = calculateScreenSpaceCoords (pos);
8282 mArcLookAt ->doReferenceDown (screenSpace);
83+ lastPos = screenSpace;
84+ movementVec = glm::vec2 (0.0 , 0.0 );
8385 }
8486
8587 // ----------------------------------------------------------------------------------------------
8688 void SRCamera::mouseMoveEvent (const glm::ivec2& pos, SRInterface::MouseButton btn)
8789 {
90+ static const float spinThreashold = 0 .01f ;
8891 glm::vec2 screenSpace = calculateScreenSpaceCoords (pos);
8992 switch (mInterface .getMouseMode ())
9093 {
9194 case SRInterface::MOUSE_OLDSCIRUN:
9295 if (btn == SRInterface::MOUSE_LEFT && !lockPanning_) mArcLookAt ->doPan (screenSpace);
9396 if (btn == SRInterface::MOUSE_RIGHT && !lockZoom_) mArcLookAt ->doZoom (screenSpace);
94- if (btn == SRInterface::MOUSE_MIDDLE && !lockRotation_) mArcLookAt ->doRotation (screenSpace);
97+ if (btn == SRInterface::MOUSE_MIDDLE && !lockRotation_)
98+ {
99+ mArcLookAt ->doRotation (screenSpace);
100+ movementVec = screenSpace - lastPos;
101+ if (glm::length (movementVec) < spinThreashold) movementVec = glm::vec2 (0.0 , 0.0 );
102+ lastPos = screenSpace;
103+ }
95104 break ;
96105
97106 case SRInterface::MOUSE_NEWSCIRUN:
98- if (btn == SRInterface::MOUSE_LEFT && !lockRotation_) mArcLookAt ->doRotation (screenSpace);
107+ if (btn == SRInterface::MOUSE_LEFT && !lockRotation_)
108+ {
109+ mArcLookAt ->doRotation (screenSpace);
110+ movementVec = screenSpace - lastPos;
111+ if (glm::length (movementVec) < spinThreashold) movementVec = glm::vec2 (0.0 , 0.0 );
112+ lastPos = screenSpace;
113+ }
99114 if (btn == SRInterface::MOUSE_RIGHT && !lockPanning_) mArcLookAt ->doPan (screenSpace);
100115 break ;
101116 }
@@ -173,6 +188,22 @@ namespace SCIRun {
173188 mInvertVal = -1 ;
174189 }
175190
191+ // ----------------------------------------------------------------------------------------------
192+ void SRCamera::tryAutoRotate ()
193+ {
194+ mArcLookAt ->doReferenceDown (lastPos);
195+ mArcLookAt ->doRotation (lastPos + movementVec);
196+ setClippingPlanes ();
197+ }
198+
199+ // ----------------------------------------------------------------------------------------------
200+ void SRCamera::rotate (glm::vec2 vector)
201+ {
202+ mArcLookAt ->doReferenceDown (glm::vec2 (0.0 , 0.0 ));
203+ mArcLookAt ->doRotation (vector);
204+ setClippingPlanes ();
205+ }
206+
176207 // ----------------------------------------------------------------------------------------------
177208 glm::vec2 SRCamera::calculateScreenSpaceCoords (const glm::ivec2& mousePos)
178209 {
0 commit comments