|
|
| Beschreibung |
|---|
| Legt schnell und einfach die Farbe und Transparenz einzelner Flächen, Kanten und Eckpunkte fest. Versionsmakro : 1.03 Datum der letzten Änderung : 2023-10-07 FreeCAD version : Python 3-Versionen Herunterladen : Werkzeugleisten-Symbol Autor: TheMarkster |
| Autor |
| TheMarkster |
| Herunterladen |
| Werkzeugleisten-Symbol |
| Links |
| Makros Rezepte Wie man Makros installiert Symbolleisten anpassen |
| Macro-Version |
| 1.03 |
| Datum der letzten Änderung |
| 2023-10-07 |
| FreeCAD-Version(s) |
| Python 3-Versionen |
| Standardverknüpfung |
| None |
| Siehe auch |
| None |
Beschreibung
Mit diesem Makro lassen sich Farbe und Transparenz einzelner Flächen, Kanten und Eckpunkte schnell und einfach festlegen.
Anwendung
- Ein oder mehrere Unter-Objekte auswählen.
- Das Makro ausführen.
- Der Standard-Qt-Farbdialog wird geöffnet.
- Die Farbe auswählen.
- Die Transparenz mittels Änderungen des Alpha-Kanals einstellen (0 = vollständig undurchsichtig, 255 = vollständig durchsichtig).
- Einen der folgenden Schritte ausführen:
- Die Schaltfläche OK drücken, um den Dialog zu schließen un die Farbe und Transparenz anzuwenden.
- Die Schaltfläche Abbrechen drücken um das Makro zu verlassen.
- Falls die Schaltfläche OK gedrückt wurde und die Unterobjekte gehören zu mehr als einem Objekt, wird der Farb-Dialog erneut für das nächste Objekt geöffnet.
Hinweise
- Die aktuelle Farbe des ersten ausgewählten Unterobjekts des aktuellen Objekts wird zur Standardfarbe im Dialogfeld. Die ersten beiden benutzerdefinierten Farben sind das Standardgrau für Flächen und das Standardschwarz für Kanten und Punkte. Der Standardwert für den Alphakanal ist 0 (keine Transparenz).
- Jede beliebige Farbe kann verwendet werden, jedoch sollten die Farben vermieden werden, die für Auswahl- (Standard: grün) und Vorauswahl- (Standard: gelb) Indikatoren verwendet werden.
- Die Transparenzoption scheint nur für Flächen zu funktionieren, nicht für Kanten und Punkte.
- Eine transparente Fläche kann in der 3D-Ansicht weiterhin ausgewählt werden.
- Wenn die Innenseite von Flächen schwarz erscheint und man lieber die Flächenfarben sehen möchte, die Eigenschaft „Beleuchtung“ des Objekts auf der Registerkarte „Ansicht“ von „Eine Seite“ zu „Zwei Seiten“ ändern.
- Die Farbeigenschaften und die Transparenzeigenschaft eines Objekts sind globale Eigenschaften. Wenn diese geändert werden, werden alle Änderungen an einzelnen Unterobjekten überschrieben.
Skript
Werkzeugleisten-Symbol
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()
Diese Seite wird abgerufen von https://wiki.freecad.org/Macro_Colorize