#include <SUIT_MessageBox.h>
#include <SUIT_Desktop.h>
#include <QColor>
+#include <QApplication>
+
#include <OCCViewer_ViewManager.h>
#include <OCCViewer_ViewModel.h>
#include <TopoDS_Face.hxx>
#include <TopoDS.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
+#include <QSet>
void insertProfileInToOrder( const QString& theProfileName,
const double& theProfilePar,
// Hydraulic axis
Handle(HYDROData_PolylineXY) aHydraulicAxis = myEditedObject->GetHydraulicAxis();
+
+ TopoDS_Face aPlane;
+ HYDROData_Stream::BuildRefFace( aPlane ) ;
if ( !aHydraulicAxis.IsNull() )
- {
myHydAxis = aHydraulicAxis->GetName();
- TopoDS_Face aPlane;
- HYDROData_Stream::BuildRefFace( aPlane ) ;
-
- // Stream profiles
- HYDROData_SequenceOfObjects aStreamProfiles = myEditedObject->GetProfiles();
- for ( int i = 1, n = aStreamProfiles.Length(); i <= n; ++i )
- {
- Handle(HYDROData_Profile) aProfile =
- Handle(HYDROData_Profile)::DownCast( aStreamProfiles.Value( i ) );
- if ( aProfile.IsNull() )
- continue;
+ // Stream profiles
+ HYDROData_SequenceOfObjects aStreamProfiles = myEditedObject->GetProfiles();
+ for ( int i = 1, n = aStreamProfiles.Length(); i <= n; ++i )
+ {
+ Handle(HYDROData_Profile) aProfile =
+ Handle(HYDROData_Profile)::DownCast( aStreamProfiles.Value( i ) );
+ if ( aProfile.IsNull() )
+ continue;
- QString aProfileName = aProfile->GetName();
+ QString aProfileName = aProfile->GetName();
+ myProfiles << aProfileName;
+ if (!aHydraulicAxis.IsNull())
+ {
Standard_Real aProfilePar = 0.0;
HYDROData_Stream::HasIntersection( aHydraulicAxis, aProfile, aPlane, aProfilePar );
-
- myProfiles << aProfileName;
myProfileParams << aProfilePar;
-
}
- }
+
+ }
+
}
}
return aPanel;
}
+void HYDROGUI_StreamOp::apply()
+{
+ QApplication::setOverrideCursor( Qt::WaitCursor );
+
+ startDocOperation();
+
+ int anUpdateFlags = 0;
+ QString anErrorMsg;
+
+ bool aResult = false;
+ QStringList aBrowseObjectsEntries;
+
+ try
+ {
+ aResult = processApply( anUpdateFlags, anErrorMsg, aBrowseObjectsEntries );
+ }
+ catch ( Standard_Failure )
+ {
+ Handle(Standard_Failure) aFailure = Standard_Failure::Caught();
+ anErrorMsg = aFailure->GetMessageString();
+ aResult = false;
+ }
+ catch ( ... )
+ {
+ aResult = false;
+ }
+
+ QApplication::restoreOverrideCursor();
+
+ if ( aResult )
+ {
+ module()->update( anUpdateFlags );
+ commitDocOperation();
+ commit();
+ browseObjects( aBrowseObjectsEntries );
+ }
+ else
+ {
+ myEditedObject->Remove();
+ module()->setObjectRemoved( myEditedObject );
+
+ if ( isToAbortOnApply() )
+ abortDocOperation();
+
+ abort();
+ SUIT_MessageBox::critical( module()->getApp()->desktop(),
+ tr( "CREATE_STREAM_ERROR" ),
+ anErrorMsg );
+
+ }
+}
+
bool HYDROGUI_StreamOp::processApply( int& theUpdateFlags,
QString& theErrorMsg,
QStringList& theBrowseObjectsEntries )
myEditedObject->SetSpatialStep( aPanel->getSpatialStep() );
if ( myEditedObject->IsMustBeUpdated( HYDROData_Entity::Geom_2d ) )
+ {
myEditedObject->Update();
+ NCollection_DataMap<Handle(HYDROData_Profile), QSet<QString>> warnings;
+ myEditedObject->GetWarnings(warnings);
+ QString totalWarning;
+ //for (NCollection_DataMap<Handle(HYDROData_Profile), QSet<QString>>::Iterator it(warnings); it.More(); it.Next())
+ //{
+ // const QSet<QString>& V = it.Value();
+ // if (V.empty())
+ // continue;
+ // const Handle(HYDROData_Profile)& K = it.Key();
+ // QString ProfName = K->GetName();
+ // foreach (QString str, V)
+ // {
+ // totalWarning + "Profile: " + ProfName + ": " + str + "\n";
+ // }
+ //}
+ //if (totalWarning != "")
+ // SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "WARNING" ), totalWarning);
+ }
if ( !myIsEdit )
{
HYDROGUI_Tool::FindObjectByName( module(), myHydAxis, KIND_POLYLINEXY ) );
HYDROData_SequenceOfObjects aRefProfiles;
- //std::vector<Handle_HYDROData_Profile> aRefProfiles;
+ //std::vector<Handle(HYDROData_Profile)> aRefProfiles;
int plen = myProfiles.length();
for ( int i = 0; i < plen; ++i )
{
double ss = aPanel->getSpatialStep();
std::set<int> InvInd;
-
- HYDROData_DTM::CreateProfilesFromDTM( aRefProfiles, ddz, ss, HYDROData_Bathymetry::AltitudePoints(), Out3dPres, Out2dPres, OutLeftB, OutRightB,
- OutInlet, OutOutlet, true, true, InvInd);
+
+#ifdef _DEBUG
+ const int MAX_POINTS_IN_PREVIEW = 50000;
+#else
+ const int MAX_POINTS_IN_PREVIEW = 500000;
+#endif
+
+ HYDROData_Bathymetry::AltitudePoints points;
+
+ bool ProjStat = true;
+ NCollection_DataMap<Handle(HYDROData_Profile), QSet<QString>> warnings;
+ bool ToEstimateWarnings = false;
+ HYDROData_DTM::CreateProfilesFromDTM( aRefProfiles, ddz, ss, points, Out3dPres, Out2dPres, OutLeftB, OutRightB,
+ OutInlet, OutOutlet, true, true, InvInd, MAX_POINTS_IN_PREVIEW, ProjStat, warnings, ToEstimateWarnings );
aPanel->clearAllBackgroundColorsForProfileList();
- for (std::set<int>::const_iterator it = InvInd.begin(); it != InvInd.end(); it++)
- aPanel->setBackgroundColorForProfileList(*it, QColor(Qt::yellow));
-
- aPrsDef.myInlet = TopoDS::Wire(OutInlet);
- aPrsDef.myOutlet = TopoDS::Wire(OutOutlet);
- aPrsDef.myLeftBank = TopoDS::Wire(OutLeftB);
- aPrsDef.myRightBank = TopoDS::Wire(OutRightB);
- aPrsDef.myPrs2D = Out2dPres;
+ // for (std::set<int>::const_iterator it = InvInd.begin(); it != InvInd.end(); it++)
+ // aPanel->setBackgroundColorForProfileList(*it, QColor(Qt::yellow));
+
+ aPrsDef.myInlet = OutInlet;
+ aPrsDef.myOutlet = OutOutlet;
+ aPrsDef.myLeftBank = OutLeftB;
+ aPrsDef.myRightBank = OutRightB;
+ if (ProjStat)
+ aPrsDef.myPrs2D = Out2dPres;
aPrsDef.myPrs3D = Out3dPres;
+ aPanel->clearWarnings();
+ if (!ProjStat)
+ aPanel->addWarning(tr("STREAM_PROJECTION_FAILED"));
+
+ for (NCollection_DataMap<Handle(HYDROData_Profile), QSet<QString>>::Iterator it(warnings); it.More(); it.Next())
+ {
+ const QSet<QString>& V = it.Value();
+ if (V.empty())
+ continue;
+ const Handle(HYDROData_Profile)& K = it.Key();
+ QString ProfName = K->GetName();
+ foreach (QString str, V)
+ {
+ aPanel->addWarning("Profile: " + ProfName + ": " + str);
+ }
+
+ aPanel->setBackgroundColorForProfileList(ProfName, QColor(Qt::yellow));
+ }
+
myPreviewPrs->setShape( aPrsDef.myPrs2D );
}