return getUniqueSectionName( aNamesSeq );
}
-IMPLEMENT_STANDARD_HANDLE(HYDROData_PolylineXY, HYDROData_IPolyline)
IMPLEMENT_STANDARD_RTTIEXT(HYDROData_PolylineXY, HYDROData_IPolyline)
HYDROData_PolylineXY::HYDROData_PolylineXY()
if ( aShape.IsNull() )
return false;
- return ImportShape( aShape, false );
+ return ImportShape( aShape, false, NULL );
#endif
}
double pmin = p[0];
double pmax = p[1];
bool forward = true;
- if (! isOldSectionclosed) // no need to check first and last points on an open curve
+ DEBTRACE("isOldSectionclosed: " << isOldSectionclosed);
+ if (!isOldSectionclosed) // no need to check first and last points on an open curve
{
- pmin = p[1];
- pmax = p[0];
- forward = false;
+ if (pmin > pmax)
+ {
+ pmin = p[1];
+ pmax = p[0];
+ forward = false;
+ }
}
else // old section closed: check if we use first or last points...
{
else if ((abs(pmax - pfirst) <1.e-3) and (p[2] > pmin)) // forward, replace pmax par plast
pmax = plast;
}
+ DEBTRACE("forward: "<< forward << " pmin " << pmin << " pmax " << pmax);
HYDROData_PolylineXY::Point aFirstPoint, aLastPoint;
if (forward)
{
HYDROData_PolylineXY::PointsList aSectPoints = theOldPolyline->GetPoints(isec, false);
int nbPoints = aSectPoints.Length();
+ DEBTRACE("nbPoints " << nbPoints);
if (forward)
for (int i=1; i<=nbPoints; i++)
{
if ( theShape.IsNull() )
return false;
+ std::string brepName = this->GetName().toStdString();
+ brepName += ".brep";
+ BRepTools::Write( theShape, brepName.c_str() );
+
RemoveSections();
bool anIsCanBeImported = false;
}
setEditable( anIsCanBeImported );
-
+ Update();
return true;
}
/**
* Returns true if polyline is closed
*/
-bool HYDROData_PolylineXY::IsClosed( const bool theIsSimpleCheck ) const
+bool HYDROData_PolylineXY::IsClosed(const bool theIsSimpleCheck) const
{
+ //DEBTRACE("IsClosed " << theIsSimpleCheck << " " << GetName());
bool anIsClosed = false;
TopoDS_Shape aShape = GetShape();
- if ( aShape.IsNull() )
+ if (aShape.IsNull())
return anIsClosed;
TopTools_SequenceOfShape aWires;
- HYDROData_ShapesTool::ExploreShapeToShapes( aShape, TopAbs_WIRE, aWires );
+ HYDROData_ShapesTool::ExploreShapeToShapes(aShape, TopAbs_WIRE, aWires);
int aNbWires = aWires.Length();
- if ( theIsSimpleCheck )
- {
- anIsClosed = aNbWires > 0;
- for ( int i = 1; i <= aNbWires && anIsClosed; ++i )
+ if (theIsSimpleCheck)
{
- const TopoDS_Shape& aWire = aWires.Value( i );
- anIsClosed = BRep_Tool::IsClosed( aWire );
+ anIsClosed = aNbWires > 0;
+ for (int i = 1; i <= aNbWires && anIsClosed; ++i)
+ {
+ const TopoDS_Shape& aWire = aWires.Value(i);
+ anIsClosed = BRep_Tool::IsClosed(aWire);
+ }
}
- }
else
- {
- anIsClosed = aNbWires == 1 && BRep_Tool::IsClosed( aWires.First() );
- }
+ {
+ if (aNbWires == 1)
+ anIsClosed = BRep_Tool::IsClosed(aWires.First());
+ else
+ {
+ //DEBTRACE("aNbWires " << aNbWires);
+ Handle(TopTools_HSequenceOfShape) aSeqWires = new TopTools_HSequenceOfShape;
+ Handle(TopTools_HSequenceOfShape) aSeqEdges = new TopTools_HSequenceOfShape;
+ for (int i = 1; i <= aNbWires; ++i)
+ {
+ const TopoDS_Shape& aWire = aWires.Value(i);
+ TopExp_Explorer it2(aWire, TopAbs_EDGE);
+ for (; it2.More(); it2.Next())
+ aSeqEdges->Append(it2.Current());
+ }
+ if (aSeqEdges->Length() > 1)
+ {
+ //DEBTRACE(aSeqEdges->Length());
+ ShapeAnalysis_FreeBounds::ConnectEdgesToWires(aSeqEdges, 1E-5, Standard_False, aSeqWires);
+ if (aSeqWires->Length() == 1)
+ {
+ //DEBTRACE(aSeqWires->Length());
+ const TopoDS_Wire& aPolylineWire = TopoDS::Wire(aSeqWires->Value(1));
+ anIsClosed = BRep_Tool::IsClosed(aPolylineWire);
+ }
+ }
+ }
+ }
return anIsClosed;
}
+int HYDROData_PolylineXY::GetNbConnectedWires(Handle(TopTools_HSequenceOfShape)& aConnectedWires) const
+{
+ TopoDS_Shape aShape = GetShape();
+ if (aShape.IsNull())
+ return 0;
+ int aNbconnectedWires = 0;
+ TopTools_SequenceOfShape aWires;
+ HYDROData_ShapesTool::ExploreShapeToShapes(aShape, TopAbs_WIRE, aWires);
+ int aNbWires = aWires.Length();
+ if (aNbWires == 1)
+ {
+ aNbconnectedWires = aNbWires;
+ aConnectedWires->Append(aWires.First());
+ }
+ else
+ {
+ //DEBTRACE("aNbWires " << aNbWires);
+ Handle(TopTools_HSequenceOfShape) aSeqWires = new TopTools_HSequenceOfShape;
+ Handle(TopTools_HSequenceOfShape) aSeqEdges = new TopTools_HSequenceOfShape;
+ for (int i = 1; i <= aNbWires; ++i)
+ {
+ const TopoDS_Shape& aWire = aWires.Value(i);
+ TopExp_Explorer it2(aWire, TopAbs_EDGE);
+ for (; it2.More(); it2.Next())
+ aSeqEdges->Append(it2.Current());
+ }
+ if (aSeqEdges->Length() > 1)
+ {
+ //DEBTRACE(aSeqEdges->Length());
+ ShapeAnalysis_FreeBounds::ConnectEdgesToWires(aSeqEdges, 1E-5, Standard_False, aSeqWires);
+ }
+ aConnectedWires = aSeqWires;
+ aNbconnectedWires = aConnectedWires->Length();
+ DEBTRACE("aNbconnectedWires " << aNbconnectedWires);
+ }
+return aNbconnectedWires;
+}
+
double HYDROData_PolylineXY::GetDistance( const int theSectionIndex,
const int thePointIndex ) const
{
void HYDROData_PolylineXY::Interpolate()
{
- ImportShape( GetShape(), true );
+ ImportShape( GetShape(), true, NULL );
}