#include "HYDROData_Projection.h"
#include "HYDROData_ShapesGroup.h"
#include "HYDROData_ShapesTool.h"
-#include "HYDROData_Pipes.h"
#include "HYDROData_Stream.h"
+#include "HYDROData_Tool.h"
#include <BRepBuilderAPI_MakeWire.hxx>
HYDROData_Channel::HYDROData_Channel()
-: HYDROData_ArtificialObject()
+: HYDROData_ArtificialObject( Geom_3d )
{
}
{
}
-QStringList HYDROData_Channel::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
+QStringList HYDROData_Channel::DumpToPython( const QString& thePyScriptPath,
+ MapOfTreatedObjects& theTreatedObjects ) const
{
QStringList aResList = dumpObjectCreation( theTreatedObjects );
QString aName = GetObjPyName();
Handle(HYDROData_Polyline3D) aRefGideLine = GetGuideLine();
- setPythonReferenceObject( theTreatedObjects, aResList, aRefGideLine, "SetGuideLine" );
+ setPythonReferenceObject( thePyScriptPath, theTreatedObjects, aResList, aRefGideLine, "SetGuideLine" );
Handle(HYDROData_Profile) aRefProfile = GetProfile();
- setPythonReferenceObject( theTreatedObjects, aResList, aRefProfile, "SetProfile" );
+ setPythonReferenceObject( thePyScriptPath, theTreatedObjects, aResList, aRefProfile, "SetProfile" );
+
+ aResList << QString( "%1.SetEquiDistance( %2 )" ).arg( aName ).arg( GetEquiDistance() );
aResList << QString( "" );
- aResList << QString( "%1.Update();" ).arg( aName );
+ aResList << QString( "%1.Update()" ).arg( aName );
aResList << QString( "" );
return aResList;
return aResSeq;
}
-TopoDS_Shape HYDROData_Channel::GetTopShape() const
-{
- return getTopShape();
-}
-
-TopoDS_Shape HYDROData_Channel::GetShape3D() const
-{
- return getShape3D();
-}
-
bool HYDROData_Channel::CreatePresentations( const Handle(HYDROData_Polyline3D)& theGuideLine,
const Handle(HYDROData_Profile)& theProfile,
- PrsDefinition& thePrs )
+ PrsDefinition& thePrs,
+ double theEquiDistance )
{
// Check input parameters
if ( theGuideLine.IsNull() || theProfile.IsNull() ) {
int aNbPoints = aPolylinePoints.Length();
*/
- HYDROData_Polyline3D::Polyline3DPoints aPolylinePoints3D = theGuideLine->GetPoints();
+ HYDROData_Polyline3D::Polyline3DPoints aPolylinePoints3D = theGuideLine->GetPoints( theEquiDistance );
int aNbPoints = aPolylinePoints3D.Length();
- if ( aNbPoints < 2 ) {
+ if ( aNbPoints < 2 )
return false;
- }
// Get tangent in each point of the guide line ( 2D )
TColgp_Array1OfDir aTangents( 1, aNbPoints );
HYDROData_IPolyline::SectionType aSectionType = aPolylineXY->GetSectionType( 0 );
- if ( aSectionType == HYDROData_IPolyline::SECTION_POLYLINE ) {
+ if( aSectionType == HYDROData_IPolyline::SECTION_POLYLINE )
+ {
for ( int i = 1; i <= aNbPoints; ++i ) {
gp_XYZ aPnt = aPolylinePoints3D.Value( i );
aPnt.SetZ( 0. );
}
// Get the profile middle point ( 3D )
- gp_Pnt aMiddlePoint( theProfile->GetMiddlePoint() );
+ gp_Pnt aMiddlePoint( theProfile->GetMiddlePoint( true ) );
// Translate the profile to each point on the guide line ( 3D )
Handle(TColgp_HArray1OfPnt) anArrayOfFPnt = new TColgp_HArray1OfPnt(1, aNbPoints );
// Create presentation
HYDROData_Stream::PrsDefinition aPrs;
Handle(TopTools_HArray1OfShape) anArrOf2DProfiles; // we don't need 2D profiles for channel/digue presentation
- bool aRes = HYDROData_Stream::CreatePresentations( anArrayOfFPnt, anArrayOfLPnt,
- anArrOfProfiles, anArrOf2DProfiles, aPrs );
- if ( aRes ) {
- thePrs.myPrs3D = aPrs.myPrs3D;
- thePrs.myPrs2D = TopoDS::Face( aPrs.myPrs2D );
- BRepBuilderAPI_MakeWire aMakeWire( aPrs.myLeftBank ) ;
- thePrs.myLeftBank = aMakeWire.Wire();
- aMakeWire = BRepBuilderAPI_MakeWire( aPrs.myRightBank );
- thePrs.myRightBank = aMakeWire.Wire();
- aMakeWire = BRepBuilderAPI_MakeWire( aPrs.myInlet );
- thePrs.myInlet = aMakeWire.Wire();
- aMakeWire = BRepBuilderAPI_MakeWire( aPrs.myOutlet );
- thePrs.myOutlet = aMakeWire.Wire();
- }
- return aRes;
+ HYDROData_Stream::CreatePresentations( anArrayOfFPnt, anArrayOfLPnt, anArrOfProfiles, aPrs );
+ thePrs.myInlet = aPrs.myInlet;
+ thePrs.myOutlet = aPrs.myOutlet;
+ thePrs.myLeftBank = aPrs.myLeftBank;
+ thePrs.myRightBank = aPrs.myRightBank;
+ thePrs.myPrs2D = TopoDS::Face(aPrs.myPrs2D);
+ thePrs.myPrs3D = aPrs.myPrs3D;
+
+ //thePrs.myPrs2D = TopoDS::Face( aPrs.myPrs2D );
+ //BRepBuilderAPI_MakeWire aMakeWire( aPrs.myLeftBank ) ;
+ //thePrs.myLeftBank = aMakeWire.Wire();
+ //aMakeWire = BRepBuilderAPI_MakeWire( aPrs.myRightBank );
+ //thePrs.myRightBank = aMakeWire.Wire();
+ //aMakeWire = BRepBuilderAPI_MakeWire( aPrs.myInlet );
+ //thePrs.myInlet = aMakeWire.Wire();
+ //aMakeWire = BRepBuilderAPI_MakeWire( aPrs.myOutlet );
+ //thePrs.myOutlet = aMakeWire.Wire();
+
+ return true;
}
void HYDROData_Channel::Update()
Handle(HYDROData_Profile) aProfile = GetProfile();
PrsDefinition aResultPrs;
- if ( !CreatePresentations( aGuideLine, aProfile, aResultPrs ) )
+ double anEquiDistance = GetEquiDistance();
+ if ( !CreatePresentations( aGuideLine, aProfile, aResultPrs, anEquiDistance ) )
return;
SetShape3D( aResultPrs.myPrs3D );
return true;
}
-QColor HYDROData_Channel::DefaultFillingColor()
+QColor HYDROData_Channel::DefaultFillingColor() const
{
return QColor( Qt::blue );
}
-QColor HYDROData_Channel::DefaultBorderColor()
+QColor HYDROData_Channel::DefaultBorderColor() const
{
return QColor( Qt::transparent );
}
-QColor HYDROData_Channel::getDefaultFillingColor() const
-{
- return DefaultFillingColor();
-}
-
-QColor HYDROData_Channel::getDefaultBorderColor() const
-{
- return DefaultBorderColor();
-}
-
bool HYDROData_Channel::SetGuideLine( const Handle(HYDROData_Polyline3D)& theGuideLine )
{
Handle(HYDROData_Polyline3D) aPrevGuideLine = GetGuideLine();
SetReferenceObject( theGuideLine, DataTag_GuideLine );
// Indicate model of the need to update the chanel presentation
- SetToUpdate( true );
+ Changed( Geom_3d );
return true;
}
ClearReferenceObjects( DataTag_GuideLine );
// Indicate model of the need to update the chanel presentation
- SetToUpdate( true );
+ Changed( Geom_3d );
}
bool HYDROData_Channel::SetProfile( const Handle(HYDROData_Profile)& theProfile )
SetReferenceObject( theProfile, DataTag_Profile );
// Indicate model of the need to update the chanel presentation
- SetToUpdate( true );
+ Changed( Geom_3d );
return true;
}
ClearReferenceObjects( DataTag_Profile );
// Indicate model of the need to update the chanel presentation
- SetToUpdate( true );
+ Changed( Geom_3d );
}
ObjectKind HYDROData_Channel::getAltitudeObjectType() const
{
- DEBTRACE("HYDROData_Channel::getAltitudeObjectType");
+ //DEBTRACE("HYDROData_Channel::getAltitudeObjectType");
return KIND_CHANNEL_ALTITUDE;
+ //return KIND_STREAM_ALTITUDE;
+}
+
+TopoDS_Shape HYDROData_Channel::GetLeftShape() const
+{
+ HYDROData_SequenceOfObjects aGroups = GetGroups();
+ return HYDROData_Tool::getFirstShapeFromGroup( aGroups, 1);
+}
+
+TopoDS_Shape HYDROData_Channel::GetRightShape() const
+{
+ HYDROData_SequenceOfObjects aGroups = GetGroups();
+ return HYDROData_Tool::getFirstShapeFromGroup( aGroups, 2);
}
+void HYDROData_Channel::SetEquiDistance( double theEquiDistance )
+{
+ double anEquiDistance = theEquiDistance > 0 ? theEquiDistance : 1E-3;
+ SetDouble( DataTag_EquiDistance, theEquiDistance );
+}
+
+double HYDROData_Channel::GetEquiDistance() const
+{
+ return GetDouble( DataTag_EquiDistance, 1.0 );
+}