Macro FlattenWire3Points/de

Linienzug abflachen mit drei Punkten

Beschreibung
Dieses Makro glättet Draft Linienzüge, die auf einer durch drei Punkte definierten Ebene nicht planar sind.

Um dieses Makro zu verwenden, wähle zunächst die ersten drei Knoten aus einem einzelnen Draft Linienzug.

Versionsmakro : 1.0
Datum der letzten Änderung : 2016-02-06
FreeCAD version : Alle
Herunterladen : Werkzeugleisten-Symbol
Autor: Yorik

Autor
Yorik
Herunterladen
Werkzeugleisten-Symbol
Links
Macro-Version
1.0
Datum der letzten Änderung
2016-02-06
FreeCAD-Version(s)
Alle
Standardverknüpfung
None
Siehe auch
None

Beschreibung

Dieses Makro glättet Draft-Linienzüge, die auf einer durch drei Punkte definierten Ebene nicht planar sind. Um dieses Makro zu verwenden, wählen Sie zunächst drei Eckpunkte aus einem einzelnen Draft Linienzug aus.

Skript

Werkzeugleisten-Symbol


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