| |
|
| |
|
| |
|
| | from __future__ import division
|
| | 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)
|
| | 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()
|
| |
|