FreeCAD-macros

Форк
0
/
GroupSorting.FCMacro 
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

43
import FreeCAD as app
44
import FreeCADGui as gui
45

46
cIntro = '\n'
47

48
strLang = [
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

65
def tr(text):
66
    # Translate
67
    if (text not in strLang[0]) or (g_num_lang < 0) or (g_num_lang >= len(strLang)):
68
        return text
69
    primerIdioma = strLang[0]
70
    indice = primerIdioma.index(text)
71
    if (indice == -1) or (indice >= len(strLang[g_num_lang])):
72
        return text
73
    return strLang[g_num_lang][indice]
74

75

76
lang = gui.getLocale()
77
# Default to English.
78
g_num_lang = 1
79
if 'Spanish' in lang:
80
    g_num_lang = 0
81
#elif 'Italian' in lang:
82
#    g_num_lang = 2
83

84
objetosSeleccionados = Gui.Selection.getSelection()
85

86
if len(objetosSeleccionados) > 1:
87
    # Comprobando que todos tienen el mismo padre, siempre que no partan de la raíz del documento
88
    distintoPadre = False
89
    padre = ""
90
    if app.ActiveDocument.getObject(objetosSeleccionados[0].Name).InList: # Esto es que tiene padre
91
        tienePadre = True
92
        for objeto in objetosSeleccionados:
93
            if (app.ActiveDocument.getObject(objeto.Name).InList[0].Name != padre):
94
                if (padre == ""):
95
                    padre = app.ActiveDocument.getObject(objeto.Name).InList[0].Name
96
                else:
97
                    distintoPadre = True
98
                    break;
99
    else:
100
        tienePadre = False
101
        for objeto in objetosSeleccionados:
102
            if (app.ActiveDocument.getObject(objeto.Name).InList):
103
                distintoPadre = True
104
        app.Console.PrintWarning(tr("Los grupos no tienen un padre y FreeCAD no permite la ordenación en este nivel") + cIntro)
105

106
    if not distintoPadre:
107
        if tienePadre:
108
            nombrePadre = app.ActiveDocument.getObject(objeto.Name).InList[0].Name
109
         
110
        listaNombres = []
111
        app.activeDocument().Tip = app.activeDocument().addObject('App::DocumentObjectGroup','GrupoAuxiliarOrdenacion')
112

113
        for objetoA in objetosSeleccionados:
114
            # Siempre que el objeto sea un grupo
115
            if (objetoA.Name.find('Group') > -1) or (objetoA.Name.find('Part') > -1):
116
                app.ActiveDocument.getObject(objetoA.Name).removeObject(app.ActiveDocument.getObject(objetoA.Name))
117
                app.ActiveDocument.getObject("GroupAuxSorting18T").addObject(app.ActiveDocument.getObject(objetoA.Name))
118
                listaNombres.append(objetoA.Name) 
119

120
        for nombreObjeto in listaNombres:
121
            app.ActiveDocument.getObject("GroupAuxSorting18T").removeObject(app.ActiveDocument.getObject(nombreObjeto))
122
            if tienePadre:
123
                app.ActiveDocument.getObject(nombrePadre).addObject(app.ActiveDocument.getObject(nombreObjeto))
124

125
        app.activeDocument().removeObject("GroupAuxSorting18T")
126
        app.activeDocument().recompute()
127
    else:
128
        app.Console.PrintWarning(tr("Debes seleccionar Grupos con el mismo padre") + cIntro)
129
else:
130
    app.Console.PrintWarning(tr("Debes elegir más de un objeto") + cIntro)

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.