#include <Prs3d_LineAspect.hxx>
#include <V3d_View.hxx>
#include <Visual3d_View.hxx>
+#include <AIS_ListOfInteractive.hxx>
+#include <AIS_ListIteratorOfListOfInteractive.hxx>
+#include <AIS_Shape.hxx>
+
+#include <QMouseEvent>
#ifdef WIN32
#include <WNT_Window.hxx>
return aWnd;
}
+XGUI_ViewWindow* XGUI_Viewer::activeViewWindow() const
+{
+ return dynamic_cast<XGUI_ViewWindow*>(myActiveView->widget());
+}
+
+void XGUI_Viewer::getSelectedObjects(AIS_ListOfInteractive& theList)
+{
+ theList.Clear();
+ for (myAISContext->InitSelected(); myAISContext->MoreSelected(); myAISContext->NextSelected())
+ theList.Append(myAISContext->SelectedInteractive());
+}
+
+void XGUI_Viewer::getSelectedShapes(NCollection_List<TopoDS_Shape>& theList)
+{
+ Handle(AIS_InteractiveContext) ic = AISContext();
+
+ for (ic->InitSelected(); ic->MoreSelected(); ic->NextSelected()) {
+ TopoDS_Shape aShape = ic->SelectedShape();
+ if (!aShape.IsNull())
+ theList.Append(aShape);
+ }
+}
+
+void XGUI_Viewer::setObjectsSelected(const AIS_ListOfInteractive& theList)
+{
+ AIS_ListIteratorOfListOfInteractive aIt;
+ for (aIt.Initialize(theList); aIt.More(); aIt.Next())
+ myAISContext->AddOrRemoveSelected(aIt.Value(), false);
+ myAISContext->UpdateCurrentViewer();
+}
+
/*! Sets hot button
*\param theOper - hot operation
*\param theState - adding state to state map operations.
theButton = myButtonMap[theInteractionStyle][theOper];
}
+void XGUI_Viewer::setViewProjection(double theX, double theY, double theZ)
+{
+ XGUI_ViewWindow* aWindow = dynamic_cast<XGUI_ViewWindow*>(myActiveView->widget());
+ if (aWindow) {
+ Handle(V3d_View) aView3d = aWindow->viewPort()->getView();
+ if ( !aView3d.IsNull() )
+ aView3d->SetProj(theX, theY, theZ);
+ aWindow->viewPort()->fitAll();
+ }
+}
+
/*!
Changes visibility of trihedron to opposite
*/
this, SIGNAL(tryCloseView(XGUI_ViewWindow*)));
connect(aWindow, SIGNAL(mousePressed(XGUI_ViewWindow*, QMouseEvent*)),
- this, SIGNAL(mousePress(XGUI_ViewWindow*, QMouseEvent*)));
+ this, SLOT(onMousePressed(XGUI_ViewWindow*, QMouseEvent*)));
connect(aWindow, SIGNAL(mouseReleased(XGUI_ViewWindow*, QMouseEvent*)),
this, SIGNAL(mouseRelease(XGUI_ViewWindow*, QMouseEvent*)));
// connect(aWindow, SIGNAL(contextMenuRequested( QContextMenuEvent* )),
// this, SLOT (onContextMenuRequested( QContextMenuEvent* )));
+ connect(aWindow, SIGNAL(mouseMoving(XGUI_ViewWindow*, QMouseEvent*)),
+ this, SLOT(onMouseMove(XGUI_ViewWindow*, QMouseEvent*)));
+
+ connect(aWindow, SIGNAL(mouseReleased(XGUI_ViewWindow*, QMouseEvent*)),
+ this, SLOT(onMouseReleased(XGUI_ViewWindow*, QMouseEvent*)));
+
myViews.append(theView);
}
/*!
Emit activated for view \a view.
*/
-static int AA = 0;
void XGUI_Viewer::onWindowActivated(QMdiSubWindow* view)
{
- qDebug("### windowActivated %i\n", AA++);
- if (view && (view != myActiveView)) {
+ if (view && (view != myActiveView) && (!view->isMinimized())) {
myActiveView = view;
((XGUI_ViewWindow*)myActiveView->widget())->windowActivated();
QList<QMdiSubWindow*>::iterator aIt;
}
}
}
+
+/*!
+ SLOT: called on mouse move, processes hilighting
+*/
+void XGUI_Viewer::onMouseMove(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent)
+{
+ XGUI_ViewPort* aViewPort = theWindow->viewPort();
+ Handle(V3d_View) aView3d = aViewPort->getView();
+
+ if ( !aView3d.IsNull() ) {
+ myAISContext->MoveTo(theEvent->x(), theEvent->y(), aView3d);
+ mouseMoved(theEvent->pos());
+ }
+}
+
+/*!
+ SLOT: called on mouse button release, finishes selection
+*/
+void XGUI_Viewer::onMouseReleased(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent)
+{
+ myAISContext->Select();
+
+ emit mouseReleased(theEvent->pos());
+}