From 19db93b534fa617ab7d6e45bd1b334c630ca8e2b Mon Sep 17 00:00:00 2001 From: mkr Date: Tue, 23 Jun 2015 11:23:59 +0300 Subject: [PATCH] refs #594: create preview for land covers. --- src/HYDROGUI/HYDROGUI_LandCoverDlg.cxx | 14 ++++++++++-- src/HYDROGUI/HYDROGUI_LandCoverDlg.h | 4 ++-- src/HYDROGUI/HYDROGUI_LandCoverOp.cxx | 31 ++++++++++++++------------ 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/HYDROGUI/HYDROGUI_LandCoverDlg.cxx b/src/HYDROGUI/HYDROGUI_LandCoverDlg.cxx index a8866617..a0c027be 100644 --- a/src/HYDROGUI/HYDROGUI_LandCoverDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_LandCoverDlg.cxx @@ -101,23 +101,33 @@ void HYDROGUI_LandCoverDlg::reset() onZoneDefChanged(); } -void HYDROGUI_LandCoverDlg::includePolylines( const HYDROGUI_ListModel::Object2VisibleList& theSelectedPolylines ) +bool HYDROGUI_LandCoverDlg::includePolylines( const HYDROGUI_ListModel::Object2VisibleList& theSelectedPolylines ) { QStringList anIncludedPolylinesNames = myPolylines->getAllNames(); + bool aSetOfPolylinesChanged = false; foreach ( const HYDROGUI_ListModel::Object2Visible& aSelectedPolyline, theSelectedPolylines ) { if ( !anIncludedPolylinesNames.contains( aSelectedPolyline.first->GetName() ) ) + { myPolylines->addObject( aSelectedPolyline ); + aSetOfPolylinesChanged = true; + } } myPolylines->setOrderingEnabled( myPolylines->getObjects().count() > 1 ); + + return aSetOfPolylinesChanged; } -void HYDROGUI_LandCoverDlg::excludePolylines( const HYDROGUI_ListModel::Object2VisibleList& theSelectedPolylines ) +bool HYDROGUI_LandCoverDlg::excludePolylines( const HYDROGUI_ListModel::Object2VisibleList& theSelectedPolylines ) { + bool aSetOfPolylinesChanged = !theSelectedPolylines.isEmpty(); + foreach ( const HYDROGUI_ListModel::Object2Visible& aSelectedPolyline, theSelectedPolylines ) myPolylines->removeObjectByName( aSelectedPolyline.first->GetName() ); myPolylines->setOrderingEnabled( myPolylines->getObjects().count() > 1 ); + + return aSetOfPolylinesChanged; } QStringList HYDROGUI_LandCoverDlg::getPolylineNames() const diff --git a/src/HYDROGUI/HYDROGUI_LandCoverDlg.h b/src/HYDROGUI/HYDROGUI_LandCoverDlg.h index 5c5aa3d8..26b97ba5 100644 --- a/src/HYDROGUI/HYDROGUI_LandCoverDlg.h +++ b/src/HYDROGUI/HYDROGUI_LandCoverDlg.h @@ -37,8 +37,8 @@ public: virtual void reset(); - void includePolylines( const HYDROGUI_ListModel::Object2VisibleList& theSelectedPolylines ); - void excludePolylines( const HYDROGUI_ListModel::Object2VisibleList& theSelectedPolylines ); + bool includePolylines( const HYDROGUI_ListModel::Object2VisibleList& theSelectedPolylines ); + bool excludePolylines( const HYDROGUI_ListModel::Object2VisibleList& theSelectedPolylines ); QStringList getPolylineNames() const; QStringList getSelectedPolylineNames() const; diff --git a/src/HYDROGUI/HYDROGUI_LandCoverOp.cxx b/src/HYDROGUI/HYDROGUI_LandCoverOp.cxx index 00b32548..9cf2567e 100644 --- a/src/HYDROGUI/HYDROGUI_LandCoverOp.cxx +++ b/src/HYDROGUI/HYDROGUI_LandCoverOp.cxx @@ -247,7 +247,7 @@ void HYDROGUI_LandCoverOp::onCreatePreview( const QStringList& thePolylineNames QApplication::setOverrideCursor( Qt::WaitCursor ); - QList aZonePolylines; + HYDROData_SequenceOfObjects aZonePolylines; QStringList::const_iterator anIt = thePolylineNames.begin(), aLast = thePolylineNames.end(); for( ; anIt!=aLast; anIt++ ) { @@ -255,14 +255,11 @@ void HYDROGUI_LandCoverOp::onCreatePreview( const QStringList& thePolylineNames Handle(HYDROData_PolylineXY) aPolyline = Handle(HYDROData_PolylineXY)::DownCast( HYDROGUI_Tool::FindObjectByName( module(), aPolylineName, KIND_POLYLINEXY ) ); if ( !aPolyline.IsNull() ) - aZonePolylines.append( aPolyline ); + aZonePolylines.Append( aPolyline ); } - - // TODO: Generate TopoDS_Shape based on the set of polylines, implement generateTopShape data model method - TopoDS_Shape aZoneShape;/* = HYDROData_LandCover::generateTopShape( aZonePolylines ); - if( aZoneShape.IsNull() ) - printErrorMessage( tr( "ZONE_OBJECT_CANNOT_BE_CREATED" ) ); - */ + + TCollection_AsciiString anError; + TopoDS_Shape aZoneShape = HYDROData_LandCover::buildShape( aZonePolylines, anError ); LightApp_Application* anApp = module()->getApp(); if ( !getPreviewManager() ) @@ -291,10 +288,8 @@ void HYDROGUI_LandCoverOp::onCreatePreview( const QStringList& thePolylineNames myPreviewPrs->setFillingColor( aFillingColor, false, false ); myPreviewPrs->setBorderColor( aBorderColor, false, false ); - TopoDS_Face aFace; if( !aZoneShape.IsNull() ) - aFace = TopoDS::Face( aZoneShape ); - myPreviewPrs->setFace( aFace, true, true, "" ); + myPreviewPrs->setShape( aZoneShape ); } QApplication::restoreOverrideCursor(); @@ -321,8 +316,11 @@ void HYDROGUI_LandCoverOp::onAddPolylines() aSelectedPolylines.append( HYDROGUI_ListModel::Object2Visible( aPolyXY, true ) ); } - aPanel->includePolylines( aSelectedPolylines ); - // TODO: create preview of included polylines + if ( aPanel->includePolylines( aSelectedPolylines ) ) + { + closePreview(); + onCreatePreview( aPanel->getPolylineNames() ); + } } void HYDROGUI_LandCoverOp::onRemovePolylines() @@ -348,7 +346,12 @@ void HYDROGUI_LandCoverOp::onRemovePolylines() } module()->update( UF_OCCViewer ); - aPanel->excludePolylines( aSelectedPolylines ); + + if ( aPanel->excludePolylines( aSelectedPolylines ) ) + { + closePreview(); + onCreatePreview( aPanel->getPolylineNames() ); + } } void HYDROGUI_LandCoverOp::closePreview() -- 2.39.2