Macro Stairs

From FreeCAD Documentation
Revision as of 17:27, 22 March 2015 by Mario52 (talk | contribs) (Created page with "==Description== Crée un escalier en suivant une hélice.")

File:Text-x-python Macro Stairs

Description
Crée un escalier en suivant une hélice.

Auteur: Mario52
Auteur
Mario52
Téléchargement
None
Liens
Version Macro
1.0
Dernière modification
None
Version(s) FreeCAD
None
Raccourci clavier
None
Voir aussi
None

Description

Crée un escalier en suivant une hélice.

Use

Create your stair nosing, select your object and launch the macro

  • Hmarche  : head marche
  • nombre  : number objects for 1 turn
  • rayon  : radius (axe to object)
  • tours  : nomber turns pitch
  • cloner  : 1=create clone 0=create copy
  • cylindre : 1=create cylinder 0=not cylinder

Script

Macro_Stairs.FCMacro

# Select your object(s) give :
#     head marche
#     number objects for 1 turn
#     radius (axe to object)
#     number turns
# the original object is not modify
# Macro_Stairs.FCMacro

import FreeCAD, Draft, Part

__title__   = "CircularStair"
__author__  = "Mario52"
__date__    = "01/03/2015"
__url__     = "http://www.freecadweb.org/index-fr.html"
__version__ = "00.03"

sel = FreeCADGui.Selection.getSelection()

############## Modify here ####################
Hmarche  = 10  # head marche
nombre   = 18  # number objects for 1 turn
rayon    = 20  # radius (axe to object)
tours    = 5  # nomber turns pitch 
cloner   = 1   # 1=clone    0=copy
cylindre = 1   # 1=create cylinder  0=not cylinder
###############################################

vecligne=[FreeCAD.Vector(0.0,0.0,0.0),FreeCAD.Vector(rayon,0.0,0.0)]   # vector for line directrice
ligne = Draft.makeWire(vecligne,closed=False,face=False,support=None)  # creation de la ligne de base
coor_X = coor_Y = coor_Z = 0.0
for i0 in range(tours):
    for i in range(0,360,((360/nombre))):                                  # boucle principale 0 to 360 degrees
        FreeCAD.ActiveDocument.getObject(ligne.Name).Placement=App.Placement(App.Vector(0,0,coor_Z), App.Rotation(App.Vector(0,0,1),i), App.Vector(0,0,0))
        a = ligne.Shape.Edges[0].Vertexes[1]                               # fin de la ligne
        coor_X = (a.Point.x)
        coor_Y = (a.Point.y)

        if cloner == 1:
            obj=Draft.clone(sel)
        else:
            obj = Draft.scale(sel,delta=App.Vector(1, 1, 1),center=App.Vector(),copy=True,legacy=True)
        try:
            for io in range(len(obj)):
                obj[io].Placement=App.Placement(App.Vector(coor_X,coor_Y,coor_Z), App.Rotation(i,0,0), App.Vector(0,0,0))
        except Exception:
            obj.Placement=App.Placement(App.Vector(coor_X,coor_Y,coor_Z), App.Rotation(i,0,0), App.Vector(0,0,0))

        coor_Z += Hmarche
App.ActiveDocument.removeObject(ligne.Name)                            # remove ligne de base directrice

# create cylinder
if cylindre == 1:
    App.ActiveDocument.addObject("Part::Cylinder","Cylinder")
    App.ActiveDocument.ActiveObject.Label = "Cylindre"
    FreeCAD.ActiveDocument.ActiveObject.Height = (Hmarche * nombre * tours)    # heigth of cylinder
    FreeCAD.ActiveDocument.ActiveObject.Radius = (rayon)                       # radius of cylinder

FreeCAD.ActiveDocument.recompute()

Links

The discussion on the forum Newbie question - spiral staris reloaded

Other languages: