X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_StreamAltitude.cxx;h=50443a315d707f139085652189815ade803b395f;hb=35d2822e3e33ca225dcc1ba24e6684a43e3bb2d1;hp=6692ff0a183c624e9980c85dfba226d81405e78d;hpb=22454636c13f2e97ab7126a782fdd4bdf40905f9;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_StreamAltitude.cxx b/src/HYDROData/HYDROData_StreamAltitude.cxx index 6692ff0a..50443a31 100644 --- a/src/HYDROData/HYDROData_StreamAltitude.cxx +++ b/src/HYDROData/HYDROData_StreamAltitude.cxx @@ -1,3 +1,20 @@ +// Copyright (C) 2014-2015 EDF-R&D +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include "HYDROData_StreamAltitude.h" @@ -5,11 +22,9 @@ #include "HYDROData_Profile.h" #include "HYDROData_Stream.h" #include "HYDROData_ShapesTool.h" - +#include #include -#include - #include #include #include @@ -30,18 +45,10 @@ #include +#include + #include -#define CLASS2D 1 -#ifdef CLASS2D -#include -#include -#include -#include -#include -#include -#include -#undef _NCollection_MapHasher -#endif + #ifdef DEB_CLASS2D #include #include @@ -59,20 +66,6 @@ HYDROData_StreamAltitude::~HYDROData_StreamAltitude() { } -QStringList HYDROData_StreamAltitude::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const -{ - QStringList aResList = dumpObjectCreation( theTreatedObjects ); - QString aName = GetObjPyName(); - - // TODO - - aResList << QString( "" ); - aResList << QString( "%1.Update();" ).arg( aName ); - aResList << QString( "" ); - - return aResList; -} - Standard_Real getAltitudeFromProfile( const Handle(HYDROData_Profile)& theProfile, const Standard_Real& theLeftDist, const Standard_Real& theRightDist ) @@ -80,8 +73,8 @@ Standard_Real getAltitudeFromProfile( const Handle(HYDROData_Profile)& theProfil Standard_Real aResAlt = 0.0; gp_XY aFirstPoint, aLastPoint; - if ( !theProfile->GetLeftPoint( aFirstPoint ) || - !theProfile->GetRightPoint( aLastPoint ) ) + if ( !theProfile->GetLeftPoint( aFirstPoint, false ) || + !theProfile->GetRightPoint( aLastPoint, false ) ) return aResAlt; gp_Pnt aPnt1( aFirstPoint.X(), aFirstPoint.Y(), 0 ); @@ -97,7 +90,7 @@ Standard_Real getAltitudeFromProfile( const Handle(HYDROData_Profile)& theProfil gp_Pnt aPrevPoint; gp_Lin aPrevNormal; - HYDROData_Profile::ProfilePoints aProfilePoints = theProfile->GetProfilePoints(); + HYDROData_Profile::ProfilePoints aProfilePoints = theProfile->GetProfilePoints( false ); for ( int i = 1, n = aProfilePoints.Length(); i <= n; ++i ) { gp_Pnt aProfPoint( aProfilePoints.Value( i ) ); @@ -143,60 +136,6 @@ Standard_Real getAltitudeFromProfile( const Handle(HYDROData_Profile)& theProfil return aResAlt; } -// =================================== workaround ============================== -// till fix of Classifier2d bug -#ifdef CLASS2D -TopAbs_State ComputePointState(const gp_XY& thePnt2d, const TopoDS_Face& theFace) -{ - TopAbs_State aStatus(TopAbs_UNKNOWN); - TopoDS_Wire aWire; - int nb(0); - TopoDS_Iterator it(theFace); - for(;it.More();it.Next()) { - aWire = TopoDS::Wire(it.Value()); - nb++; - } - if(nb > 1 || aWire.IsNull()) return aStatus; - gp_Pln aPlane; - gp_Vec aNormal; - BRepBuilderAPI_FindPlane fndPlane (theFace, Precision::Confusion()); - if(fndPlane.Found()) - aPlane = fndPlane.Plane()->Pln(); - else - return aStatus; - aNormal = gp_Vec(aPlane.Axis().Direction()); - if(theFace.Orientation() == TopAbs_REVERSED) - aNormal.Reverse(); - gp_Pnt aPoint = gp_Pnt (thePnt2d.X(), thePnt2d.Y(), 0); - TColgp_SequenceOfVec aSeq; - TopTools_MapOfShape aMap; - it.Initialize(aWire); - for (;it.More(); it.Next()) { - const TopoDS_Vertex& aVx = TopExp::FirstVertex(TopoDS::Edge(it.Value()), Standard_True); - if(!aMap.Add(aVx)) - continue; - const gp_Pnt& aCurPnt = BRep_Tool::Pnt(TopoDS::Vertex(aVx)); - if(aPoint.IsEqual(aCurPnt,Precision::Confusion())) { - aStatus = TopAbs_ON; - return aStatus; - } - gp_Vec aVec (aPoint, aCurPnt); - aSeq.Append(aVec); - } - Standard_Real anAng(0.0); - for(int i = 1;i < aSeq.Length();i++) { - const gp_Vec& aV1 = aSeq.Value(i); - const gp_Vec& aV2 = aSeq.Value(i+1); - anAng += aV1.AngleWithRef(aV2, aNormal); - } - anAng += aSeq.Value(aSeq.Length()).AngleWithRef(aSeq.Value(1), aNormal); - if(abs(anAng) > Precision::Angular()) - aStatus = TopAbs_IN; - else - aStatus = TopAbs_OUT; - return aStatus; -} -#endif bool HYDROData_StreamAltitude::getBoundaryProfilesForPoint( const gp_XY& thePoint, Handle(HYDROData_Profile)& theLeftProfile, @@ -221,7 +160,8 @@ bool HYDROData_StreamAltitude::getBoundaryProfilesForPoint( continue; gp_XY aFirstPoint, aLastPoint; - if ( !aProfile->GetLeftPoint( aFirstPoint ) || !aProfile->GetRightPoint( aLastPoint ) ) + if ( !aProfile->GetLeftPoint( aFirstPoint, false ) || + !aProfile->GetRightPoint( aLastPoint, false ) ) continue; gp_Pnt aPnt1( aFirstPoint.X(), aFirstPoint.Y(), 0 ); @@ -249,14 +189,10 @@ bool HYDROData_StreamAltitude::getBoundaryProfilesForPoint( BRepBuilderAPI_MakeVertex aMk(aPnt); aBB.Add(aCmp, aMk.Vertex()); BRepTools::Write(aCmp, "ProfileFace.brep"); -#endif - BRepTopAdaptor_FClass2d aClassifier( aProfilesFace, Precision::Confusion() ); - TopAbs_State aPointState = -#ifdef CLASS2D - ComputePointState(thePoint, aProfilesFace); -#else - aClassifier.Perform( gp_Pnt2d( thePoint ), Standard_False ); -#endif +#endif + + TopAbs_State aPointState = HYDROData_Tool::ComputePointState(thePoint, aProfilesFace); + #ifdef DEB_CLASS2D cout << "Point status is = " << aPointState <