Macro Perpendicular To Wire

From FreeCAD Documentation
Revision as of 13:32, 24 May 2020 by David69 (talk | contribs) (Created page with "Ver 00.03 2020-03-21: Corrections de fautes dans le code source et de commentaires Ver 00.02 2019-04-06 : Python 3")
Other languages:

Macro Perpendicular To Wire

Description
Cette macro positionne un objet perpendiculairement au fil sélectionné.

Version macro : 00.03
Date dernière modification : 2020-03-31
Version FreeCAD : Tous
Téléchargement : ToolBar Icon
Auteur: Mario52
Auteur
Mario52
Téléchargement
ToolBar Icon
Liens
Version Macro
00.03
Dernière modification
2020-03-31
Version(s) FreeCAD
Tous
Raccourci clavier
None
Voir aussi
None

Description

Cette macro place l'objet sélectionné perpendiculairement au fil sélectionné.

Utilisation

  1. Installez la macro via Gestionnaire d'Addon
  2. Sélectionnez le chemin (peut être un élément ou un sous-élément)
  3. Sélectionnez l'objet à aligner
  4. Exécuter la macro

Script

L'icône de la macro dans la barre d'outils:

Macro Perpendicular To Wire.FCMacro

# -*- coding: utf-8 -*-
__title__   = "Macro Perpendicular To Wire"
__author__  = "Mario52"
__url__     = "https://wiki.freecadweb.org/Macro_Perpendicular_To_Wire"
__version__ = "00.03"
__date__    = "31/03/2020"

import Draft, Part

try:
    sel = FreeCADGui.Selection.getSelection()                               # Select an object
    
    lineSelected = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0]   # first object the Path object or SubObjects
    myCircle     = sel[1]                                                   # second object
    
    pointsDirection  = []
    
    pointsDirection = lineSelected.discretize(Number=500)                   # discretize the path line first selection
    
    v=pointsDirection[0].sub(pointsDirection[1])                            # avec vecteurs 1 et 2 (direction debut ligne)
    r=App.Rotation(App.Vector(0,0,1),v)
    
    pl=FreeCAD.Placement()                                                  # placement object
    pl.Rotation.Q = r.Q
    pl.Base = pointsDirection[0]
    myCircle.Placement = pl
    
    del pointsDirection[:]
    FreeCAD.ActiveDocument.recompute()
except Exception:
    print( "Select two objects. 1:The path 2:The object to align" )

Options

Essentiellement, la ligne est coupée en x points avec discretize() (pour nos besoins, nous utilisons par défaut Number=500 mais les coupes peuvent être modulées entre 0 et 499)

pointsDirection = lineSelected.Shape.discretize(Number=500)             # discretize the path line first selection

1. La perpendicularité est calculée entre 2 points:

v=pointsDirection[0].sub(pointsDirection[1])          # perpendicular of first > second point

2:

v=pointsDirection[-1].sub(pointsDirection[-2])       # perpendicular of last > before last point
pl.Base = pointsDirection[-1]                        # position base last point

3:

v=pointsDirection[100].sub(pointsDirection[101])   # perpendicular of point 100 > point 101
pl.Base = pointsDirection[100]                     # position base point 100

4:

v=pointsDirection[0].sub(pointsDirection[-1])         # perpendicular of first point > last point
pl.Base = pointsDirection[0]                          # position base first point

Les autres paramètres de discretize() sont les suivants:

# Discretizes the edge and returns a list of points.
# Forum thread: http://forum.freecadweb.org/viewtopic.php?f=12&t=16336#p129468
# The function accepts keywords as argument:
# discretize(Number=n) => gives a list of 'n' equidistant points
# discretize(QuasiNumber=n) => gives a list of 'n' quasi equidistant points (is faster than the method above)
# discretize(Distance=d) => gives a list of equidistant points with distance 'd'
# discretize(Deflection=d) => gives a list of points with a maximum deflection 'd' to the edge
# discretize(QuasiDeflection=d) => gives a list of points with a maximum deflection 'd' to the edge (faster)
# discretize(Angular=a,Curvature=c,[Minimum=m]) => gives a list of points with an angular deflection of 'a'
# and a curvature deflection of 'c'. Optionally a minimum number of points
# can be set which by default is set to 2.

Exemples



Discussions

Version

Ver 00.03 2020-03-21: Corrections de fautes dans le code source et de commentaires Ver 00.02 2019-04-06 : Python 3