#define PYTHON_POLYLINEXY_ID "KIND_POLYLINEXY"
+const double LOCAL_SELECTION_TOLERANCE = 0.0001;
+
IMPLEMENT_STANDARD_HANDLE(HYDROData_PolylineXY, HYDROData_IPolyline)
IMPLEMENT_STANDARD_RTTIEXT(HYDROData_PolylineXY, HYDROData_IPolyline)
gp_Pnt aPnt1( aFirstPoint.X(), aFirstPoint.Y(), aFirstPoint.Z() );
gp_Pnt aPnt2( aLastPoint.X(), aLastPoint.Y(), aLastPoint.Z() );
+ if ( aPnt1.IsEqual( aPnt2, LOCAL_SELECTION_TOLERANCE ) )
+ continue;
+
TopoDS_Edge anEdge = BRepBuilderAPI_MakeEdge( aPnt1, aPnt2 ).Edge();
aMakeWire.Add( anEdge );
}
}
else //if( theType == PolylineSection::SECTION_SPLINE )
{
- HYDROData_BSplineOperation aBSpline( thePoints, theIsClosed );
+ HYDROData_BSplineOperation aBSpline( thePoints, theIsClosed, LOCAL_SELECTION_TOLERANCE );
TopoDS_Edge anEdge = BRepBuilderAPI_MakeEdge( aBSpline.Curve() ).Edge();
aMakeWire.Add( anEdge );
}
else
{
- HYDROData_BSplineOperation aBSpline( thePoints, theIsClosed );
+ HYDROData_BSplineOperation aBSpline( thePoints, theIsClosed, LOCAL_SELECTION_TOLERANCE );
aBSpline.ComputePath( thePath );
}
}
void HYDROData_PolylineXY::Update()
{
+ HYDROData_IPolyline::Update();
+
NCollection_Sequence<TCollection_AsciiString> aSectNames;
NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
NCollection_Sequence<bool> aSectClosures;
const Point& aSectPoint = aSectPointsList.Value( i );
aResDistance += gp_Pnt2d( aPrevPoint ).Distance( aSectPoint );
aPrevPoint = aSectPoint;
+
+ if ( thePointIndex == i - 1 )
+ break;
}
}
else
aPointToTest = aPoint;
}
- HYDROData_BSplineOperation aBSpline( aPoints, anIsSectionClosed );
+ HYDROData_BSplineOperation aBSpline( aPoints, anIsSectionClosed, LOCAL_SELECTION_TOLERANCE );
Quantity_Parameter aFirstParam = aBSpline.Curve()->FirstParameter();
Quantity_Parameter aSecondParam = aBSpline.Curve()->LastParameter();
aNamesList->Append( aSectName );
aTypesList->Append( theSectionType );
aClosuresList->Append( theIsClosed );
+
+ SetToUpdate( true );
}
TCollection_AsciiString HYDROData_PolylineXY::GetSectionName( const int theSectionIndex ) const
TDataStd_ListIteratorOfListOfExtendedString aNamesIter( anOldNamesList );
for ( int i = 0; aNamesIter.More(); aNamesIter.Next(), ++i )
aNamesList->Append( i == theSectionIndex ? aNewSectName : aNamesIter.Value() );
+
+ SetToUpdate( true );
}
HYDROData_PolylineXY::SectionType HYDROData_PolylineXY::GetSectionType( const int theSectionIndex ) const
TColStd_ListIteratorOfListOfInteger aTypesIter( anOldTypesList );
for ( int i = 0; aTypesIter.More(); aTypesIter.Next(), ++i )
aTypesList->Append( i == theSectionIndex ? theSectionType : aTypesIter.Value() );
+
+ SetToUpdate( true );
}
bool HYDROData_PolylineXY::IsClosedSection( const int theSectionIndex ) const
TDataStd_ListIteratorOfListOfByte aClosuresIter( anOldClosuresList );
for ( int i = 0; aClosuresIter.More(); aClosuresIter.Next(), ++i )
aClosuresList->Append( i == theSectionIndex ? theIsClosed : (bool)aClosuresIter.Value() );
+
+ SetToUpdate( true );
}
void HYDROData_PolylineXY::GetSections( NCollection_Sequence<TCollection_AsciiString>& theSectNames,
// Remove points that belongs to removed section
removePointsLists( theSectionIndex );
}
+
+ SetToUpdate( true );
}
void HYDROData_PolylineXY::RemoveSections()
{
removeSectionsLists();
removePointsLists();
+ SetToUpdate( true );
}
void HYDROData_PolylineXY::AddPoint( const int theSectionIndex,
aListY->Append( aCoordY );
}
}
+
+ SetToUpdate( true );
}
void HYDROData_PolylineXY::SetPoint( const int theSectionIndex,
aListY->Append( aCoordY );
}
}
+
+ SetToUpdate( true );
}
void HYDROData_PolylineXY::RemovePoint( const int theSectionIndex,
aListY->Append( anIterY.Value() );
}
}
+
+ SetToUpdate( true );
}
HYDROData_PolylineXY::PointsList HYDROData_PolylineXY::GetPoints( const int theSectionIndex ) const