""" Macro réalisée pour le logiciel FreeCAD Réalisée par UAICF Nevers-Vauzelles - section Modélisme www.modelisme58.fr Janvier 2025 """ import FreeCAD import FreeCADGui from PySide import QtGui, QtCore class TransparencyDialog(QtGui.QDialog): def __init__(self): super(TransparencyDialog, self).__init__() self.setupUI() def setupUI(self): self.setWindowTitle('Réglage des options A2plus') self.setMinimumWidth(400) layout = QtGui.QVBoxLayout(self) # Slider pour la transparence slider_layout = QtGui.QHBoxLayout() self.slider = QtGui.QSlider(QtCore.Qt.Horizontal) self.slider.setMinimum(0) self.slider.setMaximum(100) self.slider.setValue(0) self.slider.setTickPosition(QtGui.QSlider.TicksBelow) self.slider.setTickInterval(10) self.spinbox = QtGui.QSpinBox() self.spinbox.setMinimum(0) self.spinbox.setMaximum(100) self.spinbox.setValue(0) self.spinbox.setSuffix('%') self.slider.valueChanged.connect(self.spinbox.setValue) self.spinbox.valueChanged.connect(self.slider.setValue) slider_layout.addWidget(QtGui.QLabel('Transparence:')) slider_layout.addWidget(self.slider) slider_layout.addWidget(self.spinbox) # Groupes de boutons radio pour "Update Colors" group_layout_colors = QtGui.QVBoxLayout() self.radio_colors_group = QtGui.QButtonGroup() self.radio_colors_true = QtGui.QRadioButton("True") self.radio_colors_false = QtGui.QRadioButton("False") self.radio_colors_false.setChecked(True) self.radio_colors_group.addButton(self.radio_colors_true) self.radio_colors_group.addButton(self.radio_colors_false) group_layout_colors.addWidget(QtGui.QLabel("Définir 'Update Colors' :")) group_layout_colors.addWidget(self.radio_colors_true) group_layout_colors.addWidget(self.radio_colors_false) # Groupes de boutons radio pour "Fixed Position" group_layout_position = QtGui.QVBoxLayout() self.radio_position_group = QtGui.QButtonGroup() self.radio_position_true = QtGui.QRadioButton("True") self.radio_position_false = QtGui.QRadioButton("False") self.radio_position_no_change = QtGui.QRadioButton("Ne pas changer") self.radio_position_no_change.setChecked(True) self.radio_position_group.addButton(self.radio_position_true) self.radio_position_group.addButton(self.radio_position_false) self.radio_position_group.addButton(self.radio_position_no_change) group_layout_position.addWidget(QtGui.QLabel("Définir 'Fixed Position' :")) group_layout_position.addWidget(self.radio_position_true) group_layout_position.addWidget(self.radio_position_false) group_layout_position.addWidget(self.radio_position_no_change) # Boutons OK et Annuler buttons = QtGui.QDialogButtonBox( QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal) buttons.accepted.connect(self.apply_changes) buttons.rejected.connect(self.reject) layout.addLayout(slider_layout) layout.addLayout(group_layout_colors) layout.addLayout(group_layout_position) layout.addWidget(buttons) def apply_changes(self): transparency = self.spinbox.value() update_colors = self.radio_colors_true.isChecked() fixed_position = ( True if self.radio_position_true.isChecked() else False if self.radio_position_false.isChecked() else None ) modified_count = 0 if not FreeCAD.ActiveDocument: QtGui.QMessageBox.warning(self, "Erreur", "Aucun document actif") return for obj in FreeCAD.ActiveDocument.Objects: if hasattr(obj, "a2p_Version"): # Vérifie que l'objet est un objet A2plus try: # Gestion de la transparence obj.ViewObject.Transparency = transparency # Gestion de 'Update Colors' if "updateColors" in obj.PropertiesList: obj.updateColors = update_colors FreeCAD.Console.PrintMessage(f"Objet {obj.Name}: 'Update Colors' défini sur {update_colors}\n") else: FreeCAD.Console.PrintWarning(f"Objet {obj.Name}: 'Update Colors' non disponible dans les propriétés.\n") # Gestion de 'Fixed Position' if fixed_position is not None: # Appliquer uniquement si "True" ou "False" sélectionné if "fixedPosition" in obj.PropertiesList: obj.fixedPosition = fixed_position FreeCAD.Console.PrintMessage(f"Objet {obj.Name}: 'Fixed Position' défini sur {fixed_position}\n") else: FreeCAD.Console.PrintWarning(f"Objet {obj.Name}: 'Fixed Position' non disponible dans les propriétés.\n") modified_count += 1 except Exception as e: FreeCAD.Console.PrintError(f"Erreur pour l'objet {obj.Name}: {str(e)}\n") FreeCAD.ActiveDocument.recompute() FreeCADGui.updateGui() QtGui.QMessageBox.information(self, "Terminé", f"{modified_count} objets ont été modifiés avec une transparence de {transparency}%" + (f", 'Update Colors' défini sur {update_colors}" if modified_count > 0 else "") + (f", et 'Fixed Position' défini sur {fixed_position}." if fixed_position is not None else ".")) self.accept() # Affiche la boîte de dialogue dialog = TransparencyDialog() dialog.exec_()