Removed unnecessary point duplication at initialization of planar polygons in Select3D_InteriorSensitivePointSet;
Test case for issue #26031
Standard_Real anAngle = aVec1.Dot (aVec2);
if (!aPlane.Contains (thePoints.Value (aPntIter)) || anAngle > Precision::Confusion())
{
Standard_Real anAngle = aVec1.Dot (aVec2);
if (!aPlane.Contains (thePoints.Value (aPntIter)) || anAngle > Precision::Confusion())
{
- Standard_Integer anUpperBound = aPntIter - aStartIdx;
+ // subtract 1 due to indexation from zero in sub-polygons
+ Standard_Integer anUpperBound = aPntIter - aStartIdx - 1;
Handle (TColgp_HArray1OfPnt) aPointsArray = new TColgp_HArray1OfPnt (0, anUpperBound);
for (Standard_Integer aIdx = aStartIdx; aIdx <= aStartIdx + anUpperBound; ++aIdx)
{
Handle (TColgp_HArray1OfPnt) aPointsArray = new TColgp_HArray1OfPnt (0, anUpperBound);
for (Standard_Integer aIdx = aStartIdx; aIdx <= aStartIdx + anUpperBound; ++aIdx)
{
Standard_Real anAngle = aVec1.Dot (aVec2);
if (!aPlane.Contains (thePoints->Value (aPntIter)) || anAngle > Precision::Confusion())
{
Standard_Real anAngle = aVec1.Dot (aVec2);
if (!aPlane.Contains (thePoints->Value (aPntIter)) || anAngle > Precision::Confusion())
{
- Standard_Integer anUpperBound = aPntIter - aStartIdx;
+ // subtract 1 due to indexation from zero in sub-polygons
+ Standard_Integer anUpperBound = aPntIter - aStartIdx - 1;
Handle (TColgp_HArray1OfPnt) aPointsArray = new TColgp_HArray1OfPnt (0, anUpperBound);
for (Standard_Integer aIdx = aStartIdx; aIdx <= aStartIdx + anUpperBound; ++aIdx)
{
Handle (TColgp_HArray1OfPnt) aPointsArray = new TColgp_HArray1OfPnt (0, anUpperBound);
for (Standard_Integer aIdx = aStartIdx; aIdx <= aStartIdx + anUpperBound; ++aIdx)
{
const Handle(Select3D_SensitivePoly)& aPolygon = myPlanarPolygons.Value (anIdx);
aSize += aPolygon->NbSubElements();
}
const Handle(Select3D_SensitivePoly)& aPolygon = myPlanarPolygons.Value (anIdx);
aSize += aPolygon->NbSubElements();
}
- aSize -= (myPlanarPolygons.Length() - 1) * 2;
theHArrayOfPnt = new TColgp_HArray1OfPnt (1, aSize);
Standard_Integer anOutputPntArrayIdx = 1;
theHArrayOfPnt = new TColgp_HArray1OfPnt (1, aSize);
Standard_Integer anOutputPntArrayIdx = 1;
--- /dev/null
+puts "============"
+puts "CR26031"
+puts "============"
+puts ""
+
+##########################################################################################
+# Visualization - fix out-of-range within Select3D_InteriorSensitivePointSet::GetPoints()
+##########################################################################################
+
+pload VISUALIZATION XDE
+
+testreadiges [locate_data_file bug25747_pencil.igs] aPencil
+
+vinit View1
+vclear
+vdefaults -autoTriang 0
+vdisplay aPencil
+vsetdispmode 1
+vfit
+
+# create a connected interactive
+vconnectto aCopy 50 50 50 aPencil
+vfit
+
+# check that selection primitives for connected object were created successfully
+vmoveto 220 133
+checkcolor 220 133 0 1 1
+
+vdump ${imagedir}/${casename}.png