From 736447ec9ee710b8442a6defd8691083b56bdee7 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Mon, 25 Jun 2012 09:26:40 -0400 Subject: [PATCH] Begin custom PLASMA_GAME engine According to the sparse documentation, custom render engines are the most future-proof way of customizing the internal blender panels. Unfortunately, even then, we must do some metaprogramming hacks... --- korman/__init__.py | 4 ++-- korman/render.py | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 korman/render.py diff --git a/korman/__init__.py b/korman/__init__.py index 20f0ceb..8476085 100644 --- a/korman/__init__.py +++ b/korman/__init__.py @@ -14,11 +14,11 @@ # along with Korman. If not, see . import bpy -from . import exporter +from . import exporter, render bl_info = { "name": "Korman", - "author": "Guild of Writers H'uru Team", + "author": "Guild of Writers", "blender": (2, 6, 3), # I can't be bothered to support old stuff "location": "File > Import-Export", "description": "Exporter for Cyan Worlds' Plasma Engine", diff --git a/korman/render.py b/korman/render.py new file mode 100644 index 0000000..bede84b --- /dev/null +++ b/korman/render.py @@ -0,0 +1,47 @@ +# This file is part of Korman. +# +# Korman is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Korman 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Korman. If not, see . + +import bpy + +class PlasmaRenderEngine(bpy.types.RenderEngine): + + bl_idname = "PLASMA_GAME" + bl_label = "Plasma Game" + + pass + +# Explicitly whitelist compatible Blender panels... +from bl_ui import properties_material +properties_material.MATERIAL_PT_context_material.COMPAT_ENGINES.add("PLASMA_GAME") +properties_material.MATERIAL_PT_preview.COMPAT_ENGINES.add("PLASMA_GAME") +del properties_material + +@classmethod +def _new_poll(cls, context): + """Nifty replacement for naughty built-in Blender poll()s""" + if context.scene.render.engine == "PLASMA_GAME": + return False + else: + # Dear god you better save the old poll... + return cls._old_poll(cls, context) +def _swap_poll(cls): + cls._old_poll = cls.poll + cls.poll = _new_poll + +# Hmm... Physics panels don't respect the supported engine thing. +# Metaprogramming to the rescue! +from bl_ui import properties_physics_common +_swap_poll(properties_physics_common.PhysicButtonsPanel) +del properties_physics_common