Makro Doppelte Materialien zusammenführen
Appearance
| 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 |
| Makros Rezepte Wie man Makros installiert Symbolleisten anpassen |
| 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
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")
