Macro Perpendicular To Wire: Difference between revisions
(version 0.01 modify for selec sub element for the path) |
m (date) |
||
Line 1: | Line 1: | ||
<translate> |
<translate> |
||
<!--T:1--> |
<!--T:1--> |
||
{{Macro|Icon= |
{{Macro|Icon=Macro Perpendicular To Wire|Name=Macro Perpendicular To Wire|Description=This macro positioned your object perpendicularly to wire selected.|Author=Mario52|Version=00.01 (29/01/2017)}} |
||
</translate> |
</translate> |
||
<translate> |
<translate> |
Revision as of 12:07, 30 January 2017
File:Macro Perpendicular To Wire Macro Perpendicular To Wire |
Description |
---|
This macro positioned your object perpendicularly to wire selected. Macro version: 00.01 (29/01/2017) Author: Mario52 |
Author |
Mario52 |
Download |
None |
Links |
Macros recipes How to install macros How to customize toolbars |
Macro Version |
00.01 (29/01/2017) |
Date last modified |
None |
FreeCAD Version(s) |
None |
Default shortcut |
None |
See also |
None |
Description
This macro positioned your object perpendicularly to wire selected.
Use
- : select the path (May be an element or sub-element)
- : select the object to align
- : run the macro
Script
Macro Perpendicular To Wire.FCMacro
# -*- coding: utf-8 -*-
__title__ = "Macro Perpendicular To Wire"
__author__ = "Mario52"
__url__ = "https://www.freecadweb.org/wiki/index.php?title=Macro_Perpendicular_To_Wire"
__version__ = "00.01"
__date__ = "29/01/2017"
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 twoo objects 1:The path 2:The objet to align"
Options
Principle :
the line is cut in x points with "discretize()" (here Number=500 cuts begin 0 to 499 you can modify)
pointsDirection = lineSelected.Shape.discretize(Number=500) # discretize the path line first selection
the perpendicularity is calculate between 2 points modify :
1:
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
for discretize other parameters
#http://forum.freecadweb.org/viewtopic.php?f=12&t=16336#p129468
#Discretizes the edge and returns a list of points.
#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.
The discussion on the forum [Spiralbohrer]