AbdulElahGwaith's picture
Upload folder using huggingface_hub
985c397 verified
#! python
# (c) 2011 Adrian Przekwas LGPL
from __future__ import division # allows floating point division from integers
import FreeCAD, Part
from FreeCAD import Base
class MySpring:
def __init__(self, obj):
"""Add the properties: Pitch, Diameter, Height, BarDiameter"""
obj.addProperty(
"App::PropertyLength", "Pitch", "MySpring", "Pitch of the helix", locked=True
).Pitch = 5.0
obj.addProperty(
"App::PropertyLength", "Diameter", "MySpring", "Diameter of the helix", locked=True
).Diameter = 6.0
obj.addProperty(
"App::PropertyLength", "Height", "MySpring", "Height of the helix", locked=True
).Height = 30.0
obj.addProperty(
"App::PropertyLength", "BarDiameter", "MySpring", "Diameter of the bar", locked=True
).BarDiameter = 3.0
obj.Proxy = self
def onChanged(self, fp, prop):
if prop == "Pitch" or prop == "Diameter" or prop == "Height" or prop == "BarDiameter":
self.execute(fp)
def execute(self, fp):
pitch = fp.Pitch
radius = fp.Diameter / 2
height = fp.Height
barradius = fp.BarDiameter / 2
myhelix = Part.makeHelix(pitch, height, radius)
g = myhelix.Edges[0].Curve
c = Part.Circle()
c.Center = g.value(0) # start point of the helix
c.Axis = (0, 1, 0)
c.Radius = barradius
p = c.toShape()
section = Part.Wire([p])
makeSolid = True
isFrenet = True
myspring = Part.Wire(myhelix).makePipeShell([section], makeSolid, isFrenet)
fp.Shape = myspring
def makeMySpring():
doc = FreeCAD.activeDocument()
if doc is None:
doc = FreeCAD.newDocument()
spring = doc.addObject("Part::FeaturePython", "My_Spring")
spring.Label = "My Spring"
MySpring(spring)
spring.ViewObject.Proxy = 0
doc.recompute()
if __name__ == "__main__":
makeMySpring()