+ fix issue with rotation enter with panning

git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5103 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
This commit is contained in:
wmayer 2011-11-09 09:38:36 +00:00
parent c7985e5c06
commit 9158a92e4f
5 changed files with 47 additions and 5 deletions

View File

@ -247,7 +247,10 @@ SbBool BlenderNavigationStyle::processSoEvent(const SoEvent * const ev)
float dci = (float)QApplication::doubleClickInterval()/1000.0f; float dci = (float)QApplication::doubleClickInterval()/1000.0f;
// is it just a middle click? // is it just a middle click?
if (tmp.getValue() < dci && !this->lockrecenter) { if (tmp.getValue() < dci && !this->lockrecenter) {
panToCenter(panningplane, posn); if (!this->moveToPoint(pos)) {
panToCenter(panningplane, posn);
this->interactiveCountDec();
}
processed = TRUE; processed = TRUE;
} }
} }

View File

@ -189,7 +189,10 @@ SbBool CADNavigationStyle::processSoEvent(const SoEvent * const ev)
float dci = (float)QApplication::doubleClickInterval()/1000.0f; float dci = (float)QApplication::doubleClickInterval()/1000.0f;
// is it just a left click? // is it just a left click?
if (tmp.getValue() < dci && !this->lockrecenter) { if (tmp.getValue() < dci && !this->lockrecenter) {
panToCenter(panningplane, posn); if (!this->moveToPoint(pos)) {
panToCenter(panningplane, posn);
this->interactiveCountDec();
}
processed = TRUE; processed = TRUE;
} }
} }
@ -273,7 +276,10 @@ SbBool CADNavigationStyle::processSoEvent(const SoEvent * const ev)
float dci = (float)QApplication::doubleClickInterval()/1000.0f; float dci = (float)QApplication::doubleClickInterval()/1000.0f;
// is it just a middle click? // is it just a middle click?
if (tmp.getValue() < dci && !this->lockrecenter) { if (tmp.getValue() < dci && !this->lockrecenter) {
panToCenter(panningplane, posn); if (!this->moveToPoint(pos)) {
panToCenter(panningplane, posn);
this->interactiveCountDec();
}
processed = TRUE; processed = TRUE;
} }
} }

View File

@ -182,7 +182,10 @@ SbBool InventorNavigationStyle::processSoEvent(const SoEvent * const ev)
float dci = (float)QApplication::doubleClickInterval()/1000.0f; float dci = (float)QApplication::doubleClickInterval()/1000.0f;
// is it just a left click? // is it just a left click?
if (tmp.getValue() < dci && !this->lockrecenter) { if (tmp.getValue() < dci && !this->lockrecenter) {
panToCenter(panningplane, posn); if (!this->moveToPoint(pos)) {
panToCenter(panningplane, posn);
this->interactiveCountDec();
}
processed = TRUE; processed = TRUE;
} }
} }
@ -237,7 +240,10 @@ SbBool InventorNavigationStyle::processSoEvent(const SoEvent * const ev)
float dci = (float)QApplication::doubleClickInterval()/1000.0f; float dci = (float)QApplication::doubleClickInterval()/1000.0f;
// is it just a middle click? // is it just a middle click?
if (tmp.getValue() < dci && !this->lockrecenter) { if (tmp.getValue() < dci && !this->lockrecenter) {
panToCenter(panningplane, posn); if (!this->moveToPoint(pos)) {
panToCenter(panningplane, posn);
this->interactiveCountDec();
}
processed = TRUE; processed = TRUE;
} }
} }

View File

@ -281,6 +281,32 @@ void NavigationStyle::seekToPoint(const SbVec3f& scenepos)
viewer->seekToPoint(scenepos); viewer->seekToPoint(scenepos);
} }
SbBool NavigationStyle::moveToPoint(const SbVec2s screenpos)
{
SoCamera* cam = viewer->getCamera();
if (cam == 0) return FALSE;
SoRayPickAction rpaction(viewer->getViewportRegion());
rpaction.setPoint(screenpos);
rpaction.setRadius(2);
rpaction.apply(viewer->getSceneManager()->getSceneGraph());
SoPickedPoint * picked = rpaction.getPickedPoint();
if (!picked) {
this->interactiveCountInc();
return FALSE;
}
SbVec3f hitpoint;
hitpoint = picked->getPoint();
SbVec3f direction;
cam->orientation.getValue().multVec(SbVec3f(0, 0, -1), direction);
cam->focalDistance = viewer->getSeekDistance();
cam->position = hitpoint - cam->focalDistance.getValue() * direction;
return TRUE;
}
void NavigationStyle::setCameraOrientation(const SbRotation& rot) void NavigationStyle::setCameraOrientation(const SbRotation& rot)
{ {
SoCamera* cam = viewer->getCamera(); SoCamera* cam = viewer->getCamera();

View File

@ -149,6 +149,7 @@ protected:
void setSeekMode(SbBool enable); void setSeekMode(SbBool enable);
SbBool seekToPoint(const SbVec2s screenpos); SbBool seekToPoint(const SbVec2s screenpos);
void seekToPoint(const SbVec3f& scenepos); void seekToPoint(const SbVec3f& scenepos);
SbBool moveToPoint(const SbVec2s screenpos);
void reorientCamera(SoCamera * camera, const SbRotation & rot); void reorientCamera(SoCamera * camera, const SbRotation & rot);
void panCamera(SoCamera * camera, void panCamera(SoCamera * camera,