52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
#! python
|
|
# -*- coding: utf-8 -*-
|
|
# (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").Pitch=5.0
|
|
obj.addProperty("App::PropertyLength","Diameter","MySpring","Diameter of the helix").Diameter=6.0
|
|
obj.addProperty("App::PropertyLength","Height","MySpring","Height of the helix").Height=30.0
|
|
obj.addProperty("App::PropertyLength","BarDiameter","MySpring","Diameter of the bar").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=1 #change to 1 to make a solid
|
|
isFrenet=1
|
|
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()
|