Macro Composto Plus

From FreeCAD Documentation
Jump to navigation Jump to search
This page is a translated version of the page Macro Compound Plus and the translation is 92% complete.
Outdated translations are marked like this.
Other languages:
English • ‎français • ‎italiano

Macro Compound Plus.png Macro Compound Plus

Descrizione
Utilità che combina diversi comandi di Draft.

Versione macro: 00.02
Ultima modifica: 2018-01-24
Versione FreeCAD: <= 0.17
Download: ToolBar Icon
Autore
Mario52
Download
ToolBar Icon
Link
Versione macro
00.02
Data ultima modifica
2018-01-24
Versioni di FreeCAD
<= 0.17
Scorciatoia
Nessuna
Vedere anche
Nessuno


Descrizione

Macro utility che riunisce numerosi comandi di Draft per lavorare con gli oggetti 2D. Ad esempio, lavorare con gli oggetti dei file DXF.

Uso

Macro_Compound_Plus_00

  • Compound I Type I [1 + 1 = 1] : Crea un composto unico di tutti gli oggetti selezionati, senza lo storico.
  • Compound II Type II [1 + 1 = A (1 + 1)] : Crea un composto di tutti gli oggetti selezionati con lo storico di tutti gli oggetti. Stessa funzione di "Menu > Part > Crea composto".
  • Opzioni per le linee:
    • Line colour : Assegna un colore agli oggetti.
    • Width line : Assegna uno spessore di linea.
  • Convert (A) = Converte i testi Draft Text.png in forme Draft ShapeString.png (Lo spessore del testo convertito è rispettato, ma il risultato visivo può non essere rispettato, vedere le proprietà della Vista Combinata per conferma)
  • 8.00  : Gives a thickness of the character and font Family.
  • Convert Edge : Questo comando converte una polilinea in una linea con le coordinate. (Es: un composto declassato non ha le coordinate, questa funzione crea una linea con le coordinate)
  • Per Compound I e Convert Edge

Questa sezione lavora solo con i menu Compound I, Convert (A) e Convert Edge

  • None : Tutti gli oggetti originali restano così come sono.
  • Hidden original line(s) : Nasconde le linee originali.
  • Delete original line(s) : Elimina le linee originali.
  • Reset : Reset della macro
  • DownGrade : Declassa gli oggetti, allo stesso modo di Draft Downgrade.png.
  • Quit : Esce dalla macro

Script

L'icona per la barra degli strumenti Macro Compound Plus.png da copiare nella stessa cartella della macro

Come personalizzare la barra degli strumenti, Come installare le macro

Lo script in github Macro_Compound_Plus.FCMacro

Macro_Compound_Plus.FCMacro

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
"""
***************************************************************************
*   Copyright (c) 2016 2017 2018 <mario52>                                *
*                                                                         *
*   This file is a supplement to the FreeCAD CAx development system.      *
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU Lesser General Public License (LGPL)    *
*   as published by the Free Software Foundation; either version 2 of     *
*   the License, or (at your option) any later version.                   *
*   for detail see the LICENCE text file.                                 *
*                                                                         *
*   This software is distributed in the hope that it will be useful,      *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*   GNU Library General Public License for more details.                  *
*                                                                         *
*   You should have received a copy of the GNU Library General Public     *
*   License along with this macro; if not, write to the Free Software     *
*   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
*   USA                                                                   *
***************************************************************************
*           WARNING! All changes in this file will be lost and            *  
*                  may cause malfunction of the program                   *
***************************************************************************
"""
#Macro_Compound_Plus 05/08/2016 /_00 24/01/2018
#
#OS: Windows 10
#Word size of OS: 64-bit
#Word size of FreeCAD: 64-bit
#Version: 0.16.6706 (Git)
#Build type: Release
#Branch: releases/FreeCAD-0-16
#Hash: f86a4e411ff7848dea98d7242f43b7774bee8fa0
#Python version: 2.7.8
#Qt version: 4.8.7
#Coin version: 4.0.0a
#OCC version: 6.8.0.oce-0.17
#
__title__   = "Macro_Compound_Plus"
__author__  = "Mario52"
__url__     = "http://www.freecadweb.org/index-fr.html"
__version__ = "00.02"
__date__    = "24/01/2018"

import PySide
from PySide import QtGui ,QtCore
from PySide.QtGui import *
from PySide.QtCore import *
 
import Draft, Part, FreeCAD, math, PartGui, FreeCADGui, FreeCAD
from math import sqrt, pi, sin, cos, asin
from FreeCAD import Base

App = FreeCAD
doc = App.activeDocument()

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

def errorDialog(msg):
    diag = QtGui.QMessageBox(QtGui.QMessageBox.Critical,u"Error Message",msg )
    diag.setWindowFlags(PySide.QtCore.Qt.WindowStaysOnTopHint) # PySide #cette fonction met la fenetre en avant
#    diag.setWindowModality(QtCore.Qt.ApplicationModal)       # la fonction a ete desactivee pour favoriser "WindowStaysOnTopHint"
    diag.exec_()

import os, sys, platform
global PolicePath
global nomPolice

####### detect platform meme dans reset ################### 
if platform.system() == "Windows" :
    PolicePath = "C:/Windows/Fonts/ARIAL.TTF"
elif platform.system() == "Linux" :
    PolicePath = "/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-M.ttf"
elif platform.system() == "Darwin":
    PolicePath = "/Library/Fonts/Arial.ttf"
else:
    PolicePath = "C:/Windows/Fonts/ARIAL.TTF"

nomPolice = os.path.basename(PolicePath).split('.')[0]

class Ui_Compound(object):

    def __init__(self):
        #self.path          = "Your Path"
        #self.path          = FreeCAD.ConfigGet("AppHomePath")
        self.path          = FreeCAD.ConfigGet("UserAppData")
        self.nameL         = []
        self.comP          = []
        del        self.nameL[:]
        del         self.comP[:]
        self.red           = 255.0
        self.green         = 0.0
        self.blue          = 0.0

        self.lineWidth     = 2.0
        self.font          = ""
        self.TextLabel     = ""
        self.TextLabelText = ""
        self.TextPosition  = ""
        self.TextFontSize  = 8.0
        self.TextTextColor = ""
        self.FontSize      = 8.0
        self.fonte         = ""
        self.fontGlobal_08 = ""                       # pour compatibilite Windows Linux pour tous les textes
        self.manuel        = False

        global PolicePath
        global nomPolice
#        self.pathFont      = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.FontsLocation) # path font search
#        self.fonteComp     = self.pathFont + "/" + self.nomPolice + ".TTF"
#        self.fonteComp     = self.fonteComp.replace("\\","/")

    def setupUi(self, MainWindow):
        global PolicePath
        global nomPolice

        self.window = MainWindow

        Compound.setObjectName(_fromUtf8("Compound"))
        Compound.resize(250, 440)
        MainWindow.setMinimumSize(QtCore.QSize(250, 440))
        MainWindow.setMaximumSize(QtCore.QSize(250, 440))

        self.centralwidget = QtGui.QWidget(Compound)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))

        self.fontGlobal_08 = QtGui.QFont()            # pour compatibilite Windows Linux pour tous les textes
        self.fontGlobal_08.setFamily("Arial")         # pour compatibilite Windows Linux pour tous les textes
        self.fontGlobal_08.setPointSize(8.0)          # pour compatibilite Windows Linux pour tous les textes

        self.PB_01_Compound_01 = QtGui.QPushButton(self.centralwidget)
        self.PB_01_Compound_01.setGeometry(QtCore.QRect(10, 40, 75, 23))
        self.PB_01_Compound_01.setFont(self.fontGlobal_08)
        self.PB_01_Compound_01.setToolTip("Make a compound Block unique")
        self.PB_01_Compound_01.setObjectName(_fromUtf8("PB_01_Compound_01"))
        self.PB_01_Compound_01.clicked.connect(self.on_PB_01_Compound_01)                    # 

        self.PB_02_Compound_02 = QtGui.QPushButton(self.centralwidget)
        self.PB_02_Compound_02.setGeometry(QtCore.QRect(10, 70, 75, 23))
        self.PB_02_Compound_02.setFont(self.fontGlobal_08)
        self.PB_02_Compound_02.setToolTip("Make a compound same Part, Menu > Part > Make compound")
        self.PB_02_Compound_02.setObjectName(_fromUtf8("PB_02_Compound_02"))
        self.PB_02_Compound_02.clicked.connect(self.on_PB_02_Compound_02)                    # 

        self.groupBox_00 = QtGui.QGroupBox(self.centralwidget)
        self.groupBox_00.setGeometry(QtCore.QRect(10, 100, 231, 91))
        self.groupBox_00.setAlignment(Qt.AlignLeft)                    # AlignLeft     AlignCenter      AlignRight
        self.groupBox_00.setFont(self.fontGlobal_08)
        self.groupBox_00.setToolTip("If this box is unchecked the colors attributes and width line\n"
                                    "of the original line(s) are not modified\n"
                                    "This chekBox work only with Compound II\n"
                                    "Same attributes Part, Menu > Part > Make compound")
        self.groupBox_00.setCheckable(True)
        self.groupBox_00.setObjectName(_fromUtf8("groupBox_00"))

        self.PB_03_Color = QtGui.QPushButton(self.groupBox_00)
        self.PB_03_Color.setGeometry(QtCore.QRect(10, 30, 75, 23))
        self.PB_03_Color.setFont(self.fontGlobal_08)
        self.PB_03_Color.setToolTip("Change the color of object(s) selected(s) value by defaut rvb 255,0,0")
        self.PB_03_Color.setObjectName(_fromUtf8("PB_03_Color"))
        self.PB_03_Color.clicked.connect(self.on_PB_03_Color)                                # 
        self.PB_03_Color.setStyleSheet("background-color: rgb("+str(self.red)+","+str(self.green)+","+str(self.blue)+"); color: cmj("+str(255)+","+str(255)+","+str(255)+")")

        self.DS_01_Width = QtGui.QDoubleSpinBox(self.groupBox_00)
        self.DS_01_Width.setGeometry(QtCore.QRect(10, 60, 73, 22))
        self.DS_01_Width.setFont(self.fontGlobal_08)
        self.DS_01_Width.setToolTip("Give a new width for the line(s) selected(s)")
        self.DS_01_Width.setObjectName(_fromUtf8("DS_01_Width"))
        self.DS_01_Width.setValue(self.lineWidth)
        self.DS_01_Width.valueChanged.connect(self.on_DS_01_Width_valueChanged)             # 

        self.PB_04_Convert = QtGui.QPushButton(self.centralwidget)
        self.PB_04_Convert.setGeometry(QtCore.QRect(10, 200, 75, 23))
        self.PB_04_Convert.setFont(self.fontGlobal_08)
        self.PB_04_Convert.setToolTip("Convert the selected text in ShapeString\n"
                                      "By default Convert (A)utomatic use the font preselected and the size of original text\n"
                                      "If the values or font is modified the button change of Convert (M)anual\n"
                                      "The label of the texte are modified to SString_original text (max 30 characters)")
        self.PB_04_Convert.setObjectName(_fromUtf8("PB_04_Convert"))
        self.PB_04_Convert.clicked.connect(self.on_PB_04_Convert)                            # ""

        if platform.system() == "Windows" :
            self.fontComboBox = QtGui.QFontComboBox(self.centralwidget)
            self.fontComboBox.setGeometry(QtCore.QRect(100, 225, 141, 35))
            font = QtGui.QFont()
            font.setFamily(nomPolice)
            font.setPointSize(self.FontSize)

#            self.fontComboBox.setFont(self.fontGlobal_08)
            self.fontComboBox.setCurrentFont(font)
            self.fontComboBox.setToolTip("New font.\nActual : "+nomPolice)
            self.fontComboBox.setObjectName(_fromUtf8("fontComboBox"))
            self.fontComboBox.currentFontChanged.connect(self.on_PB_Fonte_Win01)                   # 

            self.DS_02_Width_Font = QtGui.QDoubleSpinBox(self.centralwidget)
            self.DS_02_Width_Font.setGeometry(QtCore.QRect(10, 230, 73, 22))
            self.DS_02_Width_Font.setFont(self.fontGlobal_08)
            self.DS_02_Width_Font.setToolTip("Give a new width for the font")
            self.DS_02_Width_Font.setObjectName(_fromUtf8("DS_02_Width_Font"))
            self.DS_02_Width_Font.setValue(self.FontSize)
            self.DS_02_Width_Font.valueChanged.connect(self.on_DS_02_Width_Font_valueChanged)             # 

        else:                    # Linux +
            import os.path
            nomPolice = os.path.basename(PolicePath).split('.')[0]
            self.PB_Fonte_Linux = QtGui.QPushButton(self.centralwidget)
            self.PB_Fonte_Linux.setGeometry(QtCore.QRect(100, 225, 141, 35))
            font = QtGui.QFont()
            font.setFamily(nomPolice)

            font.setPointSize(self.FontSize)
            self.PB_Fonte_Linux.setFont(font)
            self.PB_Fonte_Linux.setToolTip(_fromUtf8("New font.\nActual : "+nomPolice))
            self.PB_Fonte_Linux.setAccessibleDescription(_fromUtf8(""))
            self.PB_Fonte_Linux.setText(_fromUtf8(nomPolice))
            self.PB_Fonte_Linux.setObjectName(_fromUtf8("PB_Fonte_Linux"))
            self.PB_Fonte_Linux.clicked.connect(self.on_PB_Fonte_Linux)

            self.DS_02_Width_Font = QtGui.QDoubleSpinBox(self.centralwidget)
            self.DS_02_Width_Font.setGeometry(QtCore.QRect(10, 230, 75, 23))
            self.DS_02_Width_Font.setFont(self.fontGlobal_08)
            self.DS_02_Width_Font.setToolTip("Give a new width for the font")
            self.DS_02_Width_Font.setObjectName(_fromUtf8("DS_02_Width_Font"))
            self.DS_02_Width_Font.setValue(self.FontSize)
            self.DS_02_Width_Font.valueChanged.connect(self.on_DS_02_Width_Font_valueChanged)             # 

        self.PB_04c_Convert_Edge = QtGui.QPushButton(self.centralwidget)
        self.PB_04c_Convert_Edge.setGeometry(QtCore.QRect(10, 260, 75, 23))
        self.PB_04c_Convert_Edge.setFont(self.fontGlobal_08)
        self.PB_04c_Convert_Edge.setToolTip("Convert the edge to line with coordinates\n"
                                            "Select the edge(s) in the 3D view")
        self.PB_04c_Convert_Edge.setObjectName(_fromUtf8("PB_04c_Convert_Edge"))
        self.PB_04c_Convert_Edge.clicked.connect(self.on_PB_04c_Convert_Edge)                 # ""

        self.PB_05_Reset = QtGui.QPushButton(self.centralwidget)
        self.PB_05_Reset.setGeometry(QtCore.QRect(10, 410, 75, 23))
        self.PB_05_Reset.setFont(self.fontGlobal_08)
        self.PB_05_Reset.setToolTip("Reset the values")
        self.PB_05_Reset.setObjectName(_fromUtf8("PB_05_Reset"))
        self.PB_05_Reset.clicked.connect(self.on_PB_05_Reset)                               # 

        self.PB_06_Downgrade = QtGui.QPushButton(self.centralwidget)
        self.PB_06_Downgrade.setGeometry(QtCore.QRect(90, 410, 75, 23))
        self.PB_06_Downgrade.setFont(self.fontGlobal_08)
        self.PB_06_Downgrade.setToolTip("Downgrade the selected object Same Draft > Downgrade")
        self.PB_06_Downgrade.setObjectName(_fromUtf8("PB_06_Downgrade"))
        self.PB_06_Downgrade.clicked.connect(self.on_PB_06_Downgrade)                       # 

        self.PB_07_Quit = QtGui.QPushButton(self.centralwidget)
        self.PB_07_Quit.setGeometry(QtCore.QRect(170, 410, 75, 23))
        self.PB_07_Quit.setFont(self.fontGlobal_08)
        self.PB_07_Quit.setToolTip("Quit Compound +")
        self.PB_07_Quit.setObjectName(_fromUtf8("PB_06_Quit"))
        self.PB_07_Quit.clicked.connect(self.on_PB_07_Quit)                                 # 

        self.label_01_Titre = QtGui.QLabel(self.centralwidget)
        self.label_01_Titre.setGeometry(QtCore.QRect(10, 10, 231, 16))
        fontTitle = QtGui.QFont()
        fontTitle.setPointSize(12)
        self.label_01_Titre.setFont(fontTitle)
        self.label_01_Titre.setObjectName(_fromUtf8("label_01_Titre"))

        self.label_02_Type_1 = QtGui.QLabel(self.centralwidget)
        self.label_02_Type_1.setGeometry(QtCore.QRect(100, 40, 111, 16))
        self.label_02_Type_1.setFont(self.fontGlobal_08)
        self.label_02_Type_1.setObjectName(_fromUtf8("label_02_Type_1"))

        self.label_03_Type_2 = QtGui.QLabel(self.centralwidget)
        self.label_03_Type_2.setGeometry(QtCore.QRect(100, 70, 141, 16))
        self.label_03_Type_2.setFont(self.fontGlobal_08)
        self.label_03_Type_2.setObjectName(_fromUtf8("label_03_Type_2"))

        self.label_04_Color = QtGui.QLabel(self.groupBox_00)
        self.label_04_Color.setGeometry(QtCore.QRect(100, 30, 121, 16))
        self.label_04_Color.setFont(self.fontGlobal_08)
        self.label_04_Color.setObjectName(_fromUtf8("label_04_Color"))

        self.label_05_DSBox = QtGui.QLabel(self.groupBox_00)
        self.label_05_DSBox.setGeometry(QtCore.QRect(100, 60, 121, 16))
        self.label_05_DSBox.setFont(self.fontGlobal_08)
        self.label_05_DSBox.setObjectName(_fromUtf8("label_05_DSBox"))

        self.label_06_Convert = QtGui.QLabel(self.centralwidget)
        self.label_06_Convert.setGeometry(QtCore.QRect(100, 200, 141, 16))
        self.label_06_Convert.setFont(self.fontGlobal_08)
        self.label_06_Convert.setObjectName(_fromUtf8("label_06_Convert"))

        self.label_08_Convert_Line = QtGui.QLabel(self.centralwidget)
        self.label_08_Convert_Line.setGeometry(QtCore.QRect(100, 260, 141, 16))
        self.label_08_Convert_Line.setFont(self.fontGlobal_08)
        self.label_08_Convert_Line.setObjectName(_fromUtf8("label_08_Convert_Line"))

        self.groupBox_01 = QtGui.QGroupBox(self.centralwidget)
        self.groupBox_01.setGeometry(QtCore.QRect(10, 290, 231, 81))
        self.groupBox_01.setFont(self.fontGlobal_08)
        self.groupBox_01.setObjectName(_fromUtf8("groupBox_01"))

        self.RB_01_Default = QtGui.QRadioButton(self.groupBox_01)
        self.RB_01_Default.setGeometry(QtCore.QRect(10, 20, 141, 17))
        self.RB_01_Default.setFont(self.fontGlobal_08)
        self.RB_01_Default.setToolTip("The line stay tel quel\n"
                                      "For Compound I and Convert text to String")
        self.RB_01_Default.setChecked(True)
        self.RB_01_Default.setObjectName(_fromUtf8("RB_01_Default"))

        self.RB_02_Hidden = QtGui.QRadioButton(self.groupBox_01)
        self.RB_02_Hidden.setGeometry(QtCore.QRect(10, 40, 141, 17))
        self.RB_02_Hidden.setFont(self.fontGlobal_08)
        self.RB_02_Hidden.setToolTip("The original line are hidden after transform\n"
                                      "For Compound I and Convert text to String")
        self.RB_02_Hidden.setObjectName(_fromUtf8("RB_02_Hidden"))

        self.RB_03_Delete = QtGui.QRadioButton(self.groupBox_01)
        self.RB_03_Delete.setGeometry(QtCore.QRect(10, 60, 141, 17))
        self.RB_03_Delete.setFont(self.fontGlobal_08)
        self.RB_03_Delete.setToolTip("The original line are deleted after transform\n"
                                      "For Compound I and Convert text to String")
#        self.RB_03_Delete.setChecked(True)
        self.RB_03_Delete.setObjectName(_fromUtf8("RB_03_Delete"))

        self.progressBar = QtGui.QProgressBar(self.centralwidget)
        self.progressBar.setGeometry(QtCore.QRect(10, 380, 231, 20))
        self.progressBar.setFont(self.fontGlobal_08)
        self.progressBar.setValue(0)
        self.progressBar.setAlignment(QtCore.Qt.AlignCenter)
        self.progressBar.setObjectName(_fromUtf8("progressBar"))

        Compound.setCentralWidget(self.centralwidget)

        self.retranslateUi(Compound)
        QtCore.QMetaObject.connectSlotsByName(Compound)

    def retranslateUi(self, Compound):
        Compound.setWindowFlags(PySide.QtCore.Qt.WindowStaysOnTopHint)                     # PySide cette fonction met la fenetre en avant
        Compound.setWindowIcon(QtGui.QIcon(self.path + 'Macro_Compound_Plus.png'))         # change l'icone de la fenetre principale
        Compound.setWindowTitle("Compound +")
        self.PB_01_Compound_01.setText("Compound I")
        self.PB_02_Compound_02.setText("Compound II")
        self.groupBox_00.setTitle("Options lines")
        self.PB_03_Color.setText("Color")
        self.PB_04_Convert.setText("Convert (A)")
        self.PB_04c_Convert_Edge.setText("Convert Edge")

        self.label_01_Titre.setText("Compound +")
        self.label_02_Type_1.setText("Type I [ 1 + 1 = 1 ]")
        self.label_03_Type_2.setText("Type II [ 1 + 1 = A (1 + 1) ]")
        self.label_04_Color.setText("Line color")
        self.label_05_DSBox.setText("Width line")
        self.label_06_Convert.setText("Convert Text to String")
        self.label_08_Convert_Line.setText("Convert Edge to Line")

        self.groupBox_01.setTitle("For Compound I and Convert")
        self.RB_01_Default.setText("None")
        self.RB_02_Hidden.setText("Hidden original line(s) ")
        self.RB_03_Delete.setText("Delete original line(s)")
        self.PB_05_Reset.setText("Reset")
        self.PB_06_Downgrade.setText("DownGrade")
        self.PB_07_Quit.setText("Quit")

    def on_PB_01_Compound_01(self):
        self.selectionObjects = FreeCADGui.Selection.getSelection()
        if len(self.selectionObjects) > 0:
            try:
                self.nameL         = []
                self.comP          = []
                del        self.nameL[:]
                del         self.comP[:]

                self.progressBar.setMaximum(len(self.selectionObjects))
                compteur = 0
                for i in self.selectionObjects:
                    self.nameL.append(i.Name)
                    self.comP.append(i.Shape)
                    compteur += 1
                    self.progressBar.setValue(compteur)
                    Gui.updateGui()
                    print "Object : ",i.Name

                comp = Part.makeCompound(self.comP)
                Part.show(comp)

                if self.groupBox_00.isChecked:
                    FreeCADGui.ActiveDocument.ActiveObject.LineWidth  = self.lineWidth
                    FreeCADGui.ActiveDocument.ActiveObject.LineColor  = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)
                    FreeCADGui.ActiveDocument.ActiveObject.ShapeColor = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)
                    FreeCADGui.ActiveDocument.ActiveObject.PointColor = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)

                App.ActiveDocument.ActiveObject.Label = "reproShape_TI"
        
                if self.RB_01_Default.isChecked():
                    None
                if self.RB_02_Hidden.isChecked():
                    for i in range(len(self.nameL)):
                        print "Hidden : ",self.nameL[i]
                        FreeCADGui.ActiveDocument.getObject(self.nameL[i]).Visibility = False
                if self.RB_03_Delete.isChecked():
                    for i in range(len(self.nameL)):
                        print "Delete : ",self.nameL[i]
                        doc.removeObject(self.nameL[i])
                self.progressBar.setValue(0)
            except Exception:
                FreeCAD.Console.PrintError("Error objects "+"\n")
        else:
            FreeCAD.Console.PrintError("Not objects selected "+"\n")
#        FreeCAD.Console.PrintMessage(str("on_PB_01_Compound_01 ")+"\n")

    def on_PB_02_Compound_02(self):
        self.selectionObjects = FreeCADGui.Selection.getSelection()
        if len(self.selectionObjects) > 0:
            try:
                self.nameL         = []
                self.comP          = []
                del        self.nameL[:]
                del         self.comP[:]
                
                App.activeDocument().addObject("Part::Compound","Compound")
                
                self.progressBar.setMaximum(len(self.selectionObjects))
                compteur = 0
                for i in self.selectionObjects:
                    self.nameL.append(App.ActiveDocument.getObject(i.Name))
                    compteur += 1
                    self.progressBar.setValue(compteur)
                    Gui.updateGui()
                    print i.Name
                self.progressBar.setValue(0)
                App.activeDocument().Compound.Links = self.nameL
                App.activeDocument().recompute()

                if self.groupBox_00.isChecked:
                    FreeCADGui.ActiveDocument.ActiveObject.LineWidth  = self.lineWidth
                    FreeCADGui.ActiveDocument.ActiveObject.LineColor  = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)
                    FreeCADGui.ActiveDocument.ActiveObject.ShapeColor = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)
                    FreeCADGui.ActiveDocument.ActiveObject.PointColor = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)

                App.ActiveDocument.ActiveObject.Label = "reproShape_TII"
        
            except Exception:
                FreeCAD.Console.PrintError("Error objects "+"\n")
        else:
            FreeCAD.Console.PrintError("Not objects selected "+"\n")
#        FreeCAD.Console.PrintMessage(str("on_PB_02_Compound_02 ")+"\n")

    def on_PB_03_Color(self):
        self.PB_03_Color.setStyleSheet("background-color: QPalette.Base")        # origin system
        self.window.hide()                                                       # hide the window open color
        couleur = QtGui.QColorDialog.getColor()
        
        if couleur.isValid():
            self.red   = int(str(couleur.name()[1:3]),16)
            self.green = int(str(couleur.name()[3:5]),16)
            self.blue  = int(str(couleur.name()[5:7]),16)

        self.PB_03_Color.setStyleSheet("background-color: rgb("+str(self.red)+","+str(self.green)+","+str(self.blue)+"); color: cmj("+str(255)+","+str(255)+","+str(255)+")")

        self.window.show()                                                        # show the window and close color
#        FreeCAD.Console.PrintMessage(str("PB_03_Color ")+"\n")

    def on_PB_04_Convert(self):
        global PolicePath
        global nomPolice

        self.selectionObjects = FreeCADGui.Selection.getSelection()

        self.progressBar.setMaximum(len(self.selectionObjects))
        compteur = 0
        if len(self.selectionObjects) > 0:
            objA = self.selectionObjects[0]
            for objA in self.selectionObjects:
                try:
                    self.TextLabel     = objA.Label
                    self.TextLabelText = objA.LabelText[0]
                    self.TextPosition  = objA.Position
                    self.TextFontSize  = objA.ViewObject.FontSize 

                    if self.manuel:
                        self.TextFontSize = self.FontSize

                    self.TextTextColor = objA.ViewObject.TextColor
                    texte = unicode(self.TextLabelText)

                    ss=Draft.makeShapeString(String = texte, FontFile=PolicePath, Size=float(self.TextFontSize), Tracking=0)

                    plm=FreeCAD.Placement()
                    plm.Base=self.TextPosition
                    plm.Rotation.Q=(0.0,-0.0,-0.0,1.0)
                    ss.Placement=plm
                    ss.Support=None
                    ss.Label = "SString_"+texte[:30]
                    FreeCADGui.ActiveDocument.getObject(ss.Name).ShapeColor = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)
                    FreeCADGui.ActiveDocument.getObject(ss.Name).LineColor  = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)
                    FreeCADGui.ActiveDocument.getObject(ss.Name).PointColor = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)
                    compteur += 1
                    self.progressBar.setValue(compteur)

                    if self.RB_01_Default.isChecked():
                        None
                    if self.RB_02_Hidden.isChecked():
                        print "Hidden : ",objA.Name
                        FreeCADGui.ActiveDocument.getObject(objA.Name).Visibility = False
                    if self.RB_03_Delete.isChecked():
                        print "Delete : ",objA.Name
                        doc.removeObject(objA.Name)

                    Gui.updateGui()
                except Exception:
                    FreeCAD.Console.PrintError("Not object TEXT or error" + "\n")

            self.progressBar.setValue(0)
            FreeCAD.ActiveDocument.recompute()
        else:
            FreeCAD.Console.PrintError("Select one or more objects TEXT" + "\n")
#        FreeCAD.Console.PrintMessage(str("on_PB_04_Convert ")+"\n")

    def on_PB_Fonte_Win01(self):         # New Font Windows (menu deroulant) fonctionne ok
        global PolicePath
        global nomPolice

        Compound.hide()
        fonte     = self.fontComboBox.currentFont()
        nomPolice = fonte.rawName()
        self.fontComboBox.setToolTip("New font.\nActual : "+nomPolice)
        pathFont  = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.FontsLocation) # path font search bon pour Windows
        fonteComp = pathFont + "/" + nomPolice + ".TTF"
        PolicePath = fonteComp.replace("\\","/")

        font = QtGui.QFont()
        font.setFamily(nomPolice)
        font.setPointSize(self.FontSize)
        self.fontComboBox.setFont(font)

        self.PB_04_Convert.setText("Convert (M)")
        self.manuel = True
        Compound.show()
#        App.Console.PrintMessage("New Font " + (PolicePath)+"\n")

    def on_DS_02_Width_Font_valueChanged(self,value):
        self.FontSize = value
        self.PB_04_Convert.setText("Convert (M)")
        font = QtGui.QFont()
        font.setFamily(nomPolice)
        font.setPointSize(self.FontSize)

        if platform.system() == "Windows" :
            self.fontComboBox.setFont(font)
        else:
            self.PB_Fonte_Linux.setFont(font)
            self.PB_Fonte_Linux.setText(_fromUtf8(nomPolice))

        self.manuel = True
#        App.Console.PrintMessage("New FontSize " + str(self.FontSize)+"\n")

    def on_PB_Fonte_Win02(self):         # New Font Windows (menu avec fenetres)
        global PolicePath
        global nomPolice

        Compound.hide()
        font, ok = QtGui.QFontDialog.getFont(QFont(nomPolice, self.FontSize))
        if ok:
            
            fonte         = font
            nomPolice     = fonte.rawName()
            self.FontSize = fonte.pointSizeF()

            pathFont   = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.FontsLocation) # path font search bon pour Windows
            fonteComp  = pathFont + "/" + nomPolice + ".TTF"
            PolicePath = fonteComp.replace("\\","/")

            font = QtGui.QFont()
            font.setFamily(nomPolice)
            font.setPointSize(self.FontSize)
            self.label_07_Font.setFont(font)

            self.label_07_Font.setText("Actual (" + str(self.FontSize) + ") " + nomPolice)
            self.label_07_Font.setToolTip("Actual (" + str(self.FontSize) + ") " + nomPolice)

            self.PB_04_Convert.setText("Convert (M)")
            self.manuel = True
        Compound.show()

    def on_PB_Fonte_Linux(self):         # New Font Linux
        global PolicePath
        global nomPolice
        Compound.hide()
        OpenName = ""
        OpenName, Filter = PySide.QtGui.QFileDialog.getOpenFileName(None, "New Font", PolicePath, "*.ttf") #PySide
        try:
            if OpenName != "":
                PolicePath = str(OpenName)
                import os.path
                nomPolice = os.path.basename(PolicePath).split('.')[0]
                font = QtGui.QFont()
                font.setFamily(nomPolice)
                font.setPointSize(self.FontSize)
                self.PB_Fonte_Linux.setText(nomPolice)
                self.PB_Fonte_Linux.setFont(font)
                self.PB_Fonte_Linux.setToolTip(_fromUtf8("New font.\nActual : "+nomPolice))

        except Exception:
            None
        Compound.show()

#        App.Console.PrintMessage("New Font " + (PolicePath)+"\n")

    def on_PB_04c_Convert_Edge(self):                                          # Convert Edge to line
        import Draft
        points    = []
        points[:] = []
        selectionObjects = FreeCADGui.Selection.getSelectionEx()               # Select an object or sub object getSelectionEx
        for selection in selectionObjects:
            for selectedEdge in selection.SubObjects:
                if (str(selectedEdge.Curve)[1:5]) == "Line" :
                    numberCut = 1                                              # line
                else:
                    numberCut = 20                                             # not line cut in 20 parts
                points = selectedEdge.Edges[0].discretize(int(numberCut + 1))  # Dicretize

                for lin in range(len(points)-1):
                    creaLine = [FreeCAD.Vector(points[lin]),FreeCAD.Vector(points[lin+1])]
                    wire =  Draft.makeLine(FreeCAD.Vector(creaLine[0]),FreeCAD.Vector(creaLine[1]))
                    if self.groupBox_00.isChecked:
                        FreeCADGui.ActiveDocument.ActiveObject.LineWidth  = self.lineWidth
                        FreeCADGui.ActiveDocument.ActiveObject.LineColor  = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)
                        FreeCADGui.ActiveDocument.ActiveObject.ShapeColor = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)
                        FreeCADGui.ActiveDocument.ActiveObject.PointColor = (float(self.red)/255, float(self.green)/255, float(self.blue)/255)

            points[:]  = []
        FreeCAD.ActiveDocument.recompute()
#        FreeCAD.Console.PrintMessage(str("on_PB_04c_Convert_Edge")+"\n")

    def on_DS_01_Width_valueChanged(self,LineWidth):
        self.lineWidth = LineWidth
#        FreeCAD.Console.PrintMessage(str("on_DS_01_Width_valueChanged ")+str(self.lineWidth)+"\n")

    def on_PB_05_Reset(self):                     # 
        global PolicePath
        global nomPolice
        self.red       = 255.0
        self.green     = 0.0
        self.blue      = 0.0
        self.PB_03_Color.setStyleSheet("background-color: rgb("+str(self.red)+","+str(self.green)+","+str(self.blue)+"); color: cmj("+str(255)+","+str(255)+","+str(255)+")")
#        self.RB_01_Default.setChecked(True)
        self.RB_03_Delete.setChecked(True)
        self.lineWidth = 2.0
        self.DS_01_Width.setValue(self.lineWidth)
        self.FontSize  = 8.0

        if platform.system() == "Windows" :
            PolicePath = "C:/Windows/Fonts/ARIAL.TTF"

            nomPolice = os.path.basename(PolicePath).split('.')[0]
            self.DS_02_Width_Font.setValue(self.FontSize)

            font = QtGui.QFont()
            font.setFamily(nomPolice)
            font.setPointSize(self.FontSize)
            self.fontComboBox.setCurrentFont(font)

        else:
            if platform.system() == "Linux" :
                PolicePath = "/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-M.ttf"
            elif platform.system() == "Darwin":
                PolicePath = "/Library/Fonts/Arial.ttf"
            else:
                PolicePath = FreeCAD.ConfigGet("AppHomePath")
                self.PB_Fonte_Linux.setText("New Font")

            nomPolice = os.path.basename(PolicePath).split('.')[0]

            font = QtGui.QFont()
            font.setFamily(nomPolice)
            font.setPointSize(self.FontSize)
            self.PB_Fonte_Linux.setFont(font)

            self.PB_Fonte_Linux.setText(nomPolice)
            self.PB_Fonte_Linux.setToolTip(_fromUtf8("New font.\nActual : "+nomPolice))
            self.DS_02_Width_Font.setValue(self.FontSize)

        self.manuel    = False
        self.PB_04_Convert.setText("Convert (A)")
        self.fonte     = PolicePath + "/" + nomPolice + ".TTF"
#        FreeCAD.Console.PrintMessage(str("on_PB_05_Reset ")+"\n")

    def on_PB_06_Downgrade(self):                     # 
        try:
            import Draft
            Draft.downgrade(FreeCADGui.Selection.getSelection(),delete=True)
            FreeCAD.ActiveDocument.recompute()
            print
        except Exception:
            None
#        FreeCAD.Console.PrintMessage(str("on_PB_06_Downgrade ")+"\n")

    def on_PB_07_Quit(self):                     # 
        FreeCAD.Console.PrintMessage("End Compound +"+"\n")
        self.window.hide()
#        FreeCAD.Console.PrintMessage(str("on_PB_06_Quit ")+"\n")

Compound = QtGui.QMainWindow()
ui = Ui_Compound()
ui.setupUi(Compound)
Compound.show()

Link

Le mie macro su Github

Versioni

  • 24/01/2018 ver 00.02 : sup "import PyQt4"
  • 21/11/2016 ver 00.01 :