#include "HYDROGUI_ImportGeomObjectOp.h"
-#include "HYDROGUI_ObstacleDlg.h"
+#include "HYDROGUI_GeomObjectDlg.h"
#include "HYDROGUI_DataModel.h"
#include "HYDROGUI_Module.h"
#include "HYDROGUI_UpdateFlags.h"
#include <HYDROData_Obstacle.h>
+#include <HYDROData_PolylineXY.h>
#include <HYDROData_Iterator.h>
#include <GEOMBase.h>
myOpType ( theOpType ),
myIsToShowPanel ( theIsToShowPanel )
{
- setName( tr( "IMPORT_GEOM_OBJECT" ) );
+ if ( myOpType == ImportSelectedAsPolyline ) {
+ setName( tr( "IMPORT_GEOM_OBJECT_AS_POLYLINE" ) );
+ } else {
+ setName( tr( "IMPORT_GEOM_OBJECT_AS_OBSTACLE" ) );
+ }
}
HYDROGUI_ImportGeomObjectOp::~HYDROGUI_ImportGeomObjectOp()
// Get GEOM objects to import
myGeomObjects.clear();
- if ( myOpType == ImportCreated ) {
+ if ( myOpType == ImportCreatedAsObstacle ) {
myGeomObjects = module()->GetGeomObjectsToImport();
- } else if ( myOpType == ImportSelected ) {
- myGeomObjects = HYDROGUI_Tool::GetSelectedGeomObjects( module() );
+ } else if ( myOpType == ImportSelectedAsObstacle ) {
+ myGeomObjects =
+ HYDROGUI_Tool::GetSelectedGeomObjects( module(), getObstacleTypes() );
+ } else if ( myOpType == ImportSelectedAsPolyline ) {
+ myGeomObjects =
+ HYDROGUI_Tool::GetSelectedGeomObjects( module(), getPolylineTypes() );
}
- HYDROGUI_ObstacleDlg* aPanel = 0;
+ HYDROGUI_GeomObjectDlg* aPanel = 0;
if ( myGeomObjects.count() == 1 ) {
// Get panel
- aPanel = ::qobject_cast<HYDROGUI_ObstacleDlg*>( inputPanel() );
+ aPanel = ::qobject_cast<HYDROGUI_GeomObjectDlg*>( inputPanel() );
if ( aPanel ) {
// Reset the panel state
}
}
- // Pass the existing obstacle names to the panel
- QStringList anObstacles =
- HYDROGUI_Tool::FindExistingObjectsNames( doc(), KIND_OBSTACLE );
+ // Pass the existing object names to the panel
+ QStringList anExistingNames;
+ if ( myOpType == ImportCreatedAsObstacle ||
+ myOpType == ImportSelectedAsObstacle ) {
+ anExistingNames = HYDROGUI_Tool::FindExistingObjectsNames( doc(), KIND_OBSTACLE );
+ } else if ( myOpType == ImportSelectedAsPolyline ) {
+ anExistingNames = HYDROGUI_Tool::FindExistingObjectsNames( doc(), KIND_POLYLINEXY );
+ }
- aPanel->setObstacleNames( anObstacles );
+ aPanel->setObjectNames( anExistingNames );
}
}
return false;
}
- QString anObstacleName;
- Handle(HYDROData_Obstacle) anObstacleToEdit;
+ QString anObjectName;
+ Handle(HYDROData_Entity) anObjectToEdit;
+ ObjectKind anObjectKind =
+ myOpType == ImportSelectedAsPolyline ? KIND_POLYLINEXY : KIND_OBSTACLE;
if ( myGeomObjects.count() == 1 ) {
// Get panel
- HYDROGUI_ObstacleDlg* aPanel = ::qobject_cast<HYDROGUI_ObstacleDlg*>( inputPanel() );
+ HYDROGUI_GeomObjectDlg* aPanel = ::qobject_cast<HYDROGUI_GeomObjectDlg*>( inputPanel() );
if ( aPanel ) {
- // Check obstacle name
- anObstacleName = aPanel->getObstacleName().simplified();
- if ( anObstacleName.isEmpty() ) {
+ // Check object name
+ anObjectName = aPanel->getObjectName().simplified();
+ if ( anObjectName.isEmpty() ) {
theErrorMsg = tr( "INCORRECT_OBJECT_NAME" );
return false;
}
- // Get obstacle to edit
- QString anEditedName = aPanel->getEditedObstacleName().simplified();
+ // Get object to edit
+ QString anEditedName = aPanel->getEditedObjectName().simplified();
if ( !anEditedName.isEmpty() ) {
- anObstacleToEdit = Handle(HYDROData_Obstacle)::DownCast(
- HYDROGUI_Tool::FindObjectByName( module(), anEditedName, KIND_OBSTACLE ) );
+ anObjectToEdit = HYDROGUI_Tool::FindObjectByName( module(), anEditedName, anObjectKind );
}
}
- if( anObstacleToEdit.IsNull() || anObstacleToEdit->GetName() != anObstacleName ) {
+ if( anObjectToEdit.IsNull() || anObjectToEdit->GetName() != anObjectName ) {
// check that there are no other objects with the same name in the document
- Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), anObstacleName );
+ Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), anObjectName/*, anObjectKind*/ );
if( !anObject.IsNull() ) {
- theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( anObstacleName );
+ theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( anObjectName );
return false;
}
}
bool anIsOk = false;
- // Get the created object as SObject
+ // Get the GEOM object as SObject
foreach ( const QString& anEntry, myGeomObjects ) {
_PTR(SObject) aSObject( aStudy->studyDS()->FindObjectID( qPrintable(anEntry)) );
- if (aSObject) {
+ if ( aSObject ) {
// Get the corresponding TopoDS_Shape
TopoDS_Shape aShape = GEOMBase::GetShapeFromIOR( aSObject->GetIOR().c_str() );
- if ( !aShape.IsNull() ) {
- // Create/edit an obstacle object
- Handle(HYDROData_Obstacle) anObstacle;
+ if ( aShape.IsNull() ) {
+ continue;
+ }
+
+ // Create/edit an object
+ Handle(HYDROData_Entity) anObject;
- if ( anObstacleToEdit.IsNull() ) {
- anObstacle =
+ if ( anObjectToEdit.IsNull() ) {
+ if ( myOpType == ImportCreatedAsObstacle || myOpType == ImportSelectedAsObstacle ) {
+ anObject =
Handle(HYDROData_Obstacle)::DownCast( doc()->CreateObject(KIND_OBSTACLE) );
-
+ Handle(HYDROData_Obstacle) anObstacle = Handle(HYDROData_Obstacle)::DownCast( anObject );
anObstacle->SetFillingColor( HYDROData_Obstacle::DefaultFillingColor() );
anObstacle->SetBorderColor( HYDROData_Obstacle::DefaultBorderColor() );
- } else {
- anObstacle = anObstacleToEdit;
+ } else if ( myOpType == ImportSelectedAsPolyline ) {
+ anObject =
+ Handle(HYDROData_PolylineXY)::DownCast( doc()->CreateObject(KIND_POLYLINEXY) );
}
+ } else {
+ anObject = anObjectToEdit;
+ }
- // Set name
- if ( anObstacleName.isEmpty() ) {
- QString aName = QString::fromStdString( aSObject->GetName() );
- anObstacleName = HYDROGUI_Tool::GenerateObjectName(
- module(), aName, QStringList(), true );
- }
- if ( anObstacle->GetName() != anObstacleName ) {
- anObstacle->SetName( anObstacleName );
- }
+ // Set name
+ if ( anObjectName.isEmpty() ) {
+ QString aName = QString::fromStdString( aSObject->GetName() );
+ anObjectName = HYDROGUI_Tool::GenerateObjectName(
+ module(), aName, QStringList(), true );
+ }
+ if ( anObject->GetName() != anObjectName ) {
+ anObject->SetName( anObjectName );
+ }
- anObstacleName.clear();
+ anObjectName.clear();
- // Set shape
+ // Set shape
+ if ( myOpType == ImportCreatedAsObstacle || myOpType == ImportSelectedAsObstacle ) {
+ Handle(HYDROData_Obstacle) anObstacle = Handle(HYDROData_Obstacle)::DownCast( anObject );
anObstacle->SetShape3D( aShape );
-
- // Set operation status
anIsOk = true;
+ } else if ( myOpType == ImportSelectedAsPolyline ) {
+ Handle(HYDROData_PolylineXY) aPolyline = Handle(HYDROData_PolylineXY)::DownCast( anObject );
+ // TODO ISSUE #228: set the shape ("aShape") to the polyline
+ // anIsOk = aPolyline->setShape( aShape );
+ }
+
+ // Check operation status
+ if ( anIsOk ) {
+ anObject->Update();
theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced;
}
}
{
HYDROGUI_InputPanel* aPanel = 0;
if ( myIsToShowPanel ) {
- aPanel = new HYDROGUI_ObstacleDlg( module(), getName() );
+ QString anObjectTypeName =
+ myOpType == ImportSelectedAsPolyline ? tr("DEFAULT_POLYLINE_NAME") :
+ tr("DEFAULT_OBSTACLE_NAME");
+ aPanel = new HYDROGUI_GeomObjectDlg( module(), getName(), anObjectTypeName );
}
return aPanel;
+}
+
+QList<GEOM::shape_type> HYDROGUI_ImportGeomObjectOp::getObstacleTypes()
+{
+ QList<GEOM::shape_type> aTypes;
+
+ aTypes << GEOM::COMPOUND << GEOM::COMPOUND << GEOM::SOLID <<
+ GEOM::SHELL << GEOM::FACE << GEOM::SHAPE;
+
+ return aTypes;
+}
+
+QList<GEOM::shape_type> HYDROGUI_ImportGeomObjectOp::getPolylineTypes()
+{
+ QList<GEOM::shape_type> aTypes;
+
+ aTypes << GEOM::WIRE << GEOM::EDGE;
+
+ return aTypes;
}
\ No newline at end of file