From 9540cf0bbdc3ef4af8d2b382f0600da069864c6d Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Mon, 29 Mar 2021 13:59:03 -0500 Subject: [PATCH] [OpenSCAD] Add piecewise helix for OCCT < 7.5 Address a hang when using older versions of OCC to create a rotated extrusion. This approximates the auxilliary spine as set of line segments formed from the helix, rather than using the helix directly. --- src/Mod/OpenSCAD/OpenSCADFeatures.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Mod/OpenSCAD/OpenSCADFeatures.py b/src/Mod/OpenSCAD/OpenSCADFeatures.py index a8cf3a5506..a3b0b306a1 100644 --- a/src/Mod/OpenSCAD/OpenSCADFeatures.py +++ b/src/Mod/OpenSCAD/OpenSCADFeatures.py @@ -431,7 +431,17 @@ class Twist: left_handed = True else: left_handed = False + auxiliary_spine = Part.makeHelix(pitch, height, radius, 0.0, left_handed) + + # OCC versions before 7.5 had a problem with using a helix as the auxilliary spine, so approximate + # it piecewise + occ_version = Part.OCC_VERSION.split(".") + if int(occ_version[0]) <= 7 and int(occ_version[1]) < 5: + num_points = int(max(3,num_revolutions * 36)) # Every ten degrees is adequate + wire = auxiliary_spine.Wires[0] + points = wire.discretize(Number=num_points) + auxiliary_spine = Part.makePolygon(points) faces = [lower_face,upper_face] for wire1,wire2 in zip(lower_face.Wires,upper_face.Wires):