Revision: 15501
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15501
Author:   campbellbarton
Date:     2008-07-09 14:51:53 +0200 (Wed, 09 Jul 2008)

Log Message:
-----------
svn  merge  -r15491:HEAD 
https://svn.blender.org/svnroot/bf-blender/trunk/blender

Modified Paths:
--------------
    branches/apricot/source/blender/imbuf/intern/openexr/openexr_api.cpp
    branches/apricot/source/blender/nodes/intern/CMP_nodes/CMP_gamma.c
    branches/apricot/source/gameengine/Ketsji/KX_GameObject.cpp
    branches/apricot/source/gameengine/Ketsji/KX_GameObject.h
    branches/apricot/source/gameengine/Ketsji/KX_TouchEventManager.cpp
    branches/apricot/tools/Blender.py

Modified: branches/apricot/source/blender/imbuf/intern/openexr/openexr_api.cpp
===================================================================
--- branches/apricot/source/blender/imbuf/intern/openexr/openexr_api.cpp        
2008-07-09 10:51:03 UTC (rev 15500)
+++ branches/apricot/source/blender/imbuf/intern/openexr/openexr_api.cpp        
2008-07-09 12:51:53 UTC (rev 15501)
@@ -842,7 +842,7 @@
 } RGBA;
 
 
-#if 0
+/* debug only */
 static void exr_print_filecontents(InputFile *file)
 {
        const ChannelList &channels = file->header().channels();
@@ -853,8 +853,29 @@
                printf("OpenEXR-load: Found channel %s of type %d\n", i.name(), 
channel.type);
        }
 }
-#endif
 
+/* for non-multilayer, map  R G B A channel names to something that's in this 
file */
+static const char *exr_rgba_channelname(InputFile *file, const char *chan)
+{
+       const ChannelList &channels = file->header().channels();
+       
+       for (ChannelList::ConstIterator i = channels.begin(); i != 
channels.end(); ++i)
+       {
+               const Channel &channel = i.channel();
+               const char *str= i.name();
+               int len= strlen(str);
+               if(len) {
+                       if(strcasecmp(chan, str+len-1)==0) {
+                               printf("name %s\n", str);
+                               return str;
+                       }
+               }
+       }
+       return chan;
+}
+
+
+
 static int exr_has_zbuffer(InputFile *file)
 {
        const ChannelList &channels = file->header().channels();
@@ -896,7 +917,8 @@
                //printf("OpenEXR-load: image data window %d %d %d %d\n", 
                //         dw.min.x, dw.min.y, dw.max.x, dw.max.y);
 
-               // exr_print_filecontents(file);
+               if(0) // debug
+                       exr_print_filecontents(file);
                
                is_multi= exr_is_renderresult(file);
                
@@ -935,11 +957,15 @@
                                        /* but, since we read y-flipped 
(negative y stride) we move to last scanline */
                                        first+= 4*(height-1)*width;
                                        
-                                       frameBuffer.insert ("R", Slice (FLOAT,  
(char *) first, xstride, ystride));
-                                       frameBuffer.insert ("G", Slice (FLOAT,  
(char *) (first+1), xstride, ystride));
-                                       frameBuffer.insert ("B", Slice (FLOAT,  
(char *) (first+2), xstride, ystride));
-                                                                               
                                                                        /* 1.0 
is fill value */
-                                       frameBuffer.insert ("A", Slice (FLOAT,  
(char *) (first+3), xstride, ystride, 1, 1, 1.0f));
+                                       frameBuffer.insert ( 
exr_rgba_channelname(file, "R"), 
+                                                                               
Slice (FLOAT,  (char *) first, xstride, ystride));
+                                       frameBuffer.insert ( 
exr_rgba_channelname(file, "G"), 
+                                                                               
Slice (FLOAT,  (char *) (first+1), xstride, ystride));
+                                       frameBuffer.insert ( 
exr_rgba_channelname(file, "B"), 
+                                                                               
Slice (FLOAT,  (char *) (first+2), xstride, ystride));
+                                                                               
                                                                        
+                                       frameBuffer.insert ( 
exr_rgba_channelname(file, "A"), 
+                                                                               
Slice (FLOAT,  (char *) (first+3), xstride, ystride, 1, 1, 1.0f)); /* 1.0 is 
fill value */
 
                                        if(exr_has_zbuffer(file)) 
                                        {

Modified: branches/apricot/source/blender/nodes/intern/CMP_nodes/CMP_gamma.c
===================================================================
--- branches/apricot/source/blender/nodes/intern/CMP_nodes/CMP_gamma.c  
2008-07-09 10:51:03 UTC (rev 15500)
+++ branches/apricot/source/blender/nodes/intern/CMP_nodes/CMP_gamma.c  
2008-07-09 12:51:53 UTC (rev 15501)
@@ -47,7 +47,7 @@
        int i=0;
        for(i=0; i<3; i++) {
                /* check for negative to avoid nan's */
-               out[i] = (in[0] > 0.0f)? pow(in[i],fac[0]): in[0];
+               out[i] = (in[i] > 0.0f)? pow(in[i],fac[0]): in[i];
        }
        out[3] = in[3];
 }

Modified: branches/apricot/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_GameObject.cpp 2008-07-09 
10:51:03 UTC (rev 15500)
+++ branches/apricot/source/gameengine/Ketsji/KX_GameObject.cpp 2008-07-09 
12:51:53 UTC (rev 15501)
@@ -572,7 +572,7 @@
        m_objectColor = rgbavec;
 }
 
-void KX_GameObject::AlignAxisToVect(const MT_Vector3& dir, int axis)
+void KX_GameObject::AlignAxisToVect(const MT_Vector3& dir, int axis, float fac)
 {
        MT_Matrix3x3 orimat;
        MT_Vector3 vect,ori,z,x,y;
@@ -585,6 +585,11 @@
                cout << "alignAxisToVect() Error: Null vector!\n";
                return;
        }
+       
+       if (fac<=0.0) {
+               return;
+       }
+       
        // normalize
        vect /= len;
        orimat = GetSGNode()->GetWorldOrientation();
@@ -594,7 +599,14 @@
                        ori = MT_Vector3(orimat[0][2], orimat[1][2], 
orimat[2][2]); //pivot axis
                        if (MT_abs(vect.dot(ori)) > 1.0-3.0*MT_EPSILON) //is 
the vector paralell to the pivot?
                                ori = MT_Vector3(orimat[0][1], orimat[1][1], 
orimat[2][1]); //change the pivot!
-                       x = vect; 
+                       if (fac == 1.0) {
+                               x = vect;
+                       } else {
+                               x = (vect * fac) + ((orimat * MT_Vector3(1.0, 
0.0, 0.0)) * (1-fac));
+                               len = x.length();
+                               if (MT_fuzzyZero(len)) x = vect;
+                               else x /= len;
+                       }
                        y = ori.cross(x);
                        z = x.cross(y);
                        break;
@@ -602,7 +614,14 @@
                        ori = MT_Vector3(orimat[0][0], orimat[1][0], 
orimat[2][0]);
                        if (MT_abs(vect.dot(ori)) > 1.0-3.0*MT_EPSILON)
                                ori = MT_Vector3(orimat[0][2], orimat[1][2], 
orimat[2][2]);
-                       y = vect;
+                       if (fac == 1.0) {
+                               y = vect;
+                       } else {
+                               y = (vect * fac) + ((orimat * MT_Vector3(0.0, 
1.0, 0.0)) * (1-fac));
+                               len = y.length();
+                               if (MT_fuzzyZero(len)) y = vect;
+                               else y /= len;
+                       }
                        z = ori.cross(y);
                        x = y.cross(z);
                        break;
@@ -610,7 +629,14 @@
                        ori = MT_Vector3(orimat[0][1], orimat[1][1], 
orimat[2][1]);
                        if (MT_abs(vect.dot(ori)) > 1.0-3.0*MT_EPSILON)
                                ori = MT_Vector3(orimat[0][0], orimat[1][0], 
orimat[2][0]);
-                       z = vect;
+                       if (fac == 1.0) {
+                               z = vect;
+                       } else {
+                               z = (vect * fac) + ((orimat * MT_Vector3(0.0, 
0.0, 1.0)) * (1-fac));
+                               len = z.length();
+                               if (MT_fuzzyZero(len)) z = vect;
+                               else z /= len;
+                       }
                        x = ori.cross(z);
                        y = z.cross(x);
                        break;
@@ -1386,13 +1412,14 @@
 {
        PyObject* pyvect;
        int axis = 2; //z axis is the default
+       float fac = 1.0;
        
-       if (PyArg_ParseTuple(args,"O|i",&pyvect,&axis))
+       if (PyArg_ParseTuple(args,"O|if",&pyvect,&axis, &fac))
        {
                MT_Vector3 vect;
                if (PyVecTo(pyvect, vect))
                {
-                       AlignAxisToVect(vect,axis);                             
+                       AlignAxisToVect(vect,axis,fac);
                        Py_RETURN_NONE;
                }
        }

Modified: branches/apricot/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_GameObject.h   2008-07-09 
10:51:03 UTC (rev 15500)
+++ branches/apricot/source/gameengine/Ketsji/KX_GameObject.h   2008-07-09 
12:51:53 UTC (rev 15501)
@@ -278,7 +278,8 @@
                void 
        AlignAxisToVect(
                const MT_Vector3& vect,
-               int axis = 2 
+               int axis = 2,
+               float fac = 1.0
        );
 
        /** 

Modified: branches/apricot/source/gameengine/Ketsji/KX_TouchEventManager.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_TouchEventManager.cpp  
2008-07-09 10:51:03 UTC (rev 15500)
+++ branches/apricot/source/gameengine/Ketsji/KX_TouchEventManager.cpp  
2008-07-09 12:51:53 UTC (rev 15501)
@@ -137,14 +137,18 @@
 //                     KX_GameObject* gameOb1 = ctrl1->getClientInfo();
 
                        KX_ClientObjectInfo *client_info = 
static_cast<KX_ClientObjectInfo *>(ctrl1->getNewClientInfo());
-       
                        list<SCA_ISensor*>::iterator sit;
-                       for ( sit = client_info->m_sensors.begin(); sit != 
client_info->m_sensors.end(); ++sit)
-                               
static_cast<KX_TouchSensor*>(*sit)->NewHandleCollision((*cit).first, 
(*cit).second, NULL);
-               
+                       if (client_info) {
+                               for ( sit = client_info->m_sensors.begin(); sit 
!= client_info->m_sensors.end(); ++sit) {
+                                       
static_cast<KX_TouchSensor*>(*sit)->NewHandleCollision((*cit).first, 
(*cit).second, NULL);
+                               }
+                       }
                        client_info = static_cast<KX_ClientObjectInfo 
*>((*cit).second->getNewClientInfo());
-                       for ( sit = client_info->m_sensors.begin(); sit != 
client_info->m_sensors.end(); ++sit)
-                               
static_cast<KX_TouchSensor*>(*sit)->NewHandleCollision((*cit).second, 
(*cit).first, NULL);
+                       if (client_info) {
+                               for ( sit = client_info->m_sensors.begin(); sit 
!= client_info->m_sensors.end(); ++sit) {
+                                       
static_cast<KX_TouchSensor*>(*sit)->NewHandleCollision((*cit).second, 
(*cit).first, NULL);
+                               }
+                       }
                }
                        
                m_newCollisions.clear();

Modified: branches/apricot/tools/Blender.py
===================================================================
--- branches/apricot/tools/Blender.py   2008-07-09 10:51:03 UTC (rev 15500)
+++ branches/apricot/tools/Blender.py   2008-07-09 12:51:53 UTC (rev 15501)
@@ -69,10 +69,10 @@
         dict[libtype][priority] = libname
 
 # libtype and priority can both be lists, for defining lib in multiple places
-def add_lib_to_dict(dict = None, libtype = None, libname = None, priority = 
100):
+def add_lib_to_dict(env, dict = None, libtype = None, libname = None, priority 
= 100):
     if not dict or not libtype or not libname:
         print "Passed wrong arg"
-        Exit()
+        env.Exit()
 
     if type(libtype) is str and type(priority) is int:
         internal_lib_to_dict(dict, libtype, libname, priority)
@@ -82,10 +82,10 @@
                 internal_lib_to_dict(dict, lt, libname, p)
         else:
             print "libtype and priority lists are unequal in length"
-            Exit()
+            env.Exit()
     else:
         print "Wrong type combinations for libtype and priority. Only str and 
int or list and list"
-        Exit()
+        env.Exit()
 
 def create_blender_liblist(lenv = None, libtype = None):
     if not lenv or not libtype:
@@ -93,11 +93,9 @@
 
     lst = []
     if libtype in possible_types:
-        sortlist = []
-        for k,v in libs[libtype].iteritems():
-            sortlist.append(k)
-        sortlist.sort()
         curlib = libs[libtype]
+        sortlist = curlib.keys()
+        sortlist.sort()
         for sk in sortlist:
             v = curlib[sk]
             lst.append('#' + root_build_dir + 'lib/'+lenv['LIBPREFIX'] + v + 
lenv['LIBSUFFIX'])
@@ -175,11 +173,10 @@
     for t in possible_types:
         print bc.OKGREEN+"\t"+t+bc.ENDC
         new_priority = 0
-        sortlist = []
-        for k,v in libs[t].iteritems():
-            sortlist.append(k)
-        sortlist.sort()
         curlib = libs[t]
+        sortlist = curlib.keys()
+        sortlist.sort()
+
         for sk in sortlist:
             v = curlib[sk]
             #for p,v in sorted(libs[t].iteritems()):
@@ -368,7 +365,7 @@
         global libs
         if not self or not libname or not source:
             print bc.FAIL+'Cannot continue.  Missing argument for BlenderRes 
'+libname+bc.ENDC
-            Exit()
+            self.Exit()
         if self['OURPLATFORM'] not in ('win32-vc','win32-mingw','linuxcross'):

@@ 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