#
##
## This file is part of pyFormex 1.0.7 (Mon Jun 17 12:20:39 CEST 2019)
## pyFormex is a tool for generating, manipulating and transforming 3D
## geometrical models by sequences of mathematical operations.
## Home page: http://pyformex.org
## Project page: http://savannah.nongnu.org/projects/pyformex/
## Copyright 2004-2019 (C) Benedict Verhegghe (benedict.verhegghe@ugent.be)
## Distributed under the GNU General Public License version 3 or later.
##
## This program 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.
##
## This program 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 this program. If not, see http://www.gnu.org/licenses/.
##
"""Interactive modification of the rendered scene
This module contains some tools that can be used to interactively
modify the rendered scene.
"""
from __future__ import absolute_import, division, print_function
import pyformex as pf
from pyformex.opengl.drawable import GeomActor
from pyformex.gui.draw import _T, _G, _I, Dialog
from pyformex.opengl.colors import GLcolor
[docs]def objectDialog(obj=None, unlike='object_'):
"""Create an interactive object dialog for drawn objects
obj is a single drawn object or a list thereof.
If no objects are specified, the current scene actors are
used.
A drawn object is the return value of a draw() function call.
"""
items = None
def set_attr(field):
actor = field.data
key = field.text()
val = field.value()
if key in ['objectColor', 'objectBkColor']:
#print("VALUE %s" % val)
val = GLcolor(val)
print("%s: %s = %s" % (actor.name, key, val))
setattr(actor, key, val)
pf.canvas.update()
def objectItems(obj):
if not isinstance(obj, GeomActor):
return []
items = [
# _I('name', obj.name),
_I('visible', True, func=set_attr, data=obj),
_I('opak', obj.opak, func=set_attr, data=obj),
]
if 'objectColor' in obj:
items.append(_I('objectColor', obj.objectColor, itemtype='color', min=0.0, max=100.0, scale=0.01, func=set_attr, data=obj))
if 'objectBkColor' in obj:
items.append(_I('objectBkColor', obj.objectBkColor, itemtype='color', min=0.0, max=100.0, scale=0.01, func=set_attr, data=obj))
if 'alpha' in obj:
items.append(_I('alpha', obj.alpha, itemtype='fslider', min=0.0, max=100.0, scale=0.01, func=set_attr, data=obj))
if 'pointsize' in obj:
items.append(_I('pointsize', obj.marksize, itemtype='fslider', min=0.0, max=100.0, scale=0.1, func=set_attr, data=obj))
return items
# process obj
if obj is None:
obj = pf.canvas.actors
if isinstance(obj, GeomActor):
items = objectItems(obj)
elif isinstance(obj, list):
print([type(o) for o in obj])
obj = [o for o in obj if isinstance(o, GeomActor)]
print([o.name for o in obj])
if unlike:
obj = [o for o in obj if not o.name.startswith(unlike)]
items = [
_T(o.name, objectItems(o)) for o in obj
]
if items:
return Dialog(items, caption='Object Render Dialog', modal=False)
# End