|
|
| Descrizione |
|---|
| Imposta in modo rapido e semplice il colore e la trasparenza di singole facce, bordi e vertici. Versione macro: 1.03 Ultima modifica: 2023-10-07 Versione FreeCAD: Python3 builds Download: ToolBar Icon Autore: TheMarkster |
| Autore |
| TheMarkster |
| Download |
| ToolBar Icon |
| Link |
| Raccolta di macro Come installare le macro Personalizzare la toolbar |
| Versione macro |
| 1.03 |
| Data ultima modifica |
| 2023-10-07 |
| Versioni di FreeCAD |
| Python3 builds |
| Scorciatoia |
| Nessuna |
| Vedere anche |
| Nessuno |
Descrizione
Questa macro consente di impostare in modo rapido e semplice il colore e la trasparenza di singole facce, bordi e vertici.
Utilizzo
- Selezionare uno o più sotto-oggetti.
- Eseguire la macro.
- Si apre la finestra di dialogo standard dei colori Qt.
- Selezionare il colore.
- Impostare la trasparenza modificando il canale alfa (0 = completamente opaco, 255 = completamente trasparente).
- Eseguire una delle seguenti operazioni:
- Premere il pulsante OK per chiudere la finestra di dialogo e applicare il colore e la trasparenza.
- Premere il pulsante Annulla per annullare la macro.
- Se si ha premuto OK e i sub-oggetti appartengono a più di un oggetto, la finestra di dialogo dei colori si riaprirà per l'oggetto successivo.
Note
- Il colore corrente del primo sub-oggetto selezionato dell'oggetto corrente sarà il colore predefinito nella finestra di dialogo. I primi 2 colori personalizzati saranno il grigio predefinito per le facce e il nero predefinito per bordi e punti. Il valore predefinito per il canale alfa sarà 0 (nessuna trasparenza).
- Si può usare qualsiasi colore si desideri, ma probabilmente è meglio evitare i colori utilizzati per gli indicatori di selezione (predefinito: verde) e preselezione (predefinito: giallo).
- L'opzione di trasparenza non sembra funzionare per bordi e punti, ma solo per le facce.
- Una faccia trasparente è ancora selezionabile nella vista 3D.
- Se il lato interno delle facce appare nero e si preferiscie vedere i colori delle facce, modificare la proprietà Lighting dell'oggetto da Un lato a Due lati nella scheda Vista.
- Le proprietà Colore e Trasparenza di un oggetto sono proprietà globali. La loro modifica sovrascriverà qualsiasi modifica apportata ai singoli sub-oggetti.
Script
Icona barra degli strumenti
Macro_Colorize.FCMacro
# -*- coding: utf-8 -*-
#Colorize macro, 2021, by <TheMarkster> LGPL2.1 or later
#Usage: Select subobjects, run macro
#A color picker dialog will appear
#Select the color for the selected subobjects.
#The alpha channel corresponds to the transparency
# 0 = no transparency, 255 = full transparency
# first 2 custom colors are the default gray and black
# used for faces and edges/points
__icon__ = "https://wiki.freecad.org/images/d/de/Workbench_Image.svg"
__version__ = "1.03"
from PySide import QtGui,QtCore
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
class ColorDlg (QtGui.QColorDialog):
def __init__(self,title,flags):
QtGui.QColorDialog.__init__(self)
self.title = title
self.flags = flags
def getClr(self, currentColor):
current = QtGui.QColor(currentColor[0]*255,currentColor[1]*255,currentColor[2]*255,currentColor[3]*255)
self.setCustomColor(0,QtGui.QColor.fromRgb(204,204,204,0)) # gray, default face color
self.setCustomColor(2,QtGui.QColor.fromRgb(0,0,0,0)) #black, default line and point color
clr = self.getColor(current,None,self.title, self.flags)
return clr
def getIdx(sen):
'''get subelement index from sub element name, e.g. from "Face6" we get 5'''
if 'Face' in sen or 'Edge' in sen or 'Wire' in sen:
val = int(sen[4:])
elif 'Vertex' in sen:
val = int(sen[6:])
return val-1
def buildDefaultColorArray(color, count):
clr = (color[0],color[1],color[2],0.0)
return[clr] * count
def getCurrentColor(obj,subName):
idx = getIdx(subName)
if "Face" in subName:
ary = obj.ViewObject.DiffuseColor
elif "Edge" in subName:
ary = obj.ViewObject.LineColorArray
elif "Vertex" in subName:
ary = obj.ViewObject.PointColorArray
if len(ary) >= idx:
return ary[idx]
else:
return ary[0]
def setColors():
selx = Gui.Selection.getSelectionEx()
for sel in selx:
if sel.HasSubObjects:
defaultColor = QtCore.Qt.gray if "Face" in sel.SubElementNames[0] else QtCore.Qt.black
currentColor = getCurrentColor(sel.Object,sel.SubElementNames[0])
subs = sel.SubElementNames
faces = [name for name in subs if "Face" in name]
edges = [name for name in subs if "Edge" in name]
vertices = [name for name in subs if "Vertex" in name]
objname = sel.Object.Name
if sel.Object.Name != sel.Object.Label:
objname += " ("+sel.Object.Label+")"
dlg = ColorDlg('Colorize v'+__version__+' object: '+objname,QtGui.QColorDialog.ShowAlphaChannel.__or__(QtGui.QColorDialog.DontUseNativeDialog))
col = dlg.getClr(currentColor)
if not col.isValid(): #user canceled
return
col = col.getRgbF()
if faces:
dc = sel.Object.ViewObject.DiffuseColor
if len(dc) == 1:
dc = buildDefaultColorArray(dc[0], len(sel.Object.Shape.Faces))
indices = [getIdx(name) for name in faces]
for idx in indices:
dc[idx] = col
sel.Object.ViewObject.DiffuseColor = dc
if edges:
lca = sel.Object.ViewObject.LineColorArray
if len(lca) == 1:
lca = buildDefaultColorArray(lca[0], len(sel.Object.Shape.Edges))
indices = [getIdx(name) for name in edges]
for idx in indices:
lca[idx] = col
sel.Object.ViewObject.LineColorArray = lca
if vertices:
pca = sel.Object.ViewObject.PointColorArray
if len(pca) == 1:
pca = buildDefaultColorArray(pca[0], len(sel.Object.Shape.Vertexes))
indices = [getIdx(name) for name in vertices]
for idx in indices:
pca[idx] = col
sel.Object.ViewObject.PointColorArray = pca
else:
FreeCAD.Console.PrintError("No subobjects selected\n")
setColors()
Questa pagina è recuperata da https://wiki.freecad.org/Macro_Colorize