bool HYDROGUI_PolylineOp::processApply( int& theUpdateFlags,
QString& theErrorMsg )
{
- HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel();
+ HYDROGUI_PolylineDlg* aPanel = ::qobject_cast<HYDROGUI_PolylineDlg*>( inputPanel() );
+ if ( !aPanel )
+ return false;
- int aStudyId = module()->getStudyId();
- bool aHasDoc = HYDROData_Document::HasDocument(aStudyId);
- Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( aStudyId );
- if( aDocument.IsNull() )
+ QString aPolylineName = aPanel->getPolylineName().simplified();
+ if ( aPolylineName.isEmpty() )
+ {
+ theErrorMsg = tr( "INCORRECT_OBJECT_NAME" );
return false;
+ }
+
+ if( !myIsEdit || ( !myEditedObject.IsNull() && myEditedObject->GetName() != aPolylineName ) )
+ {
+ // check that there are no other objects with the same name in the document
+ Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), aPolylineName );
+ if( !anObject.IsNull() )
+ {
+ theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( aPolylineName );
+ return false;
+ }
+ }
+
+ if ( myCurve->getNbSections() <= 0 )
+ {
+ theErrorMsg = tr( "EMPTY_POLYLINE_DATA" );
+ return false;
+ }
Handle(HYDROData_PolylineXY) aPolylineObj;
if( myIsEdit )
aPolylineObj = myEditedObject;
aPolylineObj->RemoveSections();
}
- else{
- aPolylineObj = Handle(HYDROData_PolylineXY)::DownCast( aDocument->CreateObject( KIND_POLYLINEXY ) );
-
- //double aZValue = double( ++ZValueIncrement ) * 1e-2; // empiric value, to be revised
- //aPolylineObj->SetZValue( aZValue );
+ else
+ {
+ aPolylineObj = Handle(HYDROData_PolylineXY)::DownCast( doc()->CreateObject( KIND_POLYLINEXY ) );
}
if( aPolylineObj.IsNull() )
return false;
- QString aPolylineName = aPanel->getPolylineName();
- aPolylineObj->SetName(aPolylineName);
+ aPolylineObj->SetName( aPolylineName );
for ( int i = 0 ; i < myCurve->getNbSections() ; i++ )
{
// Add the points fro section
CurveCreator::Coordinates aCurveCoords = myCurve->getPoints( i );
+
+ if ( aCurveCoords.size() <= 2 )
+ {
+ theErrorMsg = tr( "NUMBER_OF_SECTION_POINTS_INCORRECT" );
+ return false;
+ }
+
for ( int k = 0 ; k + 1 < aCurveCoords.size() ; k++ )
{
HYDROData_PolylineXY::Point aSectPoint;
}
}
+ if ( !myIsEdit )
+ {
+ aPolylineObj->SetWireColor( HYDROData_PolylineXY::DefaultWireColor() );
+ }
+
// Update the wire of polyline
aPolylineObj->Update();
CurveCreator_Displayer* aDisplayer = myCurve->getDisplayer();
if( !aDisplayer )
return;
- QList<int> aSelSections = aPanel->getSelectedSections();
- for( int i = 0 ; i < myCurve->getNbSections() ; i++ ){
- bool aIsHl = false;
- if( aSelSections.contains(i) ){
- aDisplayer->highlight( myCurve->constructSection(i), aIsHl );
- }
- }
+ //QList<int> aSelSections = aPanel->getSelectedSections();
+ bool aIsHl = false;
+ //if( aSelSections.contains(i) ){
+ // TODO
+ //aDisplayer->highlight( myCurve->getAISObject(), aIsHl );
+ //}
}
void HYDROGUI_PolylineOp::displayPreview()
{
CurveCreator_Displayer* aDisplayer = new CurveCreator_Displayer( aCtx );
myCurve->setDisplayer( aDisplayer );
- aDisplayer->display( myCurve->constructWire() );
+ aDisplayer->display( myCurve->getAISObject( true ), true );
}
}
}
Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
if( !aCtx.IsNull() )
{
- aDisplayer->erase();
+ aDisplayer->eraseAll( true );
}
}
}
+
+ myViewManager = NULL;
+ if ( myCurve )
+ {
+ delete myCurve;
+ myCurve = NULL;
+ }
}