Macro Perpendicular To Wire/it

Perpendicolare a linea

Descrizione
Posiziona l'oggetto perpendicolarmente alla linea selezionata.
Versione 00.02 : 2019-04-06. Icona per la ToolBar: Icon.


Versione macro: 00.02
Ultima modifica: 2019-04-06
Versione FreeCAD: All
Download: ToolBar Icon
Autore: Mario52
Autore
Mario52
Download
ToolBar Icon
Link
Versione macro
00.02
Data ultima modifica
2019-04-06
Versioni di FreeCAD
All
Scorciatoia
Nessuna
Vedere anche
Nessuno

Descrizione

Posiziona l'oggetto perpendicolarmente alla linea selezionata.

Utilizzo

  1. Installare la macro tramite Addon Manager
  2. Selezionare il percorso (può essere un elemento o un sotto-elemento)
  3. Selezionare l'oggetto da allineare
  4. Eseguire la macro

Script

Icona della macro per la barra degli strumenti:

Macro Perpendicular To Wire.FCMacro

# -*- coding: utf-8 -*-
__title__   = "Macro Perpendicular To Wire"
__author__  = "Mario52"
__url__     = "https://wiki.freecad.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" )

Opzioni

In sostanza, la linea viene tagliata in x punti con discretize() (per questo scopo si utilizza come valore predefinito Number=500 ma i tagli possono essere modificati tra 0 e 499)

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

1. La perpendicolarità si calcola tra 2 punti:

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

Gli altri parametri per discretize() sono i seguenti:

# Discretizes the edge and returns a list of points.
# Forum thread: https://forum.freecad.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.

Esempio

Discussione

La discussione nel forum [Spiralbohrer]

Versione

Ver 00.03 2020-03-21: Correzioni di errori tipografici nella fonte e nei commenti Ver 00.02 2019-04-06: Python 3