Download src/Mod/PartDesign/Scripts/DistanceBolt.py from AbdulElahGwaith/FreeCAD: direct link, hf CLI and curl.
- Browser
- Download file 2.26 kB
-
https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/src/Mod/PartDesign/Scripts/DistanceBolt.py
- Command line
-
hf download hf://AbdulElahGwaith/FreeCAD/src/Mod/PartDesign/Scripts/DistanceBolt.py
-
curl -L -o DistanceBolt.py https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/src/Mod/PartDesign/Scripts/DistanceBolt.py
2.26 kB
| #! python | |
| # (c) 2010 Werner Mayer LGPL | |
| """ | |
| 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)) | |
| # create polygon | |
| 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) | |
| # create circle | |
| circ = Part.makeCircle(radius) | |
| # Create the face with the polygon as outline and the circle as hole | |
| face = Part.Face([wire, Part.Wire(circ)]) | |
| # Extrude in z to create the final solid | |
| 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 | |