#include "HYDROData_Bathymetry.h"
#include <vector>
+#include <set>
+#include <gp_Pnt2d.hxx>
class Handle_HYDROData_Profile;
class Handle_Geom2d_BSplineCurve;
class Handle_Geom2d_Curve;
+class gp_Pnt;
+class gp_Vec2d;
+class TopoDS_Edge;
+class TopoDS_Wire;
+class TopoDS_Face;
+class TopoDS_Compound;
+class Handle_Geom_Plane;
+class TopTools_IndexedMapOfOrientedShape;
DEFINE_STANDARD_HANDLE( HYDROData_DTM, HYDROData_Bathymetry )
enum DataTag
{
DataTag_First = HYDROData_Bathymetry::DataTag_First + 100, ///< first tag, to reserve
+ DataTag_Profiles,
+ DataTag_DDZ,
+ DataTag_SpatialStep,
+ DataTag_LeftBankShape,
+ DataTag_RightBankShape,
+ DataTag_InletShape,
+ DataTag_OutletShape,
+ DataTag_3DShape,
+ DataTag_2DShape
};
public:
DEFINE_STANDARD_RTTI( HYDROData_DTM );
-protected:
- friend class HYDROData_Iterator;
- friend class test_HYDROData_DTM;
+ HYDRODATA_EXPORT HYDROData_SequenceOfObjects GetProfiles() const;
+ HYDRODATA_EXPORT void SetProfiles( const HYDROData_SequenceOfObjects& );
- HYDRODATA_EXPORT HYDROData_DTM();
- virtual HYDRODATA_EXPORT ~HYDROData_DTM();
+ HYDRODATA_EXPORT double GetDDZ() const;
+ HYDRODATA_EXPORT void SetDDZ( double );
+
+ HYDRODATA_EXPORT double GetSpatialStep() const;
+ HYDRODATA_EXPORT void SetSpatialStep( double );
+ HYDRODATA_EXPORT virtual void Update();
+
+public:
struct PointUZ
{
+ PointUZ( double u=0, double z=0 ) { U=u; Z=z; }
double U;
double Z;
};
class CurveUZ : public std::vector<PointUZ>
{
public:
- CurveUZ( double theXCurv );
+ CurveUZ( double theXcurv, const gp_Vec2d& theProfileDir = gp_Vec2d() );
~CurveUZ();
+ double Xcurv() const;
+ gp_Vec2d ProfileDir() const;
+
+ CurveUZ operator + ( const CurveUZ& ) const;
+ CurveUZ operator * ( double ) const;
+
private:
- double Xcurv;
+ double myXcurv;
+ gp_Vec2d myProfileDir;
};
- static Handle_Geom2d_BSplineCurve CreateHydraulicAxis( const std::vector<Handle_HYDROData_Profile>& theProfiles );
+protected:
+ friend class HYDROData_Stream;
+ friend class HYDROData_Iterator;
+ friend class test_HYDROData_DTM;
+
+ HYDRODATA_EXPORT HYDROData_DTM();
+ virtual HYDRODATA_EXPORT ~HYDROData_DTM();
- static std::vector<Handle_Geom2d_Curve> ProfileToParametric( const Handle_HYDROData_Profile& theProfile );
+ static Handle_Geom2d_BSplineCurve CreateHydraulicAxis(
+ const std::vector<Handle_HYDROData_Profile>& theProfiles,
+ std::vector<double>& theDistances );
- static void ProfileDiscretization( const Handle_HYDROData_Profile& theProfile,
- double theMinZ, double theMaxZ, double theDDZ,
- CurveUZ& theMidPointCurve,
- CurveUZ& theWidthCurve );
+ static std::vector<Handle_Geom2d_Curve> ProfileToParametric( const Handle_HYDROData_Profile& theProfile,
+ double& theUMin, double& theUMax,
+ gp_Vec2d& theDir );
+
+ static void GetProperties( const Handle_HYDROData_Profile& theProfile,
+ gp_Pnt& theLowestPoint, gp_Vec2d& theDir,
+ bool isNormalDir,
+ double& theZMin, double& theZMax );
+ static void ProfileDiscretization( const Handle_HYDROData_Profile& theProfile,
+ double theXCurv, double theMinZ, double theMaxZ, double theDDZ,
+ CurveUZ& theMidPointCurve,
+ CurveUZ& theWidthCurve,
+ int& intersection_nb,
+ double theTolerance = 1E-6 );
+
+ static void CurveTo3D( const Handle_Geom2d_BSplineCurve& theHydraulicAxis,
+ const CurveUZ& theMidCurve, const CurveUZ& theWidthCurve,
+ AltitudePoints& thePoints, double dz );
+
static void Interpolate( const CurveUZ& theCurveA, const CurveUZ& theCurveB,
- int theNbSteps, std::vector<CurveUZ>& theInterpolation );
+ int theNbSteps, std::vector<CurveUZ>& theInterpolation,
+ bool isAddSecond );
+
+ static std::vector<AltitudePoints> Interpolate
+ ( const Handle_Geom2d_BSplineCurve& theHydraulicAxis,
+ const Handle_HYDROData_Profile& theProfileA,
+ double theXCurvA,
+ const Handle_HYDROData_Profile& theProfileB,
+ double theXCurvB,
+ double theDDZ, int theNbSteps, bool isAddSecond,
+ int& inter_nb_1, int& inter_nb_2 );
+
+ static AltitudePoints Interpolate( const std::vector<Handle_HYDROData_Profile>& theProfiles,
+ double theDDZ, double theSpatialStep,
+ AltitudePoints& theLeft,
+ AltitudePoints& theRight,
+ std::vector<AltitudePoints>& theMainProfiles,
+ std::set<int>& invalInd );
+
+ static void PointToWire(const AltitudePoints& pnts, TopoDS_Wire& W );
+
+ static void ProjWireOnPlane(const TopoDS_Wire& inpWire, const Handle_Geom_Plane& RefPlane, TopoDS_Wire& outWire);
+
+ static TopTools_IndexedMapOfOrientedShape Create3DShape(const AltitudePoints& left,
+ const AltitudePoints& right,
+ const std::vector<AltitudePoints>& main_profiles);
+
+ static void CreateProfiles(const std::vector<Handle_HYDROData_Profile>& theProfiles,
+ double theDDZ,
+ double theSpatialStep,
+ AltitudePoints& theOutLeft,
+ AltitudePoints& theOutRight,
+ AltitudePoints& theOutPoints,
+ std::vector<AltitudePoints>& theOutMainProfiles,
+ TopoDS_Shape& Out3dPres,
+ TopoDS_Shape& Out2dPres,
+ TopoDS_Shape& OutLeftB,
+ TopoDS_Shape& OutRightB,
+ TopoDS_Shape& OutInlet,
+ TopoDS_Shape& OutOutlet,
+ bool Create3dPres,
+ bool Create2dPres,
+ std::set<int>& InvInd );
+
+ static void Get2dFaceFrom3dPres(const TopoDS_Compound& cmp, TopoDS_Face& outF );
+
+ void GetPresentationShapes( TopoDS_Shape& Out3dPres,
+ TopoDS_Shape& Out2dPres,
+ TopoDS_Shape& OutLeftB,
+ TopoDS_Shape& OutRightB,
+ TopoDS_Shape& OutInlet,
+ TopoDS_Shape& OutOutlet );
+public:
- static void CurveTo3d( const CurveUZ& theCurve, const CurveUZ& theCurveB,
- int theNbSteps, std::vector<CurveUZ>& theInterpolation );
+ HYDRODATA_EXPORT static void CreateProfilesFromDTM ( const HYDROData_SequenceOfObjects& InpProfiles,
+ double ddz,
+ double step,
+ AltitudePoints& points,
+ TopoDS_Shape& Out3dPres,
+ TopoDS_Shape& Out2dPres,
+ TopoDS_Shape& OutLeftB,
+ TopoDS_Shape& OutRightB,
+ TopoDS_Shape& OutInlet,
+ TopoDS_Shape& OutOutlet,
+ bool Create3dPres,
+ bool Create2dPres,
+ std::set<int>& InvInd );
};
+
+
+
#endif