Macro FlattenWire3Points

From FreeCAD Documentation
Revision as of 10:47, 23 May 2020 by FuzzyBot (talk | contribs) (Updating to match new version of source page)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Other languages:

FlattenWire3Points

Description
Cette macro aplatit les fils (Wire) du projet qui ne sont pas plan à la médiane de leurs coordonnées z

Version macro : 1.0
Date dernière modification : 2016-02-06
Version FreeCAD : All
Téléchargement : ToolBar Icon
Auteur: Yorik
Auteur
Yorik
Téléchargement
ToolBar Icon
Liens
Version Macro
1.0
Dernière modification
2016-02-06
Version(s) FreeCAD
All
Raccourci clavier
None
Voir aussi
None

Description

Cette macro aplatit les fils qui ne sont pas planaires sur un plan défini par 3 points. Pour utiliser cette macro, sélectionnez les 3 premiers sommets d'un seul Draft Wire.

Script

ToolBar icon

Macro_FlattenWire3Points.FCMacro

import FreeCAD,FreeCADGui,Draft
 
 # check selection
 sel = FreeCADGui.Selection.getSelectionEx()
 ok = True
 if len(sel) != 1:
    FreeCAD.Console.PrintError("Please select 3 vertices from one Draft wire\n")
    ok = False
 sel = sel[0]
 if Draft.getType(sel.Object) not in ["Wire","BSpline"]:
    FreeCAD.Console.PrintError("Please select 3 vertices from one Draft wire\n")
    ok = False
 if len(sel.SubElementNames) != 3:
    FreeCAD.Console.PrintError("Please select 3 vertices from one Draft wire\n")
    ok = False
 for e in sel.SubElementNames:
    if not "Vertex" in e:
        FreeCAD.Console.PrintError("Please select 3 vertices from one Draft wire\n")
        ok = False
 
 if ok:
    # define a plane
    p1 = getattr(sel.Object.Shape,sel.SubElementNames[0]).Point
    p2 = getattr(sel.Object.Shape,sel.SubElementNames[1]).Point
    p3 = getattr(sel.Object.Shape,sel.SubElementNames[2]).Point
    p4 = p2.sub(p1).cross(p3.sub(p1))
    
    # project wire points
    points = []
    for p in sel.Object.Points:
        points.append(p.projectToPlane(p1,p4))
    sel.Object.Points = points