Macro PlacementAbsolufy/de

PlacementAbsolufy

Beschreibung
Dieses Makro setzt die Position aller Teilebehälter auf den Dokumentursprung zurück, wobei die absoluten Objektpositionen beibehalten werden.

Dieses Makro wurde hauptsächlich geschrieben, um die unvollständige Implementierung von Teilebehältern zu umgehen, die zu einer absoluten Positionsverschiebung führen kann, vor allem beim Exportieren von Teilen. Dies liegt daran, dass Teilebehälter ein lokales Koordinatensystem erstellen, das vom globalen Koordinatensystem verschoben werden kann. Dieses lokale Referenzsystem wird dann von nachfolgenden Objekten verwendet, aber von einigen Funktionen (z. B. Export) nicht korrekt verarbeitet.

Versionsmakro : 0.2
Datum der letzten Änderung : 2019-06-10
FreeCAD version : 0.17+
Herunterladen : Werkzeugleisten-Symbol
Autor: OpenBrain

Autor
OpenBrain
Herunterladen
Werkzeugleisten-Symbol
Links
Macro-Version
0.2
Datum der letzten Änderung
2019-06-10
FreeCAD-Version(s)
0.17+
Standardverknüpfung
None
Siehe auch
Makro StraightenObject

Beschreibung

Zusammenhang

Dieses Makro wurde hauptsächlich geschrieben, um die unvollständige Implementierung von Teilcontainern zu umgehen, die zu einer absoluten Positionsverschiebung führen kann, vor allem beim Exportieren von Teilen. Dies liegt daran, dass Teilcontainer ein lokales Koordinatensystem erstellen, das vom globalen Koordinatensystem verschoben werden kann. Dieses lokale Referenzsystem wird dann von nachfolgenden Objekten verwendet, aber von mehreren Funktionen (z. B. Export) nicht korrekt verarbeitet.

Anwendung

Funktional setzt das Makro die Platzierung der Part Container auf den globalen Ursprung zurück, wobei die absolute Position der Objekte beibehalten wird. Beachten Sie, dass das Makro „PlacementAbsolufy“ für das gesamte aktive Dokument gilt.

Um das Makro zu verwenden, führe es einfach aus, wenn das Dokument, auf das es angewendet werden soll, geöffnet ist.

Installation

Das Makro ist über Std AddonManager verfügbar. Der Code wird auf dieser Seite zur Verfügung gestellt, für den Fall, dass das Benutzersystem nicht über git-python verfügt. Obwohl es aktuell sein sollte, ist die neueste Version immer unter FreeCAD-macro FreeCAD-Makro-Verzeichnis verfügbar.

Für ausführlichere Erklärungen siehe Seite Wie man Makros installiert.

Skript

Werkzeugleistensymbol

Macro_PlacementAbsolufy.FCMacro

#!/usr/bin/python
#####################################
# Copyright (c) openBrain 2019
# Licensed under LGPL v2
#
# This macro will reset position of all part containers to document origin while keeping the absolute object positions
#
# Version history :
# *0.2 : some typo improvement + commenting for official PR
# *0.1 : alpha release, almost no test performed
#
#####################################

__Name__ = 'PlacementAbsolufy'
__Comment__ = 'Reset part containers to global origin while keeping object positions'
__Author__ = 'openBrain'
__Version__ = '0.2'
__Date__ = '2019-06-10'
__License__ = 'LGPL v2'
__Web__ = 'https://wiki.freecad.org/Macro_PlacementAbsolufy'
__Wiki__ = 'https://wiki.freecad.org/Macro_PlacementAbsolufy'
__Icon__ = ''
__Help__ = 'Run the macro with model active in the GUI'
__Status__ = 'Alpha'
__Requires__ = 'FreeCAD >= 0.17'
__Communication__ = 'https://forum.freecad.org/viewtopic.php?f=3&t=36869'
__Files__ = ''

currState = {} #initialize a dictionary to store current object placements

for obj in App.ActiveDocument.Objects: #going through active document objects
    if "Placement" in obj.PropertiesList: #if object has a Placement property
        currState[obj] = obj.getGlobalPlacement() #store the object pointer with its global placement

App.ActiveDocument.openTransaction("Absolufy") #open a transaction for undo management

for obj, plac in currState.items(): #going through all moveable objects
    if obj.isDerivedFrom("App::Part"): #if object is a part container
        obj.Placement = App.Placement(App.Vector(0,0,0),App.Rotation(0,0,0)) #reset its placement to global document origin
    elif obj.TypeId[:5] == "App::": #if object is another App type (typically an origin axis or plane)
        None #do nothing
    else: #for all other objects
        obj.Placement = plac #replace them at their global (absolute) placement

App.ActiveDocument.commitTransaction() #commit transaction

Einschränkungen

Forums-Diskussion

Für jegliches Feedback (Fehler, Funktionswünsche, Kommentare usw.) nutze bitte diesen Forum-Faden: Preserving global position of Parts during export