Jump to content

Makro Doppelte Materialien zusammenführen

From FreeCAD Documentation
This page is a translated version of the page Macro merge duplicate materials and the translation is 100% complete.

Doppelte Materialien zusammenführen

Beschreibung
Führt Materialien mit demselben Basisnamen (mit unterschiedlichen numerischen Endungen wie 001, 002, ...) zu einem einzigen zusammen. Nur das erste Material wird beibehalten, und alle Objekte, die mit den Duplikaten verknüpft sind, werden stattdessen mit dem ersten Material verknüpft. Bevor dieses Makro verwendet wird, sicherstellen, dass das erste Material (entweder das ohne numerische Endung oder das mit der niedrigsten Nummer) das richtige ist.

Versionsmakro : 2.0
Datum der letzten Änderung : 2019-07-12
FreeCAD version : Alle
Herunterladen : Werkzeugleisten-Symbol
Autor: yorik
Autor
yorik
Herunterladen
Werkzeugleisten-Symbol
Links
Macro-Version
2.0
Datum der letzten Änderung
2019-07-12
FreeCAD-Version(s)
Alle
Standardverknüpfung
None
Siehe auch
None

Beschreibung

Führt Materialien mit demselben Basisnamen (mit unterschiedlichen numerischen Endungen wie 001, 002, ...) zu einem einzigen zusammen. Nur das erste Material wird beibehalten, und alle Objekte, die mit den Duplikaten verknüpft sind, werden stattdessen mit dem ersten Material verknüpft. Bevor Sie dieses Makro verwenden, stellen Sie daher sicher, dass Ihr erstes Material (entweder das ohne numerische Endung oder das mit der niedrigsten Nummer) das richtige ist.

Skript

Werkzeugleisten-Symbol

Merge duplicate materials.FCMacro

import FreeCAD,FreeCADGui
mats = [o for o in FreeCAD.ActiveDocument.Objects if o.isDerivedFrom("App::MaterialObject")]
todelete = []
for mat in mats:
    if mat.Label[-1].isdigit() and mat.Label[-2].isdigit() and mat.Label[-3].isdigit():
        orig = None
        for om in mats:
            if om.Label == mat.Label[:-3].strip():
                orig = om
                break
        if orig:
            for par in mat.InList:
                for prop in par.PropertiesList:
                    if getattr(par,prop) == mat:
                        print( "Changed property '"+prop+"' of object "+par.Label+" from "+mat.Label+" to "+orig.Label)
                        setattr(par,prop,orig)
            todelete.append(mat)
for tod in todelete:
    if not tod.InList:
        print( "Deleting material "+tod.Label)
        FreeCAD.ActiveDocument.removeObject(tod.Name)
    elif (len(tod.InList) == 1) and (tod.InList[0].isDerivedFrom("App::DocumentObjectGroup")):
        print( "Deleting material "+tod.Label)
        FreeCAD.ActiveDocument.removeObject(tod.Name)
    else:
        print( "Unable to delete material "+tod.Label+": InList not empty")