Macro Rectellipse/es: Difference between revisions
m (Created page with "Crea una rectelipse paramétrica") |
(Updating to match new version of source page) |
||
Line 2: | Line 2: | ||
Crea una rectelipse paramétrica |
Crea una rectelipse paramétrica |
||
[[File:Rectellipse.png]] |
|||
{{clear}} |
{{clear}} |
||
<syntaxhighlight> |
|||
<syntaxhighlight> from __future__ import division # allows floating point division from integers |
|||
from __future__ import division # allows floating point division from integers |
|||
import FreeCAD, Part, math |
|||
import FreeCAD, Part, math |
|||
from FreeCAD import Base |
|||
class RectEllipseShape: |
|||
def __init__(self, obj): |
|||
''' Add the properties: Radius, Eccentricity, Height, Segments (see Property View) ''' |
|||
obj.addProperty("App::PropertyLength","a","Rectellipse","A - horizontal radius").a = 16.0 |
|||
obj.addProperty("App::PropertyLength","b","Rectellipse","B - vertical radius").b = 9.0 |
|||
obj.addProperty("App::PropertyFloat","n","Rectellipse","N ").n=0.2 |
|||
obj.addProperty("App::PropertyBool","createFace","Rectellipse","Wheter to create a face or not").createFace=True |
|||
obj.Proxy = self |
|||
def onChanged(self, fp, prop): |
|||
if prop == "a" or prop == "b" or prop == "n" or prop == "segments" or prop == "height" or prop == "createFace": |
|||
#if one of these is changed |
|||
self.execute(fp) |
|||
def execute(self, fp): |
|||
class RectEllipseShape: |
|||
r1=fp.a |
|||
def __init__(self, obj): |
|||
r2=fp.b |
|||
''' Add the properties: Radius, Eccentricity, Height, Segments (see Property View) ''' |
|||
s=fp.n |
|||
obj.addProperty("App::PropertyLength","a","Rectellipse","A - horizontal radius").a = 16.0 |
|||
z=0.0 |
|||
obj.addProperty("App::PropertyLength","b","Rectellipse","B - vertical radius").b = 9.0 |
|||
p=1.0 |
|||
obj.addProperty("App::PropertyFloat","n","Rectellipse","N ").n=0.2 |
|||
####w=2**0.5/2.0 #Ellipse |
|||
obj.addProperty("App::PropertyBool","createFace","Rectellipse","Wheter to create a face or not").createFace=True |
|||
w=2**0.5/2.0/(1-s**p) |
|||
obj.Proxy = self |
|||
curve=Part.BSplineCurve() |
|||
curve.setPeriodic() |
|||
curve.increaseDegree(2) #quadratic |
|||
curve.insertKnots([i*1.0/(4) for i in (1,2,3)],[2]*(3)) #5Knots 8 Poles |
|||
curve.setPole(1,FreeCAD.Vector(0,-r2,z),1) |
|||
curve.setPole(2,FreeCAD.Vector(-r1,-r2,z),w) |
|||
curve.setPole(3,FreeCAD.Vector(-r1,0,z),1) |
|||
curve.setPole(4,FreeCAD.Vector(-r1,r2,z),w) |
|||
curve.setPole(5,FreeCAD.Vector(0,r2,z),1) |
|||
curve.setPole(6,FreeCAD.Vector(r1,r2,z),w) |
|||
curve.setPole(7,FreeCAD.Vector(r1,0,z),1) |
|||
curve.setPole(8,FreeCAD.Vector(r1,-r2,z),w) |
|||
if fp.createFace == True: |
|||
fp.Shape = Part.Face(Part.Wire(curve.toShape())) |
|||
else: |
|||
fp.Shape = curve.toShape() |
|||
def makeRectellipseBlock(): |
|||
def onChanged(self, fp, prop): |
|||
doc = FreeCAD.activeDocument() |
|||
if prop == "a" or prop == "b" or prop == "n" or prop == "segments" or prop == "height" or prop == "createFace": |
|||
if doc == None: |
|||
#if one of these is changed |
|||
doc = FreeCAD.newDocument() |
|||
obj=doc.addObject("Part::FeaturePython","RectEllipseShape") #add object to document |
|||
obj.Label = "RectEllipsse" |
|||
RectEllipseShape(obj) |
|||
obj.ViewObject.Proxy=0 |
|||
viewObject = Gui.ActiveDocument.getObject(obj.Name) |
|||
viewObject.ShapeColor = (0.00,0.33,1.00) |
|||
viewObject.DisplayMode = "Flat Lines" |
|||
obj.Shape.check() |
|||
if __name__ == "__main__": |
|||
def execute(self, fp): |
|||
#feature will be generated after macro execution |
|||
r1=fp.a |
|||
makeRectellipseBlock() |
|||
r2=fp.b |
|||
s=fp.n |
|||
####w=2**0.5/2.0 #Ellipse |
|||
w=2**0.5/2.0/(1-s) |
|||
curve=Part.BSplineCurve() |
|||
curve.setPeriodic() |
|||
curve.increaseDegree(2) #quadratic |
|||
curve.insertKnots([i*1.0/(4) for i in (1,2,3)],[2]*(3)) #5Knots 8 Poles |
|||
curve.setPole(1,FreeCAD.Vector(0,-r2,z),1) |
|||
curve.setPole(2,FreeCAD.Vector(-r1,-r2,z),w) |
|||
curve.setPole(3,FreeCAD.Vector(-r1,0,z),1) |
|||
curve.setPole(4,FreeCAD.Vector(-r1,r2,z),w) |
|||
curve.setPole(5,FreeCAD.Vector(0,r2,z),1) |
|||
curve.setPole(6,FreeCAD.Vector(r1,r2,z),w) |
|||
curve.setPole(7,FreeCAD.Vector(r1,0,z),1) |
|||
curve.setPole(8,FreeCAD.Vector(r1,-r2,z),w) |
|||
if fp.createFace == True: |
|||
fp.Shape = Part.Face(Part.Wire(curve.toShape())) |
|||
else: |
|||
fp.Shape = curve.toShape() |
|||
def makeRectellipseBlock(): |
|||
doc = FreeCAD.activeDocument() |
|||
if doc == None: |
|||
doc = FreeCAD.newDocument() |
|||
obj=doc.addObject("Part::FeaturePython","RectEllipseShape") #add object to document |
|||
obj.Label = "RectEllipsse" |
|||
RectEllipseShape(obj) |
|||
obj.ViewObject.Proxy=0 |
|||
viewObject = Gui.ActiveDocument.getObject(obj.Name) |
|||
viewObject.ShapeColor = (0.00,0.33,1.00) |
|||
viewObject.DisplayMode = "Flat Lines" |
|||
doc.recompute() |
|||
if __name__ == "__main__": |
|||
#feature will be generated after macro execution |
|||
makeRectellipseBlock() |
|||
</syntaxhighlight> |
</syntaxhighlight> |
Revision as of 12:49, 4 May 2014
File:Text-x-python Rectellipse Macro |
Descripción |
---|
Crea una rectelipse paramétrica Autor : fcaponi78 |
Autor |
fcaponi78 |
Descargar |
None |
Enlace |
Macros recipes How to install macros How to customize toolbars |
Versión Macro |
1.0 |
Fecha última modificación |
None |
Versión(es) FreeCAD |
None |
Acceso directo predeterminado |
None |
Ver también |
None |
Crea una rectelipse paramétrica
from __future__ import division # allows floating point division from integers
import FreeCAD, Part, math
from FreeCAD import Base
class RectEllipseShape:
def __init__(self, obj):
''' Add the properties: Radius, Eccentricity, Height, Segments (see Property View) '''
obj.addProperty("App::PropertyLength","a","Rectellipse","A - horizontal radius").a = 16.0
obj.addProperty("App::PropertyLength","b","Rectellipse","B - vertical radius").b = 9.0
obj.addProperty("App::PropertyFloat","n","Rectellipse","N ").n=0.2
obj.addProperty("App::PropertyBool","createFace","Rectellipse","Wheter to create a face or not").createFace=True
obj.Proxy = self
def onChanged(self, fp, prop):
if prop == "a" or prop == "b" or prop == "n" or prop == "segments" or prop == "height" or prop == "createFace":
#if one of these is changed
self.execute(fp)
def execute(self, fp):
r1=fp.a
r2=fp.b
s=fp.n
z=0.0
p=1.0
####w=2**0.5/2.0 #Ellipse
w=2**0.5/2.0/(1-s**p)
curve=Part.BSplineCurve()
curve.setPeriodic()
curve.increaseDegree(2) #quadratic
curve.insertKnots([i*1.0/(4) for i in (1,2,3)],[2]*(3)) #5Knots 8 Poles
curve.setPole(1,FreeCAD.Vector(0,-r2,z),1)
curve.setPole(2,FreeCAD.Vector(-r1,-r2,z),w)
curve.setPole(3,FreeCAD.Vector(-r1,0,z),1)
curve.setPole(4,FreeCAD.Vector(-r1,r2,z),w)
curve.setPole(5,FreeCAD.Vector(0,r2,z),1)
curve.setPole(6,FreeCAD.Vector(r1,r2,z),w)
curve.setPole(7,FreeCAD.Vector(r1,0,z),1)
curve.setPole(8,FreeCAD.Vector(r1,-r2,z),w)
if fp.createFace == True:
fp.Shape = Part.Face(Part.Wire(curve.toShape()))
else:
fp.Shape = curve.toShape()
def makeRectellipseBlock():
doc = FreeCAD.activeDocument()
if doc == None:
doc = FreeCAD.newDocument()
obj=doc.addObject("Part::FeaturePython","RectEllipseShape") #add object to document
obj.Label = "RectEllipsse"
RectEllipseShape(obj)
obj.ViewObject.Proxy=0
viewObject = Gui.ActiveDocument.getObject(obj.Name)
viewObject.ShapeColor = (0.00,0.33,1.00)
viewObject.DisplayMode = "Flat Lines"
obj.Shape.check()
if __name__ == "__main__":
#feature will be generated after macro execution
makeRectellipseBlock()