X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Polyline3D.cxx;h=15959d971f698ca5499aa347c7d7f3dc604470af;hb=fce3f1240b6161d7cb837344078e5943b90eca65;hp=d11aaf9348ed2d334017edeec9783dea8c97f520;hpb=914d3c8044ea08613f24ce41a94ecf067e0e750f;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Polyline3D.cxx b/src/HYDROData/HYDROData_Polyline3D.cxx index d11aaf93..15959d97 100644 --- a/src/HYDROData/HYDROData_Polyline3D.cxx +++ b/src/HYDROData/HYDROData_Polyline3D.cxx @@ -29,6 +29,9 @@ #include #include +#include +#include +#include #include #include @@ -47,10 +50,12 @@ #include +#define _DEVDEBUG_ +#include "HYDRO_trace.hxx" + #include #include -IMPLEMENT_STANDARD_HANDLE(HYDROData_Polyline3D,HYDROData_Object) IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Polyline3D,HYDROData_Object) @@ -63,25 +68,26 @@ HYDROData_Polyline3D::~HYDROData_Polyline3D() { } -QStringList HYDROData_Polyline3D::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const +QStringList HYDROData_Polyline3D::DumpToPython( const QString& thePyScriptPath, + MapOfTreatedObjects& theTreatedObjects ) const { QStringList aResList = dumpObjectCreation( theTreatedObjects ); QString aPolylineName = GetObjPyName(); Handle(HYDROData_PolylineXY) aRefPolyline = GetPolylineXY(); - setPythonReferenceObject( theTreatedObjects, aResList, aRefPolyline, "SetPolylineXY" ); + setPythonReferenceObject( thePyScriptPath, theTreatedObjects, aResList, aRefPolyline, "SetPolylineXY" ); Handle(HYDROData_ProfileUZ) aRefProfileUZ = GetProfileUZ(); if ( !aRefProfileUZ.IsNull() ) { Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( aRefProfileUZ->GetFatherObject() ); - if ( checkObjectPythonDefinition( theTreatedObjects, aResList, aProfile ) ) + if ( checkObjectPythonDefinition( thePyScriptPath, theTreatedObjects, aResList, aProfile ) ) { QString aProfileName = aProfile->GetObjPyName(); if ( !aProfileName.isEmpty() ) { - aResList << QString( "%1.SetProfileUZ( %2.GetProfileUZ() );" ) + aResList << QString( "%1.SetProfileUZ( %2.GetProfileUZ() )" ) .arg( aPolylineName ).arg( aProfileName ); } } @@ -96,23 +102,23 @@ QStringList HYDROData_Polyline3D::DumpToPython( MapOfTreatedObjects& theTreatedO { Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( aChildProfileUZ->GetFatherObject() ); - if ( checkObjectPythonDefinition( theTreatedObjects, aResList, aProfile ) ) + if ( checkObjectPythonDefinition( thePyScriptPath, theTreatedObjects, aResList, aProfile ) ) { QString aProfileName = aProfile->GetObjPyName(); if ( !aProfileName.isEmpty() ) { - aResList << QString( "%1.SetChildProfileUZ( %2.GetProfileUZ() );" ) + aResList << QString( "%1.SetChildProfileUZ( %2.GetProfileUZ() )" ) .arg( aPolylineName ).arg( aProfileName ); } } } - setPythonReferenceObject( theTreatedObjects, aResList, aRefBathymetry, "SetAltitudeObject" ); + setPythonReferenceObject( thePyScriptPath, theTreatedObjects, aResList, aRefBathymetry, "SetAltitudeObject" ); } } aResList << QString( "" ); - aResList << QString( "%1.Update();" ).arg( aPolylineName ); + aResList << QString( "%1.Update()" ).arg( aPolylineName ); aResList << QString( "" ); return aResList; @@ -416,7 +422,7 @@ void HYDROData_Polyline3D::removeChildProfileUZ() */ } -HYDROData_Polyline3D::Polyline3DPoints HYDROData_Polyline3D::GetPoints() const +HYDROData_Polyline3D::Polyline3DPoints HYDROData_Polyline3D::GetPoints( double theEqDistance ) const { Polyline3DPoints aPoints; @@ -467,7 +473,29 @@ HYDROData_Polyline3D::Polyline3DPoints HYDROData_Polyline3D::GetPoints() const } else { // Get points from spline curve Standard_Real aStart, anEnd; - Handle(Geom_Curve) aCurve = BRep_Tool::Curve( TopoDS::Edge( anEdges.First() ), aStart, anEnd ); + TopoDS_Edge anEdge = TopoDS::Edge( anEdges.First() ); + Handle(Geom_Curve) aCurve = BRep_Tool::Curve( anEdge, aStart, anEnd ); + + if( theEqDistance > 0 ) + { + GeomAdaptor_Curve anAdaptorCurve( aCurve ); + double aLength = GCPnts_AbscissaPoint::Length( anAdaptorCurve ); + int aNbPoints = ceil( aLength / theEqDistance ); + GCPnts_QuasiUniformAbscissa aDist( anAdaptorCurve, aNbPoints ); + if( aDist.IsDone() ) + { + aNbPoints = aDist.NbPoints(); + for( int i=1; i<=aNbPoints; i++ ) + { + double p = aDist.Parameter( i ); + gp_Pnt aPnt; + aCurve->D0( p, aPnt ); + aPoints.Append( aPnt.XYZ() ); + } + return aPoints; + } + } + Handle(Geom_BSplineCurve) aGeomSpline = Handle(Geom_BSplineCurve)::DownCast( aCurve ); if ( !aGeomSpline.IsNull() ) {