#include <SalomeApp_Application.h>
#include <LightApp_SelectionMgr.h>
+#include <TopoDS_Shape.hxx>
+#include <TopoDS_Edge.hxx>
+#include <TopoDS.hxx>
+#include <TopExp.hxx>
+#include <TColStd_IndexedMapOfInteger.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+
#include <GEOMImpl_Types.hxx>
//=================================================================================
mainFrame()->RadioButton3->setIcon( image2 );
mainFrame()->RadioButton1->setChecked( true );
- GroupPoints = new DlgRef_3Sel3Spin1Check( centralWidget() );
+ GroupPoints = new DlgRef_3Sel3Spin2Check( centralWidget() );
GroupPoints->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) );
GroupPoints->TextLabel1->setText( tr( "GEOM_OBJECTS" ) );
GroupPoints->TextLabel3->setText( tr( "GEOM_POINT_I" ).arg( 2 ) );
GroupPoints->PushButton1->setIcon( image3 );
GroupPoints->PushButton2->setIcon( image3 );
GroupPoints->PushButton3->setIcon( image3 );
- GroupPoints->CheckBox1->setText( tr( "GEOM_CREATE_COPY" ) );
+ GroupPoints->CheckBox1->setText( tr( "Activate Distance" ) );
+ GroupPoints->CheckBox2->setText( tr( "GEOM_CREATE_COPY" ) );
QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
layout->setMargin( 0 ); layout->setSpacing( 6 );
layout->addWidget( GroupPoints );
/***************************************************************/
- setHelpFileName( "translation.htm" );
+ setHelpFileName( "translation_operation_page.html" );
Init();
}
myVector = myPoint1 = myPoint2 = GEOM::GEOM_Object::_nil();
// Activate Create a Copy mode
- GroupPoints->CheckBox1->setChecked( true );
+ GroupPoints->CheckBox2->setChecked( true );
CreateCopyModeChanged( true );
+ mainFrame()->GroupBoxPublish->show();
+
/* Get setting of step value from file configuration */
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
double step = resMgr->doubleValue( "Geometry", "SettingsGeomStep", 100 );
/* min, max, step and decimals for spin boxes & initial values */
- initSpinBox( GroupPoints->SpinBox1, COORD_MIN, COORD_MAX, step, 3 );
- initSpinBox( GroupPoints->SpinBox2, COORD_MIN, COORD_MAX, step, 3 );
- initSpinBox( GroupPoints->SpinBox3, COORD_MIN, COORD_MAX, step, 3 );
+ initSpinBox( GroupPoints->SpinBox1, COORD_MIN, COORD_MAX, step, 3 ); // VSR: TODO: DBL_DIGITS_DISPLAY
+ initSpinBox( GroupPoints->SpinBox2, COORD_MIN, COORD_MAX, step, 3 ); // VSR: TODO: DBL_DIGITS_DISPLAY
+ initSpinBox( GroupPoints->SpinBox3, COORD_MIN, COORD_MAX, step, 3 ); // VSR: TODO: DBL_DIGITS_DISPLAY
GroupPoints->SpinBox1->setValue( 0.0 );
GroupPoints->SpinBox2->setValue( 0.0 );
connect( GroupPoints->SpinBox2, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox() ) );
connect( GroupPoints->SpinBox3, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox() ) );
- // VSR: TODO ->>
- connect( myGeomGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), GroupPoints->SpinBox1, SLOT( SetStep( double ) ) );
- connect( myGeomGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), GroupPoints->SpinBox2, SLOT( SetStep( double ) ) );
- connect( myGeomGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), GroupPoints->SpinBox3, SLOT( SetStep( double ) ) );
- // <<-
+ connect( myGeomGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), this, SLOT( SetDoubleSpinBoxStep( double ) ) );
- connect( GroupPoints->CheckBox1, SIGNAL( toggled( bool ) ), this, SLOT( CreateCopyModeChanged( bool ) ) );
+ connect( GroupPoints->CheckBox1, SIGNAL( toggled( bool ) ), this, SLOT( ActivateDistanceChanged( bool ) ) );
+ connect( GroupPoints->CheckBox2, SIGNAL( toggled( bool ) ), this, SLOT( CreateCopyModeChanged( bool ) ) );
connect( myGeomGUI->getApp()->selectionMgr(),
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
}
+//=================================================================================
+// function : SetDoubleSpinBoxStep()
+// purpose : Double spin box management
+//=================================================================================
+void TransformationGUI_TranslationDlg::SetDoubleSpinBoxStep( double step )
+{
+ GroupPoints->SpinBox1->setSingleStep(step);
+ GroupPoints->SpinBox2->setSingleStep(step);
+ GroupPoints->SpinBox3->setSingleStep(step);
+}
+
//=================================================================================
// function : ConstructorsClicked()
// purpose : Radio button management
//=================================================================================
void TransformationGUI_TranslationDlg::ConstructorsClicked( int constructorId )
{
+ erasePreview();
disconnect( myGeomGUI->getApp()->selectionMgr(), 0, this, 0 );
myEditCurrentArgument = GroupPoints->LineEdit1;
{
GroupPoints->ShowRows( 1, 2, false );
GroupPoints->ShowRows( 3, 5, true );
+ GroupPoints->TextLabel6->setText( tr( "GEOM_DZ" ) );
+ GroupPoints->CheckBox1->hide();
+ GroupPoints->SpinBox3->setEnabled( true );
break;
}
case 1: /* translation an object by 2 points */
{
GroupPoints->ShowRows( 3, 5, false );
GroupPoints->ShowRows( 0, 2, true );
+ GroupPoints->CheckBox1->hide();
+ GroupPoints->TextLabel6->setText( tr( "GEOM_DZ" ) );
GroupPoints->TextLabel2->setText( tr( "GEOM_POINT_I" ).arg( 1 ) );
GroupPoints->LineEdit2->clear();
GroupPoints->LineEdit3->clear();
+ GroupPoints->SpinBox3->setEnabled( true );
myPoint1 = myPoint2 = GEOM::GEOM_Object::_nil();
break;
}
case 2: /* translation an object by vector */
{
- GroupPoints->ShowRows( 2, 5, false );
GroupPoints->ShowRows( 0, 1, true );
+ GroupPoints->ShowRows( 2, 4, false );
+ GroupPoints->ShowRows( 5, 5, true );
+ GroupPoints->CheckBox1->show();
+ GroupPoints->TextLabel6->setText( tr( "GEOM_DISTANCE" ) );
+ GroupPoints->SpinBox3->setValue( 0.0 );
+ GroupPoints->SpinBox3->setEnabled( false );
GroupPoints->TextLabel2->setText( tr( "GEOM_VECTOR" ) );
GroupPoints->LineEdit2->clear();
myVector = GEOM::GEOM_Object::_nil();
+ ActivateDistanceChanged( GroupPoints->CheckBox1->isChecked() );
break;
}
}
//=================================================================================
bool TransformationGUI_TranslationDlg::ClickOnApply()
{
- if ( !onAccept(GroupPoints->CheckBox1->isChecked()) )
+ if ( !onAccept(GroupPoints->CheckBox2->isChecked()) )
return false;
initName();
- ConstructorsClicked( getConstructorId() );
+
return true;
}
if ( !testResult || CORBA::is_nil( aSelectedObject ) )
return;
+ TopoDS_Shape aShape;
+ aName = GEOMBase::GetName( aSelectedObject );
+ if ( GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ) && !aShape.IsNull() )
+ {
+ TopAbs_ShapeEnum aNeedType = TopAbs_VERTEX;
+ if ( myEditCurrentArgument == GroupPoints->LineEdit2 && getConstructorId() == 2 )
+ aNeedType = TopAbs_EDGE;
+
+ LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
+ TColStd_IndexedMapOfInteger aMap;
+ aSelMgr->GetIndexes( firstIObject(), aMap );
+ if ( aMap.Extent() == 1 )
+ {
+ int anIndex = aMap( 1 );
+ if ( aNeedType == TopAbs_EDGE )
+ aName += QString( ":edge_%1" ).arg( anIndex );
+ else
+ aName += QString( ":vertex_%1" ).arg( anIndex );
+
+ //Find SubShape Object in Father
+ GEOM::GEOM_Object_var aFindedObject = findObjectInFather( aSelectedObject, aName );
+
+ if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+ GEOM::GEOM_IShapesOperations_var aShapesOp =
+ getGeomEngine()->GetIShapesOperations( getStudyId() );
+ aSelectedObject = aShapesOp->GetSubShape( aSelectedObject, anIndex );
+ }
+ else
+ aSelectedObject = aFindedObject;
+ }
+ else // Global Selection
+ {
+ if ( aShape.ShapeType() != aNeedType ) {
+ aSelectedObject = GEOM::GEOM_Object::_nil();
+ aName = "";
+ }
+ }
+ }
+
if ( myEditCurrentArgument == GroupPoints->LineEdit2 && getConstructorId() == 1 )
myPoint1 = aSelectedObject;
else if ( myEditCurrentArgument == GroupPoints->LineEdit2 && getConstructorId() == 2 )
myVector = aSelectedObject;
else if ( myEditCurrentArgument == GroupPoints->LineEdit3 )
- myPoint2 = aSelectedObject;
-
- aName = GEOMBase::GetName( aSelectedObject );
+ myPoint2 = aSelectedObject;
}
myEditCurrentArgument->setText( aName );
void TransformationGUI_TranslationDlg::SetEditCurrentArgument()
{
QPushButton* send = (QPushButton*)sender();
+ globalSelection();
if ( send == GroupPoints->PushButton1 ) {
myEditCurrentArgument = GroupPoints->LineEdit1;
- globalSelection();
}
else if ( send == GroupPoints->PushButton2 ) {
myEditCurrentArgument = GroupPoints->LineEdit2;
- getConstructorId() == 1 ? globalSelection( GEOM_POINT ) :
- globalSelection( GEOM_LINE );
+ if ( getConstructorId() == 1 )
+ localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
+ else
+ localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
}
else if ( send == GroupPoints->PushButton3 ) {
myEditCurrentArgument = GroupPoints->LineEdit3;
- globalSelection( GEOM_POINT );
+ localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
}
myEditCurrentArgument->setFocus();
void TransformationGUI_TranslationDlg::ActivateThisDialog()
{
GEOMBase_Skeleton::ActivateThisDialog();
+
connect( myGeomGUI->getApp()->selectionMgr(),
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
//=================================================================================
GEOM::GEOM_IOperations_ptr TransformationGUI_TranslationDlg::createOperation()
{
- return myGeomGUI->GetGeomGen()->GetITransformOperations( getStudyId() );
+ return getGeomEngine()->GetITransformOperations( getStudyId() );
}
switch ( aConstructorId ) {
case 0:
- return !( myObjects.length() == 0 );
- break;
+ {
+ Handle(SALOME_InteractiveObject) IO = firstIObject();
+ Standard_Boolean testResult;
+ GEOM::GEOM_Object_var anObject = GEOMBase::ConvertIOinGEOMObject( IO, testResult );
+ if ( !testResult || anObject->_is_nil() )
+ return false;
+
+ return !( myObjects.length() == 0 );
+ }
case 1:
return !( myObjects.length() == 0 || myPoint1->_is_nil() || myPoint2->_is_nil() );
- break;
case 2:
return !( myObjects.length() == 0 || myVector->_is_nil() );
- break;
default:
- return false;
+ break;
}
+ return false;
}
//=================================================================================
bool TransformationGUI_TranslationDlg::execute( ObjectList& objects )
{
bool res = false;
- bool toCreateCopy = IsPreview() || GroupPoints->CheckBox1->isChecked();
+ bool toCreateCopy = IsPreview() || GroupPoints->CheckBox2->isChecked();
GEOM::GEOM_Object_var anObj;
if ( toCreateCopy ) {
for ( int i = 0; i < myObjects.length(); i++ ) {
+ myCurrObject = myObjects[i];
anObj = GEOM::GEOM_ITransformOperations::_narrow( getOperation() )->TranslateDXDYDZCopy( myObjects[i], dx, dy, dz );
if ( !anObj->_is_nil() )
objects.push_back( anObj._retn() );
}
else {
for ( int i = 0; i < myObjects.length(); i++ ) {
+ myCurrObject = myObjects[i];
anObj = GEOM::GEOM_ITransformOperations::_narrow( getOperation() )->TranslateDXDYDZ( myObjects[i], dx, dy, dz );
if ( !anObj->_is_nil() )
objects.push_back( anObj._retn() );
{
if ( toCreateCopy ) {
for ( int i = 0; i < myObjects.length(); i++ ) {
+ myCurrObject = myObjects[i];
anObj = GEOM::GEOM_ITransformOperations::_narrow( getOperation() )->TranslateTwoPointsCopy( myObjects[i], myPoint1, myPoint2 );
if ( !anObj->_is_nil() )
objects.push_back( anObj._retn() );
}
else {
for ( int i = 0; i < myObjects.length(); i++ ) {
+ myCurrObject = myObjects[i];
anObj = GEOM::GEOM_ITransformOperations::_narrow( getOperation() )->TranslateTwoPoints( myObjects[i], myPoint1, myPoint2 );
if ( !anObj->_is_nil() )
objects.push_back( anObj._retn() );
}
case 2:
{
- if ( toCreateCopy ) {
+ bool byDistance = GroupPoints->CheckBox1->isChecked();
+ if ( byDistance ) {
+ double aDistance = GroupPoints->SpinBox3->value();
for ( int i = 0; i < myObjects.length(); i++ ) {
- anObj = GEOM::GEOM_ITransformOperations::_narrow( getOperation() )->TranslateVectorCopy( myObjects[i], myVector );
+ myCurrObject = myObjects[i];
+ anObj = GEOM::GEOM_ITransformOperations::_narrow( getOperation() )->
+ TranslateVectorDistance( myObjects[i], myVector, aDistance, toCreateCopy );
if ( !anObj->_is_nil() )
objects.push_back( anObj._retn() );
}
}
else {
- for ( int i = 0; i < myObjects.length(); i++ ) {
- anObj = GEOM::GEOM_ITransformOperations::_narrow( getOperation() )->TranslateVector( myObjects[i], myVector );
- if ( !anObj->_is_nil() )
- objects.push_back( anObj._retn() );
+ if ( toCreateCopy ) {
+ for ( int i = 0; i < myObjects.length(); i++ ) {
+ myCurrObject = myObjects[i];
+ anObj = GEOM::GEOM_ITransformOperations::_narrow( getOperation() )->
+ TranslateVectorCopy( myObjects[i], myVector );
+ if ( !anObj->_is_nil() )
+ objects.push_back( anObj._retn() );
+
+ }
+ }
+ else {
+ for (int i = 0; i < myObjects.length(); i++) {
+ myCurrObject = myObjects[i];
+ anObj = GEOM::GEOM_ITransformOperations::_narrow( getOperation() )->
+ TranslateVector( myObjects[i], myVector );
+ if ( !anObj->_is_nil() )
+ objects.push_back( anObj._retn() );
+ }
}
}
res = true;
break;
}
}
-
return res;
}
-
//=================================================================================
-// function : closeEvent
+// function : restoreSubShapes
// purpose :
//=================================================================================
-void TransformationGUI_TranslationDlg::closeEvent( QCloseEvent* e )
+void TransformationGUI_TranslationDlg::restoreSubShapes( SALOMEDS::Study_ptr theStudy,
+ SALOMEDS::SObject_ptr theSObject )
{
- // myGeomGUI->SetState( -1 );
- GEOMBase_Skeleton::closeEvent( e );
+ if ( mainFrame()->CheckBoxRestoreSS->isChecked() ) {
+ // we pass here the first operation argument (object) through the list of arguments
+ // because the rotation operation place its arguments in the data structure in another order,
+ // and we need to point the first argument directly
+ GEOM::ListOfGO_var anArgs = new GEOM::ListOfGO;
+ anArgs->length( 1);
+ anArgs[0] = myCurrObject;
+ getGeomEngine()->RestoreSubShapesSO( theStudy, theSObject, anArgs,
+ /*theFindMethod=*/GEOM::FSM_Transformed,
+ /*theInheritFirstArg=*/true );
+ }
}
-
//=================================================================================
// function : CreateCopyModeChanged()
// purpose :
{
mainFrame()->GroupBoxName->setEnabled( isCreateCopy );
}
+
+//=================================================================================
+// function : ActivateDistanceChanged()
+// purpose :
+//=================================================================================
+void TransformationGUI_TranslationDlg::ActivateDistanceChanged( bool theEnable )
+{
+ GroupPoints->SpinBox3->setEnabled( theEnable );
+ displayPreview();
+}
+
+//=================================================================================
+// function : addSubshapeToStudy
+// purpose : virtual method to add new SubObjects if local selection
+//=================================================================================
+void TransformationGUI_TranslationDlg::addSubshapesToStudy()
+{
+ bool toCreateCopy = IsPreview() || GroupPoints->CheckBox2->isChecked();
+ if ( toCreateCopy ) {
+ QMap<QString, GEOM::GEOM_Object_var> objMap;
+
+ switch ( getConstructorId() ) {
+ case 0:
+ return;
+ case 1:
+ objMap[GroupPoints->LineEdit2->text()] = myPoint1;
+ objMap[GroupPoints->LineEdit3->text()] = myPoint2;
+ break;
+ case 2:
+ objMap[GroupPoints->LineEdit2->text()] = myVector;
+ break;
+ }
+ addSubshapesToFather( objMap );
+ }
+}