mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-26 09:20:35 +05:00
Issues 0022843, 0022845, 0022846
* Issue 0022845: EDF GEOM: [HYDRO] Hiding the coordinates system part of the dialog box in the polyline editor - Disabled display of coordinate system combo box * Issue 0022843: EDF GEOM: [HYDRO] Polyline using a former polyline - Changed algorithm of polyline and spline construction * Issue 0022846: EDF GEOM: [HYDRO] Creation of a polyline: add intermediate points and remove points - Added possibility to add/remove/modify new or intermediate points, select and modify them - Added possibility to drag and drop points in a view - Set violet color for preview in temporary Z layer - Changed behavior of selected object
This commit is contained in:
parent
12a5d6420b
commit
55a306227f
@ -318,6 +318,7 @@ int CurveCreator_Widget::changeInteractionStyle( int theStyle )
|
||||
//=======================================================================
|
||||
void CurveCreator_Widget::reset()
|
||||
{
|
||||
stopActionMode();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::setCurve( CurveCreator_ICurve* theCurve )
|
||||
@ -618,8 +619,6 @@ void CurveCreator_Widget::onModifySection()
|
||||
mySectionView->sectionChanged(mySection);
|
||||
updateUndoRedo();
|
||||
onCancelSection();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::onJoin()
|
||||
@ -653,8 +652,6 @@ void CurveCreator_Widget::onJoin()
|
||||
if( aNewSectSize != aMainSectSize )
|
||||
mySectionView->pointsAdded( aMainSect, aMainSectSize, aNewSectSize-aMainSectSize );*/
|
||||
updateUndoRedo();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::onRemove()
|
||||
@ -683,8 +680,6 @@ void CurveCreator_Widget::onClearAll()
|
||||
mySectionView->reset();
|
||||
updateActionsStates();
|
||||
updateUndoRedo();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::onJoinAll()
|
||||
@ -702,8 +697,6 @@ void CurveCreator_Widget::onJoinAll()
|
||||
mySectionView->reset();
|
||||
updateActionsStates();
|
||||
updateUndoRedo();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::onUndoSettings()
|
||||
@ -722,8 +715,6 @@ void CurveCreator_Widget::onSetSpline()
|
||||
mySectionView->sectionChanged(aSelSections[i]);
|
||||
}
|
||||
updateUndoRedo();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::onSetPolyline()
|
||||
@ -737,8 +728,6 @@ void CurveCreator_Widget::onSetPolyline()
|
||||
mySectionView->sectionChanged( aSelSections[i] );
|
||||
}
|
||||
updateUndoRedo();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::onCloseSections()
|
||||
@ -752,8 +741,6 @@ void CurveCreator_Widget::onCloseSections()
|
||||
mySectionView->sectionChanged(aSelSections[i]);
|
||||
}
|
||||
updateUndoRedo();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::onUncloseSections()
|
||||
@ -767,8 +754,6 @@ void CurveCreator_Widget::onUncloseSections()
|
||||
mySectionView->sectionChanged(aSelSections[i]);
|
||||
}
|
||||
updateUndoRedo();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::onUndo()
|
||||
@ -781,8 +766,6 @@ void CurveCreator_Widget::onUndo()
|
||||
myCurve->undo();
|
||||
finishCurveModification();
|
||||
mySectionView->reset();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::onRedo()
|
||||
@ -794,8 +777,6 @@ void CurveCreator_Widget::onRedo()
|
||||
myCurve->redo();
|
||||
finishCurveModification();
|
||||
mySectionView->reset();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::updateUndoRedo()
|
||||
@ -1005,8 +986,9 @@ void CurveCreator_Widget::onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent
|
||||
if ( theEvent->button() != Qt::LeftButton )
|
||||
return;
|
||||
|
||||
myPressedX = theEvent->x();
|
||||
myPressedY = theEvent->y();
|
||||
// Initialize the starting point
|
||||
myStartPoint.setX( theEvent->x() );
|
||||
myStartPoint.setY( theEvent->y() );
|
||||
|
||||
switch( getActionMode() ) {
|
||||
case ModificationMode: {
|
||||
@ -1028,11 +1010,61 @@ void CurveCreator_Widget::onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent
|
||||
* \param theWindow an owner of the signal
|
||||
* \param theEvent a mouse event
|
||||
*/
|
||||
void CurveCreator_Widget::onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEvent )
|
||||
void CurveCreator_Widget::onMouseRelease( SUIT_ViewWindow* theWindow, QMouseEvent* theEvent )
|
||||
{
|
||||
if ( getActionMode() != ModificationMode )
|
||||
|
||||
if (theEvent->button() != Qt::LeftButton) return;
|
||||
if (!theWindow->inherits("OCCViewer_ViewWindow")) return;
|
||||
|
||||
// Initialize the ending point
|
||||
myEndPoint.setX( theEvent->x() );
|
||||
myEndPoint.setY( theEvent->y() );
|
||||
|
||||
bool aHasShift = ( theEvent->modifiers() & Qt::ShiftModifier );
|
||||
|
||||
// Highlight detected objects
|
||||
Handle(AIS_InteractiveContext) aCtx = getAISContext();
|
||||
if ( !aCtx.IsNull() )
|
||||
{
|
||||
OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*) theWindow;
|
||||
if (!aView)
|
||||
return;
|
||||
|
||||
if (!aHasShift)
|
||||
aCtx->ClearCurrents( false );
|
||||
|
||||
Handle(V3d_View) aView3d = aView->getViewPort()->getView();
|
||||
if ( !aView3d.IsNull() )
|
||||
{
|
||||
// Initialize the single selection if start and end points are equal,
|
||||
// otherwise a rectangular selection.
|
||||
if ( myStartPoint == myEndPoint )
|
||||
{
|
||||
aCtx->MoveTo( myEndPoint.x(), myEndPoint.y(), aView3d );
|
||||
if ( aHasShift )
|
||||
aCtx->ShiftSelect();
|
||||
else
|
||||
aCtx->Select();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( aHasShift )
|
||||
aCtx->ShiftSelect( myStartPoint.x(), myStartPoint.y(), myEndPoint.x(), myEndPoint.y(),
|
||||
aView3d, Standard_False );
|
||||
else
|
||||
aCtx->Select( myStartPoint.x(), myStartPoint.y(), myEndPoint.x(), myEndPoint.y(),
|
||||
aView3d, Standard_False );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( getActionMode() != ModificationMode )
|
||||
{
|
||||
// Emit selectionChanged() signal
|
||||
getOCCViewer()->performSelectionChanged();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( myDragStarted ) {
|
||||
bool isDragged = myDragged;
|
||||
CurveCreator_ICurve::SectionToPointList aDraggedPoints;
|
||||
@ -1104,17 +1136,13 @@ void CurveCreator_Widget::onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEven
|
||||
}
|
||||
else // check whether the segment is clicked an a new point should be added to the segment
|
||||
{
|
||||
int aReleasedX = theEvent->x();
|
||||
int aReleasedY = theEvent->y();
|
||||
if ( myPressedX == aReleasedX && myPressedY == aReleasedY )
|
||||
insertPointToSelectedSegment( aReleasedX, aReleasedY );
|
||||
if ( myStartPoint.x() == myEndPoint.x() && myStartPoint.y() == myEndPoint.y() )
|
||||
insertPointToSelectedSegment( myEndPoint.x(), myStartPoint.y() );
|
||||
}
|
||||
|
||||
// updates the input panel table to show the selected point coordinates
|
||||
updateLocalPointView();
|
||||
updateUndoRedo();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1182,8 +1210,6 @@ void CurveCreator_Widget::onCellChanged( int theRow, int theColumn )
|
||||
myCurve->setPoint( aCurrSect, aPntIndex, aChangedPos );
|
||||
|
||||
finishCurveModification( aSelPoints );
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1201,8 +1227,6 @@ void CurveCreator_Widget::removeSection()
|
||||
}
|
||||
mySectionView->clearSelection();
|
||||
updateUndoRedo();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1221,8 +1245,6 @@ void CurveCreator_Widget::removePoint()
|
||||
myCurve->removeSeveralPoints( aPoints );
|
||||
finishCurveModification( CurveCreator_ICurve::SectionToPointList() );
|
||||
mySectionView->reset();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::addNewPoint(const CurveCreator::Coordinates& theCoords)
|
||||
@ -1238,8 +1260,6 @@ void CurveCreator_Widget::addNewPoint(const CurveCreator::Coordinates& theCoords
|
||||
mySectionView->pointsAdded( aSection, myCurve->getNbPoints( aSection ) );
|
||||
updateActionsStates();
|
||||
updateUndoRedo();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::insertPointToSelectedSegment( const int theX,
|
||||
@ -1306,8 +1326,6 @@ void CurveCreator_Widget::insertPointToSelectedSegment( const int theX,
|
||||
finishCurveModification( aSelPoints );
|
||||
|
||||
setSelectedPoints();
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::moveSelectedPoints( const int theXPosition,
|
||||
@ -1355,8 +1373,6 @@ void CurveCreator_Widget::moveSelectedPoints( const int theXPosition,
|
||||
|
||||
myDragged = true;
|
||||
finishCurveModification( myDragPoints );
|
||||
|
||||
emit curveModified();
|
||||
}
|
||||
|
||||
void CurveCreator_Widget::updateLocalPointView()
|
||||
|
@ -100,7 +100,6 @@ signals:
|
||||
void selectionChanged();
|
||||
void subOperationStarted( QWidget*, bool );
|
||||
void subOperationFinished( QWidget* );
|
||||
void curveModified();
|
||||
|
||||
public slots:
|
||||
|
||||
@ -205,6 +204,11 @@ private:
|
||||
bool contains( const CurveCreator_ICurve::SectionToPointList& theList,
|
||||
const CurveCreator_ICurve::SectionToPoint& theValue ) const;
|
||||
|
||||
protected:
|
||||
// Boundary points of mouse to select the points
|
||||
QPoint myStartPoint;
|
||||
QPoint myEndPoint;
|
||||
|
||||
private:
|
||||
QMap<ActionId, QAction*> myActionMap;
|
||||
CurveCreator_ICurve* myCurve;
|
||||
@ -223,8 +227,6 @@ private:
|
||||
QMap<CurveCreator_ICurve::SectionToPoint, CurveCreator::Coordinates> myInitialDragPointsCoords;
|
||||
bool myDragged;
|
||||
QByteArray myGuiState;
|
||||
int myPressedX;
|
||||
int myPressedY;
|
||||
OCCViewer_ViewWindow::Mode2dType myOld2DMode;
|
||||
};
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "EntityGUI_PolylineDlg.h"
|
||||
#include <CurveCreator_Curve.hxx>
|
||||
#include <CurveCreator_Displayer.hxx>
|
||||
#include <CurveCreator_Utils.hxx>
|
||||
#include <CurveCreator_Widget.h>
|
||||
#include <DlgRef.h>
|
||||
@ -40,6 +41,7 @@
|
||||
#include <BRep_Tool.hxx>
|
||||
#include <Geom_Surface.hxx>
|
||||
#include <GeomLib_IsPlanarSurface.hxx>
|
||||
#include <Prs3d_LineAspect.hxx>
|
||||
#include <TopoDS.hxx>
|
||||
|
||||
#include <QGroupBox>
|
||||
@ -63,7 +65,9 @@ EntityGUI_PolylineDlg::EntityGUI_PolylineDlg
|
||||
myWPlaneLineEdit (0),
|
||||
myPolylineSelButton (0),
|
||||
myPolylineEdit (0),
|
||||
myEditCurrentArgument (0)
|
||||
myEditCurrentArgument (0),
|
||||
myPreviewManager(0),
|
||||
myPreviewZLayer(-1)
|
||||
{
|
||||
QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_POLYLINE")));
|
||||
QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
|
||||
@ -91,6 +95,13 @@ EntityGUI_PolylineDlg::EntityGUI_PolylineDlg
|
||||
myPlnButton->setText( tr( "GEOM_SKETCHER_RESTORE" ) );
|
||||
aPlaneLayout->addWidget(myPlnButton, 0, 3);
|
||||
|
||||
bool isCS = false;
|
||||
#ifdef SET_PLANE
|
||||
isCS = true;
|
||||
#endif
|
||||
myPlnComboBox->setVisible( isCS );
|
||||
myPlnButton->setVisible( isCS );
|
||||
|
||||
#ifdef SET_PLANE
|
||||
QLabel *aPlaneLbl = new QLabel(tr("GEOM_PLANE"), aGroupBox1);
|
||||
|
||||
@ -104,6 +115,7 @@ EntityGUI_PolylineDlg::EntityGUI_PolylineDlg
|
||||
|
||||
myPolylineSelButton = new QPushButton (aGroupBox1);
|
||||
myPolylineSelButton->setIcon(image1);
|
||||
myPolylineSelButton->setCheckable(true);
|
||||
myPolylineEdit = new QLineEdit (aGroupBox1);
|
||||
myPolylineEdit->setReadOnly(true);
|
||||
|
||||
@ -139,7 +151,7 @@ EntityGUI_PolylineDlg::EntityGUI_PolylineDlg
|
||||
|
||||
setHelpFileName( "create_polyline_page.html" );
|
||||
|
||||
/* Initialisations */
|
||||
/* Initializations */
|
||||
Init();
|
||||
}
|
||||
|
||||
@ -149,7 +161,7 @@ EntityGUI_PolylineDlg::EntityGUI_PolylineDlg
|
||||
//=================================================================================
|
||||
EntityGUI_PolylineDlg::~EntityGUI_PolylineDlg()
|
||||
{
|
||||
delete myCurve;
|
||||
erasePreview();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
@ -166,6 +178,7 @@ void EntityGUI_PolylineDlg::Init()
|
||||
LightApp_SelectionMgr *aSelMgr = myGeomGUI->getApp()->selectionMgr();
|
||||
|
||||
myEditorWidget->setOCCViewer(aViewManager ? aViewManager->getOCCViewer() : 0);
|
||||
setPreviewManager( aViewManager );
|
||||
|
||||
// Init the list of local coordinate system
|
||||
gp_Pnt aPnt(0., 0., 0.);
|
||||
@ -178,35 +191,32 @@ void EntityGUI_PolylineDlg::Init()
|
||||
myWPlaneList.push_back(GEOM::GeomObjPtr());
|
||||
myLCSList.push_back(aLCS);
|
||||
|
||||
connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
|
||||
connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
|
||||
|
||||
#ifdef SET_PLANE
|
||||
connect(myPlnSelButton, SIGNAL(clicked()),
|
||||
this, SLOT(SetEditCurrentArgument()));
|
||||
connect( myPlnSelButton, SIGNAL(toggled(bool)),
|
||||
this, SLOT(SetEditCurrentArgument(bool)) );
|
||||
#endif
|
||||
connect(myPolylineSelButton, SIGNAL(clicked()),
|
||||
this, SLOT(SetEditCurrentArgument()));
|
||||
connect(aSelMgr, SIGNAL(currentSelectionChanged()),
|
||||
this, SLOT(SelectionIntoArgument()));
|
||||
connect(myEditorWidget, SIGNAL(subOperationStarted(QWidget*, bool)),
|
||||
this, SLOT(processStartedSubOperation(QWidget*, bool)));
|
||||
connect(myEditorWidget, SIGNAL(subOperationFinished(QWidget*)),
|
||||
this, SLOT(processFinishedSubOperation(QWidget*)));
|
||||
connect(myEditorWidget, SIGNAL(curveModified()),
|
||||
this, SLOT(onUpdatePreview()));
|
||||
connect( myPolylineSelButton, SIGNAL(toggled(bool)),
|
||||
this, SLOT(SetEditCurrentArgument(bool)) );
|
||||
connect( aSelMgr, SIGNAL(currentSelectionChanged()),
|
||||
this, SLOT(SelectionIntoArgument()) );
|
||||
connect( myEditorWidget, SIGNAL(subOperationStarted(QWidget*, bool)),
|
||||
this, SLOT(processStartedSubOperation(QWidget*, bool)) );
|
||||
connect( myEditorWidget, SIGNAL(subOperationFinished(QWidget*)),
|
||||
this, SLOT(processFinishedSubOperation(QWidget*)) );
|
||||
#ifdef SET_PLANE
|
||||
connect(myPlnComboBox, SIGNAL(activated(int)),
|
||||
this, SLOT(ActivateLocalCS()));
|
||||
connect(myPlnButton, SIGNAL(clicked()),
|
||||
this, SLOT(ActivateLocalCS()));
|
||||
connect( myPlnComboBox, SIGNAL(activated(int)),
|
||||
this, SLOT(ActivateLocalCS()) );
|
||||
connect( myPlnButton, SIGNAL(clicked()),
|
||||
this, SLOT(ActivateLocalCS()) );
|
||||
#endif
|
||||
connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
|
||||
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
|
||||
connect( buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()) );
|
||||
connect( buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()) );
|
||||
|
||||
myAddElementBox->hide();
|
||||
myPolylineSelButton->click();
|
||||
SelectionIntoArgument();
|
||||
|
||||
// Processing of the selected object
|
||||
myPolylineSelButton->setChecked( true );
|
||||
SelectionIntoArgument( true );
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
@ -365,6 +375,9 @@ bool EntityGUI_PolylineDlg::ClickOnApply()
|
||||
|
||||
initName();
|
||||
|
||||
// Reset actions
|
||||
myEditorWidget->reset();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -432,17 +445,19 @@ bool EntityGUI_PolylineDlg::deleteEnabled()
|
||||
// function : SelectionIntoArgument
|
||||
// purpose : Called when selection is changed
|
||||
//=================================================================================
|
||||
void EntityGUI_PolylineDlg::SelectionIntoArgument()
|
||||
void EntityGUI_PolylineDlg::SelectionIntoArgument( bool isForced )
|
||||
{
|
||||
bool isModified = false;
|
||||
bool isModified = isForced;
|
||||
GEOM::GeomObjPtr aSelectedObject = getSelected(TopAbs_SHAPE);
|
||||
TopoDS_Shape aShape;
|
||||
|
||||
if (aSelectedObject && GEOMBase::GetShape(aSelectedObject.get(), aShape) &&
|
||||
!aShape.IsNull()) {
|
||||
!aShape.IsNull())
|
||||
{
|
||||
QString aName = GEOMBase::GetName(aSelectedObject.get());
|
||||
|
||||
if (myEditCurrentArgument == myPolylineEdit) {
|
||||
if ( myEditCurrentArgument == myPolylineEdit && isCheckToSelect() )
|
||||
{
|
||||
// Import a curve
|
||||
CurveCreator_Curve *aNewCurve =
|
||||
new CurveCreator_Curve(CurveCreator::Dim2d);
|
||||
@ -458,15 +473,22 @@ void EntityGUI_PolylineDlg::SelectionIntoArgument()
|
||||
#ifdef SET_PLANE
|
||||
AddLocalCS(aSelectedObject.get(), false, aLocalCS);
|
||||
myWPlaneLineEdit->clear();
|
||||
myPlnSelButton->setDown(false);
|
||||
myPlnSelButton->setChecked(false);
|
||||
#endif
|
||||
myPolylineSelButton->setDown(true);
|
||||
myPolylineSelButton->setChecked(false);
|
||||
|
||||
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||
myGeomGUI->getApp()->selectionMgr()->clearSelected();
|
||||
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||
this, SLOT(SelectionIntoArgument()));
|
||||
} else {
|
||||
// Does nothing, just clears selection.
|
||||
delete aNewCurve;
|
||||
}
|
||||
}
|
||||
#ifdef SET_PLANE
|
||||
} else if (myEditCurrentArgument == myWPlaneLineEdit) {
|
||||
else if ( myEditCurrentArgument == myWPlaneLineEdit && isCheckToSelect() )
|
||||
{
|
||||
// Import planar face.
|
||||
if (aShape.ShapeType() == TopAbs_FACE) {
|
||||
// Check if the face is planar
|
||||
@ -479,47 +501,65 @@ void EntityGUI_PolylineDlg::SelectionIntoArgument()
|
||||
AddLocalCS(aSelectedObject.get(), true,
|
||||
WPlaneToLCS(aSelectedObject.get()));
|
||||
isModified = true;
|
||||
myPlnSelButton->setDown(true);
|
||||
myPolylineSelButton->setDown(false);
|
||||
myPlnSelButton->setChecked(false);
|
||||
myPolylineSelButton->setChecked(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isModified) {
|
||||
myEditCurrentArgument->setText(tr("GEOM_SKETCHER_WPLANE"));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isForced)
|
||||
{
|
||||
#ifdef SET_PLANE
|
||||
myPlnSelButton->setChecked(false);
|
||||
#endif
|
||||
myPolylineSelButton->setChecked(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isModified) {
|
||||
if (!isModified)
|
||||
{
|
||||
// Does nothing, just clears selection.
|
||||
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||
myGeomGUI->getApp()->selectionMgr()->clearSelected();
|
||||
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||
this, SLOT(SelectionIntoArgument()));
|
||||
}
|
||||
else
|
||||
displayPreview();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : SetEditCurrentArgument()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void EntityGUI_PolylineDlg::SetEditCurrentArgument()
|
||||
void EntityGUI_PolylineDlg::SetEditCurrentArgument( bool isChecked )
|
||||
{
|
||||
if (sender() == myPlnSelButton) {
|
||||
if (sender() == myPlnSelButton)
|
||||
{
|
||||
#ifdef SET_PLANE
|
||||
myEditCurrentArgument = myWPlaneLineEdit;
|
||||
myEditCurrentArgument->setFocus();
|
||||
myPlnSelButton->setDown(true);
|
||||
myPolylineSelButton->setDown(false);
|
||||
myPolylineSelButton->blockSignals(true);
|
||||
myPolylineSelButton->setChecked(false);
|
||||
myPolylineSelButton->blockSignals(false);
|
||||
#endif
|
||||
} else if (sender() == myPolylineSelButton) {
|
||||
}
|
||||
else if (sender() == myPolylineSelButton)
|
||||
{
|
||||
myEditCurrentArgument = myPolylineEdit;
|
||||
myEditCurrentArgument->setFocus();
|
||||
#ifdef SET_PLANE
|
||||
myPlnSelButton->setDown(false);
|
||||
myPlnSelButton->blockSignals(true);
|
||||
myPlnSelButton->setChecked(false);
|
||||
myPlnSelButton->blockSignals(false);
|
||||
#endif
|
||||
myPolylineSelButton->setDown(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -545,15 +585,6 @@ void EntityGUI_PolylineDlg::enterEvent (QEvent*)
|
||||
ActivateThisDialog();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : onUpdatePreview
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void EntityGUI_PolylineDlg::onUpdatePreview()
|
||||
{
|
||||
displayPreview(true);
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : ActivateLocalCS
|
||||
// purpose : Activate & Fit Working plane
|
||||
@ -680,3 +711,126 @@ QList<GEOM::GeomObjPtr> EntityGUI_PolylineDlg::getSourceObjects()
|
||||
{
|
||||
return myWPlaneList;
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : setPreviewManager ( OCCViewer_ViewManager )
|
||||
// purpose : Sets view manager to control the displayed objects.
|
||||
//=================================================================================
|
||||
void EntityGUI_PolylineDlg::setPreviewManager( OCCViewer_ViewManager* theManager )
|
||||
{
|
||||
myPreviewManager = theManager;
|
||||
|
||||
if ( getPreviewManager() )
|
||||
{
|
||||
if( OCCViewer_Viewer* aViewer = getPreviewManager()->getOCCViewer() )
|
||||
{
|
||||
Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
|
||||
if( !aCtx.IsNull() )
|
||||
{
|
||||
// Add Z layer to show temporary objects
|
||||
int aZLayer = -1;
|
||||
aViewer->getViewer3d()->AddZLayer( aZLayer );
|
||||
setPreviewZLayer( aZLayer );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : getPreviewManager()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
OCCViewer_ViewManager* EntityGUI_PolylineDlg::getPreviewManager()
|
||||
{
|
||||
return myPreviewManager;
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : setPreviewZLayer( theZLayer )
|
||||
// purpose : Sets Z layer to show temporary objects.
|
||||
//=================================================================================
|
||||
void EntityGUI_PolylineDlg::setPreviewZLayer( int theZLayer )
|
||||
{
|
||||
if ( theZLayer != myPreviewZLayer )
|
||||
myPreviewZLayer = theZLayer;
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : getPreviewZLayer()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
int EntityGUI_PolylineDlg::getPreviewZLayer() const
|
||||
{
|
||||
return myPreviewZLayer;
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : displayPreview()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void EntityGUI_PolylineDlg::displayPreview()
|
||||
{
|
||||
if ( getPreviewManager() )
|
||||
{
|
||||
if ( OCCViewer_Viewer* aViewer = getPreviewManager()->getOCCViewer() )
|
||||
{
|
||||
// Disable changing of OCCViewer's selection to use vertex of curve selection
|
||||
disconnect(getPreviewManager(), SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
|
||||
aViewer, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
|
||||
|
||||
Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
|
||||
if ( !aCtx.IsNull() )
|
||||
{
|
||||
CurveCreator_Displayer* aDisplayer = new CurveCreator_Displayer( aCtx, getPreviewZLayer() );
|
||||
myCurve->setDisplayer( aDisplayer );
|
||||
|
||||
Handle(AIS_InteractiveObject) anAISObj = myCurve->getAISObject( true );
|
||||
aDisplayer->display( anAISObj, true );
|
||||
|
||||
// Set color for temporary AIS_InteractiveObject
|
||||
anAISObj->Attributes()->WireAspect()->SetColor( Quantity_NOC_VIOLET );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : erasePreview()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void EntityGUI_PolylineDlg::erasePreview()
|
||||
{
|
||||
CurveCreator_Displayer* aDisplayer = myCurve ? myCurve->getDisplayer() : 0;
|
||||
if( getPreviewManager() )
|
||||
{
|
||||
if( OCCViewer_Viewer* aViewer = getPreviewManager()->getOCCViewer() )
|
||||
{
|
||||
Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
|
||||
if( !aCtx.IsNull() && aDisplayer )
|
||||
aDisplayer->eraseAll( true );
|
||||
|
||||
// Enable changing of OCCViewer's selection
|
||||
connect(getPreviewManager(), SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
|
||||
aViewer, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
|
||||
}
|
||||
}
|
||||
|
||||
setPreviewManager( NULL );
|
||||
if ( myCurve )
|
||||
{
|
||||
delete myCurve;
|
||||
myCurve = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : isCheckToSelect()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
bool EntityGUI_PolylineDlg::isCheckToSelect()
|
||||
{
|
||||
#ifdef SET_PLANE
|
||||
return myPlnSelButton->isChecked();
|
||||
#endif
|
||||
return myPolylineSelButton->isChecked();
|
||||
}
|
||||
|
@ -23,15 +23,14 @@
|
||||
#ifndef ENTITYGUI_POLYLINEDLG_H
|
||||
#define ENTITYGUI_POLYLINEDLG_H
|
||||
|
||||
|
||||
#include <GEOMBase_Skeleton.h>
|
||||
|
||||
class CurveCreator_Curve;
|
||||
class CurveCreator_Widget;
|
||||
class OCCViewer_ViewManager;
|
||||
class QGroupBox;
|
||||
class QComboBox;
|
||||
|
||||
|
||||
//=================================================================================
|
||||
// class : EntityGUI_PolylineDlg
|
||||
// purpose :
|
||||
@ -50,6 +49,9 @@ public:
|
||||
void deleteSelected();
|
||||
bool deleteEnabled();
|
||||
|
||||
void setPreviewZLayer( int theLayer );
|
||||
int getPreviewZLayer() const;
|
||||
|
||||
protected:
|
||||
|
||||
// redefined from GEOMBase_Helper
|
||||
@ -58,6 +60,20 @@ protected:
|
||||
virtual bool execute( ObjectList& );
|
||||
virtual QList<GEOM::GeomObjPtr> getSourceObjects();
|
||||
|
||||
/**
|
||||
* This method sets/gets the view manager to control the temporary
|
||||
* displayed objects on Z layer.
|
||||
* \param theManager the view manager.
|
||||
*/
|
||||
void setPreviewManager( OCCViewer_ViewManager* theManager );
|
||||
OCCViewer_ViewManager* getPreviewManager();
|
||||
|
||||
/**
|
||||
* This method defines a state of selection button.
|
||||
* \return true if selection button is checked, otherwise false.
|
||||
*/
|
||||
bool isCheckToSelect();
|
||||
|
||||
private:
|
||||
|
||||
void Init();
|
||||
@ -103,7 +119,7 @@ private:
|
||||
* This method add a local coordinate system of the selected object.
|
||||
*
|
||||
* \param theSelectedObject the selected object. It can be a planar face
|
||||
* or an inported polyline.
|
||||
* or an imported polyline.
|
||||
* \param IsPlane true for planar face; false for imported polyline.
|
||||
* \param theLCS the local coordinate system.
|
||||
*/
|
||||
@ -120,6 +136,18 @@ private:
|
||||
*/
|
||||
gp_Ax3 WPlaneToLCS(GEOM::GeomObjPtr theGeomObj);
|
||||
|
||||
/**
|
||||
* This method displays the AIS_InteractiveObject(s) to preview
|
||||
* on the Z layer and sets VIOLET color.
|
||||
*/
|
||||
void displayPreview();
|
||||
|
||||
/**
|
||||
* This method erases AIS_InteractiveObject(s) from
|
||||
* AIS_InteractiveContext and release memory.
|
||||
*/
|
||||
void erasePreview();
|
||||
|
||||
protected slots:
|
||||
|
||||
void ClickOnOk();
|
||||
@ -127,10 +155,9 @@ protected slots:
|
||||
void ClickOnCancel();
|
||||
void processStartedSubOperation( QWidget*, bool );
|
||||
void processFinishedSubOperation( QWidget* );
|
||||
void SetEditCurrentArgument();
|
||||
void SelectionIntoArgument();
|
||||
void SetEditCurrentArgument( bool );
|
||||
void SelectionIntoArgument( bool isForced = false );
|
||||
void ActivateThisDialog();
|
||||
void onUpdatePreview();
|
||||
void ActivateLocalCS();
|
||||
|
||||
private:
|
||||
@ -147,6 +174,8 @@ private:
|
||||
QLineEdit *myEditCurrentArgument; /* Current LineEdit */
|
||||
QList<gp_Ax3> myLCSList;
|
||||
QList<GEOM::GeomObjPtr> myWPlaneList;
|
||||
OCCViewer_ViewManager* myPreviewManager;
|
||||
int myPreviewZLayer;
|
||||
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user