Macro merge duplicate materials/it


Text-x-python.png Unisci materiali duplicati

Descrizione
Unisce i materiali che hanno lo stesso nome di base
Autore
yorik
Link
Esempi di macro
Come installare le Macro
Personalizzare la barra degli strumenti
Versione
1.0
Data ultima modifica
2017-04-16


Descrizione

Fonde i materiali che hanno lo stesso nome di base (con differenti terminazioni numerali come 001, 002, ...) in uno solo. Viene mantenuto solo il primo, e tutti gli oggetti che puntano ai duplicati sono invece indirizzati al primo. Quindi, prima di utilizzare questa macro, assicurarsi che il primo materiale sia quello giusto (sia quello senza finale numerico o con il numero piĆ¹ basso presente).

Script

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" 
Online version: "http://www.freecadweb.org/wiki/index.php?title=Macro_merge_duplicate_materials/it&oldid=241061"

Navigation menu