|
|
| Opis |
|---|
| Szybko i łatwo ustaw kolor oraz przezroczystość pojedynczych ścian, krawędzi i wierzchołków. Macro version: 1.03 Last modified: 2023-10-07 FreeCAD version: kompilacje Python3 Download: Ikona paska narzędzi Autor: TheMarkster |
| Autor |
| TheMarkster |
| Do pobrania |
| Ikona paska narzędzi |
| Odnośniki |
| Przepisy na makropolecenia Jak zainstalować makrodefinicje Dostosowanie pasków narzędzi |
| Wersja Makrodefinicji |
| 1.03 |
| Data zmian |
| 2023-10-07 |
| Wersja FreeCAD |
| kompilacje Python3 |
| Domyślny skrót |
| Brak |
| Zobacz również |
| - |
Opis
To makro umożliwia szybkie i łatwe ustawienie koloru oraz przezroczystości pojedynczych ścian, krawędzi i wierzchołków.
Użycie
- Wybierz jeden lub więcej podobiektów.
- Uruchom makro.
- Otworzy się standardowe okno dialogowe wyboru koloru Qt.
- Wybierz kolor.
- Ustaw przezroczystość, zmieniając kanał alfa (0 = całkowicie nieprzezroczysty, 255 = całkowicie przezroczysty).
- Wykonaj jedną z następujących czynności:
- Naciśnij przycisk OK, aby zamknąć okno dialogowe i zastosować kolor oraz przezroczystość.
- Naciśnij przycisk Anuluj, aby anulować makro.
- Jeśli nacisnąłeś OK i podobiektu należą do więcej niż jednego obiektu, okno wyboru koloru otworzy się ponownie dla kolejnego obiektu.
Uwagi
- Bieżący kolor pierwszego wybranego podobiektu w danym obiekcie będzie kolorem domyślnym w oknie dialogowym. Pierwsze 2 kolory niestandardowe to domyślny szary dla ścian oraz domyślny czarny dla krawędzi i punktów. Domyślna wartość kanału alfa to 0 (brak przezroczystości).
- Możesz użyć dowolnego koloru, ale warto unikać kolorów używanych do zaznaczania (domyślnie zielony) i wstępnego zaznaczenia (domyślnie żółty).
- Opcja przezroczystości nie działa dla krawędzi i punktów, tylko dla ścian.
- Przezroczysta ściana nadal jest możliwa do zaznaczenia w widoku 3D.
- Jeśli wnętrze ścian wydaje się czarne, a chciałbyś widzieć kolory ścian, zmień właściwość Oświetlenie obiektu z Jednostronne na Dwustronne na karcie Widok.
- Właściwości Kolor i Przezroczystość obiektu są właściwościami globalnymi. Ich zmiana nadpisze ustawienia poszczególnych podobiektów.
Skrypt
Ikona paska narzędzi
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()
Ta strona pochodzi z https://wiki.freecad.org/Macro_Colorize