FreeCAD-macros
130 строк · 4.8 Кб
1# -*- coding: utf-8 -*-
2# (c) 18Turbo, 2022
3
4__Name__ = 'GroupSorting (Ordenación)'
5__Comment__ = 'The macro sorts the groups and pieces of a piece.\nSelect groups with <CTRL> key, and execute the macro.'
6__Author__ = '18Turbo'
7__Version__ = '0.1.0'
8__Date__ = '2022-10-04'
9__License__ = 'LGPL-2.0-or-later'
10__Web__ = 'https://github.com/18turbo/OrdenacionRapidaFreeCAD'
11__Wiki__ = 'https://github.com/18turbo/OrdenacionRapidaFreeCAD'
12__Icon__ = 'GroupSorting.svg'
13__Help__ = ''
14__Status__ = 'beta'
15__Requires__ = 'FreeCAD >= v0.20'
16__Contact__ = 'https://github.com/18turbo'
17__Communication__ = ''
18__Files__ = 'GroupSorting.svg'
19
20
21# (Spanish:)
22#
23# Autor: 18Turbo
24# Fecha Incial: 22-07-2022
25# Versión: 0.1.0 BETA
26#
27# Funcionalidad: Ordena grupos según sean seleccionados.
28#
29# Notas Importantes: hay que saber que los grupos sin padre tienen un orden específico en FreeCAD y no se pueden ordenar con este script
30# porque aunque se hace el proceso correcto, FreeCAD no permite la ordenación de estos de una forma simple y escapa
31# a los propósitos de este script.
32#
33#
34# Notas de versiones:
35# v.0.1.0: Adaptación al Addon Manager
36# v.0.0.5: Depurado para que funcione con grupos sin padre, es decir, con el documento como padre, aunque FreeCAD no lo permita. Así,
37# si en una versión superior se permite, el script no hay que modificarlo.
38# v.0.0.4: Versión Alfa funcional.
39#
40#
41#
42
43import FreeCAD as app
44import FreeCADGui as gui
45
46cIntro = '\n'
47
48strLang = [
49[ # Español
50## Strings for translation into any language
51"Los grupos no tienen un padre y FreeCAD no permite la ordenación en este nivel",
52"Debes seleccionar Grupos con el mismo padre",
53"Debes elegir más de un objeto"
54
55],
56[ # English
57## Strings for translation into any language (English Strings)
58"Groups do not have a parent and FreeCAD does not allow sorting at this level",
59"You must select Groups with the same parent",
60"You must choose more than one object"
61
62]
63]
64
65def tr(text):
66# Translate
67if (text not in strLang[0]) or (g_num_lang < 0) or (g_num_lang >= len(strLang)):
68return text
69primerIdioma = strLang[0]
70indice = primerIdioma.index(text)
71if (indice == -1) or (indice >= len(strLang[g_num_lang])):
72return text
73return strLang[g_num_lang][indice]
74
75
76lang = gui.getLocale()
77# Default to English.
78g_num_lang = 1
79if 'Spanish' in lang:
80g_num_lang = 0
81#elif 'Italian' in lang:
82# g_num_lang = 2
83
84objetosSeleccionados = Gui.Selection.getSelection()
85
86if len(objetosSeleccionados) > 1:
87# Comprobando que todos tienen el mismo padre, siempre que no partan de la raíz del documento
88distintoPadre = False
89padre = ""
90if app.ActiveDocument.getObject(objetosSeleccionados[0].Name).InList: # Esto es que tiene padre
91tienePadre = True
92for objeto in objetosSeleccionados:
93if (app.ActiveDocument.getObject(objeto.Name).InList[0].Name != padre):
94if (padre == ""):
95padre = app.ActiveDocument.getObject(objeto.Name).InList[0].Name
96else:
97distintoPadre = True
98break;
99else:
100tienePadre = False
101for objeto in objetosSeleccionados:
102if (app.ActiveDocument.getObject(objeto.Name).InList):
103distintoPadre = True
104app.Console.PrintWarning(tr("Los grupos no tienen un padre y FreeCAD no permite la ordenación en este nivel") + cIntro)
105
106if not distintoPadre:
107if tienePadre:
108nombrePadre = app.ActiveDocument.getObject(objeto.Name).InList[0].Name
109
110listaNombres = []
111app.activeDocument().Tip = app.activeDocument().addObject('App::DocumentObjectGroup','GrupoAuxiliarOrdenacion')
112
113for objetoA in objetosSeleccionados:
114# Siempre que el objeto sea un grupo
115if (objetoA.Name.find('Group') > -1) or (objetoA.Name.find('Part') > -1):
116app.ActiveDocument.getObject(objetoA.Name).removeObject(app.ActiveDocument.getObject(objetoA.Name))
117app.ActiveDocument.getObject("GroupAuxSorting18T").addObject(app.ActiveDocument.getObject(objetoA.Name))
118listaNombres.append(objetoA.Name)
119
120for nombreObjeto in listaNombres:
121app.ActiveDocument.getObject("GroupAuxSorting18T").removeObject(app.ActiveDocument.getObject(nombreObjeto))
122if tienePadre:
123app.ActiveDocument.getObject(nombrePadre).addObject(app.ActiveDocument.getObject(nombreObjeto))
124
125app.activeDocument().removeObject("GroupAuxSorting18T")
126app.activeDocument().recompute()
127else:
128app.Console.PrintWarning(tr("Debes seleccionar Grupos con el mismo padre") + cIntro)
129else:
130app.Console.PrintWarning(tr("Debes elegir más de un objeto") + cIntro)