Macro Perpendicular To Wire: Difference between revisions

From FreeCAD Documentation
m (grammar fixes + version bump)
m (some formatting but still not good enough.)
Line 70: Line 70:


<!--T:7-->
<!--T:7-->
Essentially the line is cut in x points with {{incode|discretize()}} (for our purposes we default to {{incode|Number&#61;500}} but cuts may be modfied between 0 to 499)
Principle :

<!--T:8-->
the line is cut in x points with "discretize()" (here Number=500 cuts begin 0 to 499 you can modify)
</translate>
</translate>


Line 81: Line 78:
<translate>
<translate>
<!--T:9-->
<!--T:9-->
the perpendicularity is calculate between 2 points modify :
1. The perpendicularity is calculated between 2 points:
</translate>
</translate>

1:

{{Code|code=
{{Code|code=
v=pointsDirection[0].sub(pointsDirection[1]) # perpendicular of first > second point
v=pointsDirection[0].sub(pointsDirection[1]) # perpendicular of first > second point
}}
}}


[[File:Macro Perpendicular To Wire 01.png ]]
:[[File:Macro Perpendicular To Wire 01.png]]
{{clear}}
{{clear}}
2:
2:
Line 98: Line 92:
pl.Base = pointsDirection[-1] # position base last point}}
pl.Base = pointsDirection[-1] # position base last point}}


[[File:Macro Perpendicular To Wire 02.png ]]
:[[File:Macro Perpendicular To Wire 02.png]]
{{clear}}
{{clear}}
3:
3:
Line 106: Line 100:
pl.Base = pointsDirection[100] # position base point 100}}
pl.Base = pointsDirection[100] # position base point 100}}


[[File:Macro Perpendicular To Wire 03.png ]]
:[[File:Macro Perpendicular To Wire 03.png]]
{{clear}}
{{clear}}
4:
4:
Line 114: Line 108:
pl.Base = pointsDirection[0] # position base first point}}
pl.Base = pointsDirection[0] # position base first point}}


[[File:Macro Perpendicular To Wire 04.png ]]
:[[File:Macro Perpendicular To Wire 04.png]]
{{clear}}
{{clear}}
<translate>
<translate>

==Example== <!--T:13-->
==Example== <!--T:13-->
</translate>
</translate>

Revision as of 18:23, 31 March 2020

Other languages:

Macro Perpendicular To Wire

Description
This macro positions an object perpendicularly to the selected wire.

Macro version: 00.03
Last modified: 2020-03-31
FreeCAD version: All
Download: ToolBar Icon.
Author: Mario52
Author
Mario52
Download
ToolBar Icon.
Links
Macro Version
00.03
Date last modified
2020-03-31
FreeCAD Version(s)
All
Default shortcut
None
See also
None

Description

This macro positions an object perpendicularly to the selected wire.

Usage

  1. Install the macro via the Addon Manager
  2. Select the path (may be an element or sub-element)
  3. Select the object to align
  4. Execute the macro

Script

The icon toolBar

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.02"
__date__    = "06/04/2019"

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

Essentially the line is cut in x points with discretize() (for our purposes we default to Number=500 but cuts may be modfied between 0 to 499)

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

1. The perpendicularity is calculated between 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

Example



for discretize other parameters

# 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.

Disussions

Version

Ver 00.03 2020-03-21: Source and comment typo fixes Ver 00.02 2019-04-06: Python 3