Part/Toponaming: align TopoShape::findSubShapesWithSharedVertex() to LS3

* added test for issue #15539

Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
This commit is contained in:
CalligaroV
2024-08-04 15:02:08 +02:00
committed by sliptonic
parent e632919756
commit 14efdadd91

View File

@@ -468,6 +468,64 @@ class PartTestRuledSurface(unittest.TestCase):
self.assertEqual(len(same1), 2)
self.assertEqual(len(same2), 2)
def testRuledSurfaceFromTwoObjectsWithSharedVertexs(self):
"""Test reproducing issue #15539"""
# Arrange
line = Part.makeLine(FreeCAD.Vector(0, 0, 50), FreeCAD.Vector(0, -50, 0))
line1 = Part.makeLine(FreeCAD.Vector(0, 0, 50), FreeCAD.Vector(50, 0, 0))
line2 = Part.makeLine(FreeCAD.Vector(0, 0, 0), FreeCAD.Vector(0, -50, 0))
line3 = Part.makeLine(FreeCAD.Vector(0, 0, 0), FreeCAD.Vector(50, 0, 0))
fea = self.Doc.addObject("Part::Feature")
fea1 = self.Doc.addObject("Part::Feature")
fea2 = self.Doc.addObject("Part::Feature")
fea3 = self.Doc.addObject("Part::Feature")
fea.Shape = line
fea1.Shape = line1
fea2.Shape = line2
fea3.Shape = line3
# Defining all the surfaces generated by 2 lines with one common vertex
ruled = self.Doc.addObject("Part::RuledSurface")
ruled.Curve1 = fea
ruled.Curve2 = fea1
ruled1 = self.Doc.addObject("Part::RuledSurface")
ruled1.Curve1 = fea1
ruled1.Curve2 = fea3
ruled2 = self.Doc.addObject("Part::RuledSurface")
ruled2.Curve1 = fea2
ruled2.Curve2 = fea3
ruled3 = self.Doc.addObject("Part::RuledSurface")
ruled3.Curve1 = fea
ruled3.Curve2 = fea2
# Act
self.Doc.recompute()
# Assert
same00 = getCoincidentVertexes(fea.Shape.Vertexes, ruled.Shape.Vertexes)
same03 = getCoincidentVertexes(fea.Shape.Vertexes, ruled3.Shape.Vertexes)
same10 = getCoincidentVertexes(fea1.Shape.Vertexes, ruled.Shape.Vertexes)
same11 = getCoincidentVertexes(fea1.Shape.Vertexes, ruled1.Shape.Vertexes)
same22 = getCoincidentVertexes(fea2.Shape.Vertexes, ruled2.Shape.Vertexes)
same23 = getCoincidentVertexes(fea2.Shape.Vertexes, ruled3.Shape.Vertexes)
same31 = getCoincidentVertexes(fea3.Shape.Vertexes, ruled1.Shape.Vertexes)
same32 = getCoincidentVertexes(fea3.Shape.Vertexes, ruled2.Shape.Vertexes)
# BRepFill::Face() seems creating faces with 4 vertexes
# Therefore, in this case, every face shares 3 vertexes (1 counted twice as coincident) with the lines that generate that face
self.assertEqual(len(same00), 3)
self.assertEqual(len(same03), 3)
self.assertEqual(len(same10), 3)
self.assertEqual(len(same11), 3)
self.assertEqual(len(same22), 3)
self.assertEqual(len(same23), 3)
self.assertEqual(len(same31), 3)
self.assertEqual(len(same32), 3)
def testRuledSurfaceFromOneObject(self):
sketch = self.Doc.addObject('Sketcher::SketchObject', 'Sketch')
sketch.Placement = FreeCAD.Placement(FreeCAD.Vector(0.000000, 0.000000, 0.000000), App.Rotation(0.707107, 0.000000, 0.000000, 0.707107))