Macro Stairs/fr: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
Line 1: Line 1:
<languages/>
<languages/>
<div class="mw-translate-fuzzy">
{{Macro/fr
{{Macro/fr
|Name=Macro Stairs
|Name=Macro Stairs
Line 10: Line 11:
|Download=[https://www.freecadweb.org/wiki/images/a/a3/Macro_Stairs.png ToolBar Icon]
|Download=[https://www.freecadweb.org/wiki/images/a/a3/Macro_Stairs.png ToolBar Icon]
}}
}}
</div>


==Description==
==Description==
Line 19: Line 21:
Créez une marche réglez les paramètres dans la macro sélectionnez votre marche et lancez la macro.
Créez une marche réglez les paramètres dans la macro sélectionnez votre marche et lancez la macro.


<div class="mw-translate-fuzzy">
*'''Hmarche''' : hauteur entre les marches
*'''Hmarche''' : hauteur entre les marches
*'''nombre''' : nombre de marches sur un tour d'hélice
*'''nombre''' : nombre de marches sur un tour d'hélice
Line 25: Line 28:
*'''cloner''' : 1=crée un clone 0=crée une copie
*'''cloner''' : 1=crée un clone 0=crée une copie
*'''cylindre''' : 1=crée un cylindre 0=ne crée pas de cylindre
*'''cylindre''' : 1=crée un cylindre 0=ne crée pas de cylindre
</div>


==Script==
==Script==
Line 42: Line 46:
# Macro_Stairs.FCMacro
# Macro_Stairs.FCMacro
#
#
#01/03/2015
#01/03/2015 2019/07/24
import FreeCAD, Draft, Part
import FreeCAD, Draft, Part


__title__ = "CircularStair"
__title__ = "CircularStair"
__author__ = "Mario52"
__author__ = "Mario52"
__date__ = "2019/07/24"
__date__ = "2023/08/11"
__url__ = "http://www.freecadweb.org/index-fr.html"
__url__ = "http://www.freecadweb.org/index-fr.html"
__wiki__ = "https://www.freecadweb.org/wiki/Macro_Stairs"
__wiki__ = "https://www.freecadweb.org/wiki/Macro_Stairs"
__version__ = "00.04"
__version__ = "00.05"

sel = FreeCADGui.Selection.getSelection()


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


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,(int(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))
try:
a = ligne.Shape.Edges[0].Vertexes[1] # fin de la ligne
coor_X = (a.Point.x)
coor_Y = (a.Point.y)
except Exception:
a = ligne.End
coor_X = (ligne.End.x) # fin de la ligne X
coor_Y = (ligne.End.y) # fin de la ligne 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))


try:
coor_Z += Hmarche
sel = FreeCADGui.Selection.getSelection()[0]
App.ActiveDocument.removeObject(ligne.Name) # remove ligne de base directrice


vecligne=[FreeCAD.Vector(0.0,0.0,0.0),FreeCAD.Vector(rayon,0.0,0.0)] # vector for line directrice
# create cylinder
ligne = Draft.makeWire(vecligne,closed=False,face=False,support=None) # creation de la ligne de base
if cylindre == 1:
App.ActiveDocument.addObject("Part::Cylinder","Cylinder")
FreeCAD.ActiveDocument.openTransaction("Stair: Line") # memorise les actions (avec annuler restore)
App.ActiveDocument.ActiveObject.Label = "Cylindre"
FreeCAD.ActiveDocument.ActiveObject.Height = (Hmarche * nombre * tours) # heigth of cylinder
FreeCAD.ActiveDocument.ActiveObject.Radius = (rayon) # radius of cylinder


coor_X = coor_Y = coor_Z = 0.0
FreeCAD.ActiveDocument.recompute()
for i0 in range(tours):
for i in range(0,degres,(int(degres/nombre))): # boucle principale 0 to 360 degrees
FreeCAD.ActiveDocument.openTransaction("Stair:" + str(i0) + "/" + str(i)) # memorise les actions (avec annuler restore)


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))
try:
a = ligne.Shape.Edges[0].Vertexes[1] # fin de la ligne
coor_X = (a.Point.x)
coor_Y = (a.Point.y)
except Exception:
a = ligne.End
coor_X = (ligne.End.x) # fin de la ligne X
coor_Y = (ligne.End.y) # fin de la ligne 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:
FreeCAD.ActiveDocument.openTransaction("Stair: Cylinder") # memorise les actions (avec annuler restore)
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()
except Exception:
App.Console.PrintError(u"Select the stair treads")


}}
}}

Revision as of 19:06, 11 August 2023

Other languages:

Macro Stairs

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

Version macro : 00.04
Date dernière modification : 2019-07-24
Version FreeCAD : All
Téléchargement : ToolBar Icon
Auteur: Mario52
Auteur
Mario52
Téléchargement
ToolBar Icon
Liens
Version Macro
00.04
Dernière modification
2019-07-24
Version(s) FreeCAD
All
Raccourci clavier
None
Voir aussi
None

Description

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

Utilisation

Créez une marche réglez les paramètres dans la macro sélectionnez votre marche et lancez la macro.

  • Hmarche  : hauteur entre les marches
  • nombre  : nombre de marches sur un tour d'hélice
  • rayon  : rayon central (de l'axe au bord intérieur de l'escalier)
  • tours  : nombre tours
  • cloner  : 1=crée un clone 0=crée une copie
  • cylindre : 1=crée un cylindre 0=ne crée pas de cylindre

Script

ToolBar Icon

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
# 
#01/03/2015 2019/07/24
import FreeCAD, Draft, Part

__title__   = "CircularStair"
__author__  = "Mario52"
__date__    = "2023/08/11"
__url__     = "http://www.freecadweb.org/index-fr.html"
__wiki__    = "https://www.freecadweb.org/wiki/Macro_Stairs"
__version__ = "00.05"

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


try:
    sel = FreeCADGui.Selection.getSelection()[0]

    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
    FreeCAD.ActiveDocument.openTransaction("Stair: Line")    # memorise les actions (avec annuler restore)

    coor_X = coor_Y = coor_Z = 0.0
    for i0 in range(tours):
        for i in range(0,degres,(int(degres/nombre))):                                  # boucle principale 0 to 360 degrees
            FreeCAD.ActiveDocument.openTransaction("Stair:" + str(i0) + "/" + str(i))    # memorise les actions (avec annuler restore)

            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))
            try:
                a = ligne.Shape.Edges[0].Vertexes[1]       # fin de la ligne
                coor_X = (a.Point.x)
                coor_Y = (a.Point.y)
            except Exception:
                a = ligne.End         
                coor_X = (ligne.End.x)                      # fin de la ligne X
                coor_Y = (ligne.End.y)                      # fin de la ligne 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:
        FreeCAD.ActiveDocument.openTransaction("Stair: Cylinder")    # memorise les actions (avec annuler restore)
        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()
except Exception:
    App.Console.PrintError(u"Select the stair treads")

Lien

La discussion sur le forum Newbie question - spiral stairs reloaded