Макрос Toggle Drawstyle - Быстрое переключение стиля отображения объектов

Аватара пользователя
demonlibra
Помогаю слегка
Сообщения: 2552
Зарегистрирован: 18 янв 2020, 11:49
Откуда: Ростов-на-Дону

Макрос Toggle Drawstyle - Быстрое переключение стиля отображения объектов

Сообщение demonlibra »

Макрос Toggle Drawstyle переключает стиль отображения выбранных или всех объектов.

Изображение

Не бойся поломать. Бойся не починить ))
Изображение
Аватара пользователя
demonlibra
Помогаю слегка
Сообщения: 2552
Зарегистрирован: 18 янв 2020, 11:49
Откуда: Ростов-на-Дону

Re: Макрос Toggle Drawstyle - Быстрое переключение стиля отображения объектов

Сообщение demonlibra »

Немного изменил макрос.
При выделенных объектах:
  • 1-е нажатие делает объекты прозрачными
    Прозрачность задаётся параметром transparency_value
  • 2-е нажатие показывает только рёбра
    xxx.ViewObject.DisplayMode = Wireframe
  • 3-е нажатие задаёт обычный режим отображения
Код макроса

Код: Выделить всё

# triplus @ 2016, 2020
# Toggle object/global display mode
# ==============================

# 0 = "As is"
# 1 = "Flat lines"
# 2 = "Shaded
# 3 = "Wireframe"
# 4 = "Points"
# 5 = "Hidden line"
# 6 = "No shading"

globalA = 0
globalB = 3

# "Flat Lines"
# "Shaded"
# "Wireframe"
# "Points"

objectA = "Flat Lines"
objectB = "Wireframe"
transparency_value = 85

# ==============================

from PySide import QtGui
import FreeCADGui as Gui

mw = Gui.getMainWindow()
sel = Gui.Selection.getSelectionEx()


act = {
    0: mw.findChild(QtGui.QAction, "Std_DrawStyleAsIs"),
    1: mw.findChild(QtGui.QAction, "Std_DrawStyleFlatLines"),
    2: mw.findChild(QtGui.QAction, "Std_DrawStyleShaded"),
    3: mw.findChild(QtGui.QAction, "Std_DrawStyleWireframe"),
    4: mw.findChild(QtGui.QAction, "Std_DrawStylePoints"),
    5: mw.findChild(QtGui.QAction, "Std_DrawStyleHiddenLine"),
    6: mw.findChild(QtGui.QAction, "Std_DrawStyleNoShading"),
}


default = act[0]
actionA = act[globalA]
actionB = act[globalB]


if sel:
    obj = []
    default.trigger()
    for s in sel:
        if s.Object.TypeId == "App::Link":
            if s.Object.LinkedObject not in obj:
                obj.append(s.Object.LinkedObject)
        elif s.Object not in obj:
            obj.append(s.Object)
        else:
            pass

    for o in obj:
        if o.ViewObject.DisplayMode == "Flat Lines" and o.ViewObject.Transparency == 0:
            o.ViewObject.Transparency = transparency_value
            o.ViewObject.LineWidth = 1

        elif o.ViewObject.DisplayMode == "Flat Lines" and o.ViewObject.Transparency > 0:
            o.ViewObject.Transparency = 0
            o.ViewObject.DisplayMode = "Wireframe"
            o.ViewObject.LineWidth = 1

        else:
            o.ViewObject.DisplayMode = "Flat Lines"
            o.ViewObject.Transparency = 0
            o.ViewObject.LineWidth = 2

else:
    if actionA.isChecked():
        actionB.trigger()
    else:
        actionA.trigger()
Не бойся поломать. Бойся не починить ))
Изображение
Аватара пользователя
demonlibra
Помогаю слегка
Сообщения: 2552
Зарегистрирован: 18 янв 2020, 11:49
Откуда: Ростов-на-Дону

Re: Макрос Toggle Drawstyle - Быстрое переключение стиля отображения объектов

Сообщение demonlibra »

Не бойся поломать. Бойся не починить ))
Изображение

Вернуться в «FreeCAD»