[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [742] contrib/py/scripts/addons/ space_view3d_game_props_visualiser.py: move into contrb > addons/ space_view3d_game_props_visualiser.py
Brendon Murphy
meta.androcto1 at gmail.com
Sun Jun 20 02:15:25 CEST 2010
Revision: 742
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-extensions&revision=742
Author: meta-androcto
Date: 2010-06-20 02:15:24 +0200 (Sun, 20 Jun 2010)
Log Message:
-----------
move into contrb > addons/space_view3d_game_props_visualiser.py
Added Paths:
-----------
contrib/py/scripts/addons/space_view3d_game_props_visualiser.py
Added: contrib/py/scripts/addons/space_view3d_game_props_visualiser.py
===================================================================
--- contrib/py/scripts/addons/space_view3d_game_props_visualiser.py (rev 0)
+++ contrib/py/scripts/addons/space_view3d_game_props_visualiser.py 2010-06-20 00:15:24 UTC (rev 742)
@@ -0,0 +1,204 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# 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 2
+# 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, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+
+bl_addon_info = {
+ 'name': '3D View: Game Property Visualiser',
+ 'author': 'Bartius Crouch/Vilem Novak',
+ 'version': '2.4 2010/06/07',
+ 'blender': (2, 5, 3),
+ 'category': '3D View',
+ 'location': 'View3D > properties panel > display tab',
+ 'description': 'Display the game properties next to selected objects '\
+ 'in the 3d-view',
+ 'wiki_url': 'http://wiki.blender.org/index.php/Extensions:2.5/Py/'\
+ 'Scripts/Index_Visualiser',
+ 'tracker_url': 'http://projects.blender.org/tracker/index.php?'\
+ 'func=detail&aid=21557&group_id=153&atid=468',
+ 'doc': """\
+Displays game properties next to selected objects(under name)
+
+-how to use:
+ just toggle the button 'Visualise game props' in the right side panel
+"""}
+
+
+import bgl
+import blf
+import bpy
+import mathutils
+
+
+# calculate locations and store them as ID property in the mesh
+def calc_callback(self, context):
+ # polling
+ if context.mode == 'EDIT_MESH':
+ return
+
+ # get screen information
+ mid_x = context.region.width/2.0
+ mid_y = context.region.height/2.0
+ width = context.region.width
+ height = context.region.height
+
+ # get matrices
+ view_mat = context.space_data.region_3d.perspective_matrix
+
+ ob_mat = context.active_object.matrix
+ total_mat = view_mat*ob_mat
+
+ # calculate location info
+ texts = []
+
+ # uncomment 2 lines below, to enable live updating of the selection
+ #ob=context.active_object
+ for ob in context.selected_objects:
+ locs = []
+ ob_mat = ob.matrix
+ total_mat = view_mat*ob_mat
+
+ for p in ob.game.properties:
+ d=0.0#{'data':p.name+':'+str(p.value)}
+ #print (d)
+ locs.append([ mathutils.Vector([0,0,0]).resize4D()])
+
+
+ for loc in locs:
+
+ vec = total_mat*loc[0] # order is important
+ # dehomogenise
+ vec = mathutils.Vector((vec[0]/vec[3],vec[1]/vec[3],vec[2]/vec[3]))
+ x = int(mid_x + vec[0]*width/2.0)
+ y = int(mid_y + vec[1]*height/2.0)
+ texts+=[x, y]
+
+
+ # store as ID property in mesh
+ #print (texts)
+ context.scene['GamePropsVisualiser'] = texts
+
+
+# draw in 3d-view
+def draw_callback(self, context):
+ # polling
+ if context.mode == 'EDIT_MESH':
+ return
+ # retrieving ID property data
+ try:
+ #print(context.scene['GamePropsVisualiser'])
+ texts = context.scene['GamePropsVisualiser']
+
+ except:
+ return
+ if not texts:
+ return
+
+ # draw
+ i=0
+
+ blf.size(0, 12, 72)
+
+
+ bgl.glColor3f(1.0,1.0,1.0)
+ for ob in bpy.context.selected_objects:
+ for pi,p in enumerate(ob.game.properties):
+ blf.position(0, texts[i], texts[i+1]-(pi+1)*14, 0)
+ if p.type=='FLOAT':
+ t=p.name+': '+ str('%g'% p.value)
+ else:
+ t=p.name+': '+ str(p.value)
+ blf.draw(0, t)
+ i+=2
+
+
+# operator
+class GamePropertyVisualiser(bpy.types.Operator):
+ bl_idname = "view3d.game_props_visualiser"
+ bl_label = "Game Properties Visualiser"
+ bl_description = "Toggle the visualisation of game properties"
+
+
+ def poll(self, context):
+ return context.mode!='EDIT_MESH'
+
+ def modal(self, context, event):
+ context.area.tag_redraw()
+
+ # removal of callbacks when operator is called again
+ #print(context.scene.display_game_properties)
+ if context.scene.display_game_properties == -1:
+ # print('deinit2')
+
+ context.scene.display_game_properties = 0
+ context.region.callback_remove(self.handle1)
+ context.region.callback_remove(self.handle2)
+ context.scene.display_game_properties = 0
+
+ return {'FINISHED'}
+
+ return {'PASS_THROUGH'}
+
+ def invoke(self, context, event):
+ if context.area.type == 'VIEW_3D':
+ print(context.scene.display_game_properties)
+ if context.scene.display_game_properties == 0 or context.scene.display_game_properties == -1:
+ print('init')
+ # operator is called for the first time, start everything
+ context.scene.display_game_properties = 1
+ context.manager.add_modal_handler(self)
+ self.handle1 = context.region.callback_add(calc_callback,
+ (self, context), 'POST_VIEW')
+ self.handle2 = context.region.callback_add(draw_callback,
+ (self, context), 'POST_PIXEL')
+ return {'RUNNING_MODAL'}
+ else:
+ # operator is called again, stop displaying
+ context.scene.display_game_properties = -1
+ #print(dir(self))
+ #
+ return {'RUNNING_MODAL'}
+ else:
+ self.report({'WARNING'}, "View3D not found, can't run operator")
+ return {'CANCELLED'}
+
+
+# defining the panel
+def menu_func(self, context):
+
+ sce=context.scene
+ sce.IntProperty(name = 'visualise game properties' ,attr="display_game_properties", default=0)
+
+ col = self.layout.column(align=True)
+ col.operator(GamePropertyVisualiser.bl_idname, text="Visualise game props")
+ self.layout.separator()
+
+
+def register():
+ bpy.types.register(GamePropertyVisualiser)
+ bpy.types.VIEW3D_PT_view3d_display.prepend(menu_func)
+
+
+def unregister():
+ bpy.types.unregister(GamePropertyVisualiser)
+ bpy.types.VIEW3D_PT_view3d_display.remove(menu_func)
+
+
+if __name__ == "__main__":
+ register()
\ No newline at end of file
More information about the Bf-extensions-cvs
mailing list