| | |
| | |
| |
|
| | """ |
| | An example for a high-level custom feature object to form a full-parametric distance bolt. |
| | """ |
| |
|
| | __author__ = "Werner Mayer <wmayer@users.sourceforge.net>" |
| |
|
| | import FreeCAD, Part, math |
| | from FreeCAD import Base |
| |
|
| |
|
| | class DistanceBolt: |
| | def __init__(self, obj): |
| | """Add the properties: Length, Edges, Radius, Height""" |
| | obj.addProperty( |
| | "App::PropertyInteger", "Edges", "Bolt", "Number of edges of the outline", locked=True |
| | ).Edges = 6 |
| | obj.addProperty( |
| | "App::PropertyLength", |
| | "Length", |
| | "Bolt", |
| | "Length of the edges of the outline", |
| | locked=True, |
| | ).Length = 10.0 |
| | obj.addProperty( |
| | "App::PropertyLength", "Radius", "Bolt", "Radius of the inner circle", locked=True |
| | ).Radius = 4.0 |
| | obj.addProperty( |
| | "App::PropertyLength", "Height", "Bolt", "Height of the extrusion", locked=True |
| | ).Height = 20.0 |
| | obj.Proxy = self |
| |
|
| | def onChanged(self, fp, prop): |
| | if prop == "Edges" or prop == "Length" or prop == "Radius" or prop == "Height": |
| | self.execute(fp) |
| |
|
| | def execute(self, fp): |
| | edges = fp.Edges |
| | if edges < 3: |
| | edges = 3 |
| | length = fp.Length |
| | radius = fp.Radius |
| | height = fp.Height |
| |
|
| | m = Base.Matrix() |
| | m.rotateZ(math.radians(360.0 / edges)) |
| |
|
| | |
| | polygon = [] |
| | v = Base.Vector(length, 0, 0) |
| | for i in range(edges): |
| | polygon.append(v) |
| | v = m.multiply(v) |
| | polygon.append(v) |
| | wire = Part.makePolygon(polygon) |
| |
|
| | |
| | circ = Part.makeCircle(radius) |
| |
|
| | |
| | face = Part.Face([wire, Part.Wire(circ)]) |
| |
|
| | |
| | extrude = face.extrude(Base.Vector(0, 0, height)) |
| | fp.Shape = extrude |
| |
|
| |
|
| | def makeDistanceBolt(): |
| | doc = FreeCAD.activeDocument() |
| | if doc is None: |
| | doc = FreeCAD.newDocument() |
| | bolt = doc.addObject("Part::FeaturePython", "Distance_Bolt") |
| | bolt.Label = "Distance bolt" |
| | DistanceBolt(bolt) |
| | bolt.ViewObject.Proxy = 0 |
| |
|