Revision: 15305
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15305
Author:   unclezeiv
Date:     2008-06-22 04:08:46 +0200 (Sun, 22 Jun 2008)

Log Message:
-----------
svn merge -r 15269:15303 
https://svn.blender.org/svnroot/bf-blender/trunk/blender

Modified Paths:
--------------
    branches/soc-2008-unclezeiv/release/scripts/vrml97_export.py
    branches/soc-2008-unclezeiv/source/blender/python/api2_2x/Mathutils.c
    branches/soc-2008-unclezeiv/source/blender/src/buttons_logic.c
    branches/soc-2008-unclezeiv/source/blender/src/transform_generics.c
    branches/soc-2008-unclezeiv/source/blender/src/transform_snap.c
    branches/soc-2008-unclezeiv/source/gameengine/Converter/BL_ShapeDeformer.cpp
    branches/soc-2008-unclezeiv/source/gameengine/Converter/BL_SkinDeformer.cpp
    branches/soc-2008-unclezeiv/source/gameengine/Ketsji/KX_GameObject.cpp
    branches/soc-2008-unclezeiv/source/gameengine/PyDoc/KX_GameObject.py

Modified: branches/soc-2008-unclezeiv/release/scripts/vrml97_export.py
===================================================================
--- branches/soc-2008-unclezeiv/release/scripts/vrml97_export.py        
2008-06-22 01:56:11 UTC (rev 15304)
+++ branches/soc-2008-unclezeiv/release/scripts/vrml97_export.py        
2008-06-22 02:08:46 UTC (rev 15305)
@@ -3,9 +3,6 @@
 Name: 'VRML97 (.wrl)...'
 Blender: 241
 Group: 'Export'
-Submenu: 'All Objects...' all
-Submenu: 'All Objects compressed...' comp
-Submenu: 'Selected Objects...' selected
 Tooltip: 'Export to VRML97 file (.wrl)'
 """
 
@@ -55,7 +52,7 @@
 
 import Blender
 from Blender import Object, Mesh, Lamp, Draw, BGL, \
-        Image, Text, sys, Mathutils
+        Image, Text, sys, Mathutils, Registry
 from Blender.Scene import Render
 
 import math
@@ -70,8 +67,9 @@
 filename = Blender.Get('filename')
 _safeOverwrite = True
 extension = ''
-ARG=''
 
+# Matrices below are used only when export_rotate_z_to_y.val:
+#
 # Blender is Z up, VRML is Y up, both are right hand coordinate
 # systems, so to go from Blender coords to VRML coords we rotate
 # by 90 degrees around the X axis. In matrix notation, we have a
@@ -456,6 +454,8 @@
                                if mat:
                                        if (mat.mode & 
Blender.Material.Modes['VCOL_PAINT']):
                                                self.vcolors = 1
+               else:
+                       self.vcolors = 0
                        
                # check if object is wireframe only
                if ob.drawType == Blender.Object.DrawTypes.WIRE:
@@ -633,8 +633,9 @@
                meshVertexList = me.verts
 
                for vertex in meshVertexList:
-                       blenvert = Mathutils.Vector(vertex.co)
-                       vrmlvert = M_blen2vrml * blenvert
+                       vrmlvert = blenvert = Mathutils.Vector(vertex.co)
+                       if export_rotate_z_to_y.val:
+                               vrmlvert = M_blen2vrml * vrmlvert
                        self.writeUnindented("%s %s %s\n " % \
                                                                 (vrmlvert[0], \
                                                                  vrmlvert[1], \
@@ -730,8 +731,8 @@
                                                                         
round(uv[1], self.tp))
                                                j=j+1
                                        indexStr += "-1"
-                       texIndexList.append(indexStr)
-                       texCoordList.append(coordStr)
+                                       texIndexList.append(indexStr)
+                                       texCoordList.append(coordStr)
 
                self.writeIndented("texCoord TextureCoordinate {\n", 1)
                self.writeIndented("point [\n", 1)
@@ -1016,7 +1017,10 @@
                        return
 
                ob_matrix = Mathutils.Matrix(ob.getMatrix('worldspace'))
-               matrix = M_blen2vrml * ob_matrix * M_vrml2blen
+               if export_rotate_z_to_y.val:
+                       matrix = M_blen2vrml * ob_matrix * M_vrml2blen
+               else:
+                       matrix = ob_matrix
                e      = matrix.rotationPart().toEuler()
 
                v = matrix.translationPart()
@@ -1089,7 +1093,7 @@
                self.writeFog()
                self.proto = 0
                allObj = []
-               if ARG == 'selected':
+               if export_selection_only.val:
                        allObj = list(scene.objects.context)
                else:
                        allObj = list(scene.objects)
@@ -1098,7 +1102,7 @@
                for thisObj in allObj:
                        self.writeObject(thisObj)
 
-               if ARG != 'selected':
+               if not export_selection_only.val:
                        self.writeScript()
                self.cleanup()
 
@@ -1213,26 +1217,54 @@
        wrlexport=VRML2Export(filename)
        wrlexport.export(scene, world, worldmat)
 
+#########################################################
+# UI and Registry utilities
+#########################################################
 
+export_selection_only = Draw.Create(0)
+export_rotate_z_to_y = Draw.Create(1)
+export_compressed = Draw.Create(0)
+
+def save_to_registry():
+       d = {}
+       d['selection_only'] = export_selection_only.val
+       d['rotate_z_to_y'] = export_rotate_z_to_y.val
+       d['compressed'] = export_compressed.val
+       Registry.SetKey('vrml97_export', d, True)
+
+def load_from_registry():
+       d = Registry.GetKey('vrml97_export', True)
+       if d:
+               try:
+                       export_selection_only.val = d['selection_only']
+                       export_rotate_z_to_y.val = d['rotate_z_to_y']
+                       export_compressed.val = d['compressed']
+               except: save_to_registry() # If data is not valid, rewrite it.
+
+def show_popup():
+       pup_block = [
+               ('Selection Only', export_selection_only, 'Only export objects 
in visible selection. Else export whole scene.'),
+               ('Rotate +Z to +Y', export_rotate_z_to_y, 'Rotate such that +Z 
axis (Blender up) becomes +Y (VRML up).'),
+               ('Compress', export_compressed, 'Generate a .wrz file (normal 
VRML compressed by gzip).')
+               ]
+       return Draw.PupBlock('Export VRML 97...', pup_block) 
+
 #########################################################
 # main routine
 #########################################################
 
-try:
-       ARG = __script__['arg'] # user selected argument
-except:
-       print "older version"
+load_from_registry()
 
-if Blender.Get('version') < 235:
-       print "Warning: VRML97 export failed, wrong blender version!"
-       print " You aren't running blender version 2.35 or greater"
-       print " download a newer version from http://blender3d.org/";
-else:
-       if ARG == 'comp':
+# Note that show_popup must be done before Blender.Window.FileSelector,
+# because export_compressed affects the suggested extension of resulting
+# file.
+
+if show_popup():
+       save_to_registry()
+       if export_compressed.val:
                extension=".wrz"
                from gzip import *
        else:
                extension=".wrl"
        Blender.Window.FileSelector(select_file, "Export VRML97", \
                                                                
sys.makename(ext=extension))
-

Modified: branches/soc-2008-unclezeiv/source/blender/python/api2_2x/Mathutils.c
===================================================================
--- branches/soc-2008-unclezeiv/source/blender/python/api2_2x/Mathutils.c       
2008-06-22 01:56:11 UTC (rev 15304)
+++ branches/soc-2008-unclezeiv/source/blender/python/api2_2x/Mathutils.c       
2008-06-22 02:08:46 UTC (rev 15305)
@@ -725,28 +725,33 @@
                vec->vec[0] /= norm;
                vec->vec[1] /= norm;
                vec->vec[2] /= norm;
-
-               //create matrix
-               cosAngle = (float) cos(angle);
-               sinAngle = (float) sin(angle);
-               mat[0] = ((vec->vec[0] * vec->vec[0]) * (1 - cosAngle)) +
-                       cosAngle;
-               mat[1] = ((vec->vec[0] * vec->vec[1]) * (1 - cosAngle)) +
-                       (vec->vec[2] * sinAngle);
-               mat[2] = ((vec->vec[0] * vec->vec[2]) * (1 - cosAngle)) -
-                       (vec->vec[1] * sinAngle);
-               mat[3] = ((vec->vec[0] * vec->vec[1]) * (1 - cosAngle)) -
-                       (vec->vec[2] * sinAngle);
-               mat[4] = ((vec->vec[1] * vec->vec[1]) * (1 - cosAngle)) +
-                       cosAngle;
-               mat[5] = ((vec->vec[1] * vec->vec[2]) * (1 - cosAngle)) +
-                       (vec->vec[0] * sinAngle);
-               mat[6] = ((vec->vec[0] * vec->vec[2]) * (1 - cosAngle)) +
-                       (vec->vec[1] * sinAngle);
-               mat[7] = ((vec->vec[1] * vec->vec[2]) * (1 - cosAngle)) -
-                       (vec->vec[0] * sinAngle);
-               mat[8] = ((vec->vec[2] * vec->vec[2]) * (1 - cosAngle)) +
-                       cosAngle;
+               
+               if (isnan(vec->vec[0]) || isnan(vec->vec[1]) || 
isnan(vec->vec[2])) {
+                       /* zero length vector, return an identity matrix, could 
also return an error */
+                       mat[0]= mat[4] = mat[8] = 1.0f;
+               } else {        
+                       /* create matrix */
+                       cosAngle = (float) cos(angle);
+                       sinAngle = (float) sin(angle);
+                       mat[0] = ((vec->vec[0] * vec->vec[0]) * (1 - cosAngle)) 
+
+                               cosAngle;
+                       mat[1] = ((vec->vec[0] * vec->vec[1]) * (1 - cosAngle)) 
+
+                               (vec->vec[2] * sinAngle);
+                       mat[2] = ((vec->vec[0] * vec->vec[2]) * (1 - cosAngle)) 
-
+                               (vec->vec[1] * sinAngle);
+                       mat[3] = ((vec->vec[0] * vec->vec[1]) * (1 - cosAngle)) 
-
+                               (vec->vec[2] * sinAngle);
+                       mat[4] = ((vec->vec[1] * vec->vec[1]) * (1 - cosAngle)) 
+
+                               cosAngle;
+                       mat[5] = ((vec->vec[1] * vec->vec[2]) * (1 - cosAngle)) 
+
+                               (vec->vec[0] * sinAngle);
+                       mat[6] = ((vec->vec[0] * vec->vec[2]) * (1 - cosAngle)) 
+
+                               (vec->vec[1] * sinAngle);
+                       mat[7] = ((vec->vec[1] * vec->vec[2]) * (1 - cosAngle)) 
-
+                               (vec->vec[0] * sinAngle);
+                       mat[8] = ((vec->vec[2] * vec->vec[2]) * (1 - cosAngle)) 
+
+                               cosAngle;
+               }
        } else {
                return EXPP_ReturnPyObjError(PyExc_AttributeError,
                        "Mathutils.RotationMatrix(): unrecognizable axis of 
rotation type - expected x,y,z or r\n");

Modified: branches/soc-2008-unclezeiv/source/blender/src/buttons_logic.c
===================================================================
--- branches/soc-2008-unclezeiv/source/blender/src/buttons_logic.c      
2008-06-22 01:56:11 UTC (rev 15304)
+++ branches/soc-2008-unclezeiv/source/blender/src/buttons_logic.c      
2008-06-22 02:08:46 UTC (rev 15305)
@@ -2149,7 +2149,7 @@
                uiDefBut(block, TEX, 1, "To: ",
                        (xco+10), (yco-(myline++*24)), (width-20), 19,
                        &ma->toPropName, 0, 31, 0, 0,
-                       "Optional send message to objects with this name only"
+                       "Optional send message to objects with this name only 
(Prefix name with OB)"
                        ", or empty to broadcast");
 
 #endif

Modified: branches/soc-2008-unclezeiv/source/blender/src/transform_generics.c
===================================================================
--- branches/soc-2008-unclezeiv/source/blender/src/transform_generics.c 
2008-06-22 01:56:11 UTC (rev 15304)
+++ branches/soc-2008-unclezeiv/source/blender/src/transform_generics.c 
2008-06-22 02:08:46 UTC (rev 15305)
@@ -325,7 +325,7 @@
                else {
                        for (base=G.scene->base.first; base; base=base->next) {
                                /* recalculate scale of selected nla-strips */
-                               if (base->object->nlastrips.first) {
+                               if (base->object && 
base->object->nlastrips.first) {
                                        Object *bob= base->object;
                                        bActionStrip *strip;
                                        
@@ -398,8 +398,15 @@
                                }
                        }
                        else if(G.sipo->blocktype==ID_OB) {
+                               Object *ob= OBACT;
                                Base *base= FIRSTBASE;
                                
+                               /* only if this if active object has this ipo 
in an action (assumes that current ipo is in action) */
+                               if ((ob) && (ob->ipoflag & OB_ACTION_OB) && 
(G.sipo->pin==0)) {
+                                       ob->ctime= -1234567.0f;
+                                       DAG_object_flush_update(G.scene, ob, 
OB_RECALC_OB);
+                               }
+                               
                                while(base) {
                                        if(base->object->ipo==G.sipo->ipo) {
                                                do_ob_ipo(base->object);

Modified: branches/soc-2008-unclezeiv/source/blender/src/transform_snap.c
===================================================================
--- branches/soc-2008-unclezeiv/source/blender/src/transform_snap.c     
2008-06-22 01:56:11 UTC (rev 15304)
+++ branches/soc-2008-unclezeiv/source/blender/src/transform_snap.c     
2008-06-22 02:08:46 UTC (rev 15305)
@@ -902,7 +902,7 @@
                if (test == 1) {
                        MVert *verts = dm->getVertArray(dm);
                        MFace *faces = dm->getFaceArray(dm);
-                       int *index_array;
+                       int *index_array = NULL;
                        int index = 0;
                        int i;
                        

Modified: 
branches/soc-2008-unclezeiv/source/gameengine/Converter/BL_ShapeDeformer.cpp
===================================================================
--- 
branches/soc-2008-unclezeiv/source/gameengine/Converter/BL_ShapeDeformer.cpp    
    2008-06-22 01:56:11 UTC (rev 15304)
+++ 
branches/soc-2008-unclezeiv/source/gameengine/Converter/BL_ShapeDeformer.cpp    
    2008-06-22 02:08:46 UTC (rev 15305)
@@ -118,7 +118,9 @@
                for (int v =0; v<m_bmesh->totvert; v++)

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to