Revision: 15657
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15657
Author:   campbellbarton
Date:     2008-07-20 19:25:12 +0200 (Sun, 20 Jul 2008)

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

Modified Paths:
--------------
    branches/apricot/source/blender/blenkernel/intern/lattice.c
    branches/apricot/source/blender/python/api2_2x/Library.c
    branches/apricot/source/blender/python/api2_2x/doc/LibData.py
    branches/apricot/source/blender/render/intern/source/shadeoutput.c
    branches/apricot/source/blender/src/drawobject.c
    branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
    branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.h
    branches/apricot/source/gameengine/Ketsji/KX_GameObject.cpp
    branches/apricot/source/gameengine/Ketsji/KX_GameObject.h
    branches/apricot/source/gameengine/Physics/Bullet/CcdPhysicsController.h
    branches/apricot/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
    branches/apricot/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
    branches/apricot/source/gameengine/PyDoc/KX_GameObject.py

Modified: branches/apricot/source/blender/blenkernel/intern/lattice.c
===================================================================
--- branches/apricot/source/blender/blenkernel/intern/lattice.c 2008-07-20 
17:18:46 UTC (rev 15656)
+++ branches/apricot/source/blender/blenkernel/intern/lattice.c 2008-07-20 
17:25:12 UTC (rev 15657)
@@ -915,7 +915,10 @@
                mti->deformVerts(md, ob, NULL, vertexCos, numVerts);
        }
 
-       if (vertexCos) {
+       /* always displist to make this work like derivedmesh */
+       if (!vertexCos) vertexCos = lattice_getVertexCos(ob, &numVerts);
+       
+       {
                DispList *dl = MEM_callocN(sizeof(*dl), "lt_dl");
                dl->type = DL_VERTS;
                dl->parts = 1;

Modified: branches/apricot/source/blender/python/api2_2x/Library.c
===================================================================
--- branches/apricot/source/blender/python/api2_2x/Library.c    2008-07-20 
17:18:46 UTC (rev 15656)
+++ branches/apricot/source/blender/python/api2_2x/Library.c    2008-07-20 
17:25:12 UTC (rev 15657)
@@ -1135,9 +1135,78 @@
        return (PyObject *)lib;
 }
 
+static PyObject *M_Library_GetPaths(PyObject *self, PyObject * args)
+{      
+       PyObject *list;
+       PyObject *name;
+       int type=0;
+       Library *lib;
+       
+       if( !PyArg_ParseTuple( args, "|i", &type ) || type < 0 || type > 2 ) {
+               return EXPP_ReturnPyObjError( PyExc_TypeError,
+                       "expected an int between 0 and 2." );
+       }
+       
+       list = PyList_New(0);
+       
+       for(lib= G.main->library.first; lib; lib= lib->id.next) {
+               if (type==0) {
+                       /* any type is ok */
+               } else if (type==1 && lib->parent == 0) {
+                       /* only direct linked */
+               } else if (type==2 && lib->parent != 0) {
+                       /* only indirect */
+               } else {
+                       continue; /* incompatible type */
+               }
+               
+               name = PyString_FromString(lib->name);
+               PyList_Append(list, name);
+               Py_DECREF(name);
+       }
+       return list;
+}
+
+static PyObject *M_Library_ReplacePath(PyObject *self, PyObject * args)
+{
+       char *name_from, *name_to;
+       Library *lib;
+       
+       if( !PyArg_ParseTuple( args, "ss", &name_from, &name_to )) {
+               return EXPP_ReturnPyObjError( PyExc_TypeError,
+                       "expected the name of a library path" );
+       }
+       
+       for(lib= G.main->library.first; lib; lib= lib->id.next) {
+               if (strcmp(lib->name, name_from)==0) {
+                       if (lib->parent) {
+                               return EXPP_ReturnPyObjError( 
PyExc_RuntimeError,
+                                       "path is indirectly linked, cannot be 
changed." );
+                       }
+                       
+                       if (strlen(name_to) > sizeof(lib->name)) {
+                               return EXPP_ReturnPyObjError( 
PyExc_RuntimeError,
+                                       "string length too long, cannot set 
path." );
+                       }
+                       
+                       strcpy(lib->name, name_to);
+                       Py_RETURN_NONE;
+               }
+       }
+       
+       return EXPP_ReturnPyObjError( PyExc_ValueError,
+               "path given does not exist as a library" );
+}
+
+
+
 static struct PyMethodDef M_Library_methods[] = {
        {"load", (PyCFunction)M_Library_Load, METH_VARARGS,
        "(string) - declare a .blend file for use as a library"},
+       {"paths", (PyCFunction)M_Library_GetPaths, METH_VARARGS,
+       "(type) - return a list of library paths, type 0 for all, 1 only direct 
links, 2 only indirect links"},
+       {"replace", (PyCFunction)M_Library_ReplacePath, METH_VARARGS,
+       "(from, to) - replace the path of an existing, directly linked 
library."},
        {NULL, NULL, 0, NULL}
 };
 

Modified: branches/apricot/source/blender/python/api2_2x/doc/LibData.py
===================================================================
--- branches/apricot/source/blender/python/api2_2x/doc/LibData.py       
2008-07-20 17:18:46 UTC (rev 15656)
+++ branches/apricot/source/blender/python/api2_2x/doc/LibData.py       
2008-07-20 17:25:12 UTC (rev 15657)
@@ -27,18 +27,38 @@
 """
 
 def load(filename,relative=False):
-  """
-  Select an existing .blend file for use as a library.  Unlike the 
-  Library module, multiple libraries can be defined at the same time.  
-  
-  @type filename: string
-  @param filename: The filename of a Blender file. Filenames starting with 
"//" will be loaded relative to the blend file's location.
-  @type relative: boolean
-  @param relative: Convert relative paths to absolute paths (default).  
Setting this parameter to True will leave paths relative.
-  @rtype: Library
-  @return: return a L{Library} object.
-  """
+       """
+       Select an existing .blend file for use as a library.  Unlike the 
+       Library module, multiple libraries can be defined at the same time.  
+       
+       @type filename: string
+       @param filename: The filename of a Blender file. Filenames starting 
with "//" will be loaded relative to the blend file's location.
+       @type relative: boolean
+       @param relative: Convert relative paths to absolute paths (default).  
Setting this parameter to True will leave paths relative.
+       @rtype: Library
+       @return: return a L{Library} object.
+       """
 
+def paths(link=0):
+       """
+       Returns a list of paths used in the current blend file.
+       
+       @type link: int
+       @param link: 0 (default if no args given) for all library paths, 1 for 
directly linked library paths only, 2 for indirectly linked library paths only.
+       @rtype: List
+       @return: return a list of path strings.
+       """
+
+def replace(pathFrom, pathTo):
+       """
+       Replaces an existing directly linked path.
+       
+       @type pathFrom: string
+       @param pathFrom: An existing library path.
+       @type pathTo: string
+       @param pathTo: A new library path.
+       """
+
 class Libraries:
        """
        The Library object

Modified: branches/apricot/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- branches/apricot/source/blender/render/intern/source/shadeoutput.c  
2008-07-20 17:18:46 UTC (rev 15656)
+++ branches/apricot/source/blender/render/intern/source/shadeoutput.c  
2008-07-20 17:25:12 UTC (rev 15657)
@@ -1379,6 +1379,8 @@
                }
                
                /* specularity */
+               shadfac[3]*= phongcorr; /* note, shadfac not allowed to be 
stored nonlocal */
+               
                if(shadfac[3]>0.0f && shi->spec!=0.0f && !(lar->mode & 
LA_NO_SPEC) && !(lar->mode & LA_ONLYSHADOW)) {
                        
                        if(!(passflag & (SCE_PASS_COMBINED|SCE_PASS_SPEC)));

Modified: branches/apricot/source/blender/src/drawobject.c
===================================================================
--- branches/apricot/source/blender/src/drawobject.c    2008-07-20 17:18:46 UTC 
(rev 15656)
+++ branches/apricot/source/blender/src/drawobject.c    2008-07-20 17:25:12 UTC 
(rev 15657)
@@ -1275,7 +1275,12 @@
        int use_wcol= 0;
 
        lt= (ob==G.obedit)?editLatt:ob->data;
+       
+       /* now we default make displist, this will modifiers work for non 
animated case */
+       if(ob->disp.first==NULL)
+               lattice_calc_modifiers(ob);
        dl= find_displist(&ob->disp, DL_VERTS);
+       
        if(ob==G.obedit) {
                cpack(0x004000);
                

Modified: 
branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp    
2008-07-20 17:18:46 UTC (rev 15656)
+++ branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp    
2008-07-20 17:25:12 UTC (rev 15657)
@@ -170,10 +170,12 @@
        {
                btBroadphaseProxy* handle = body->getBroadphaseHandle();
                m_savedCollisionFlags = body->getCollisionFlags();
+               m_savedMass = GetMass();
                m_savedCollisionFilterGroup = handle->m_collisionFilterGroup;
                m_savedCollisionFilterMask = handle->m_collisionFilterMask;
                body->setActivationState(DISABLE_SIMULATION);
                GetPhysicsEnvironment()->updateCcdPhysicsController(this, 
+                       0.0,
                        
btCollisionObject::CF_STATIC_OBJECT|((ghost)?btCollisionObject::CF_NO_CONTACT_RESPONSE:(m_savedCollisionFlags&btCollisionObject::CF_NO_CONTACT_RESPONSE)),
                        btBroadphaseProxy::StaticFilter, 
                        btBroadphaseProxy::AllFilter ^ 
btBroadphaseProxy::StaticFilter);
@@ -185,11 +187,12 @@
        btRigidBody *body = GetRigidBody();
        if (body->getActivationState() == DISABLE_SIMULATION)
        {
-               GetRigidBody()->forceActivationState(ACTIVE_TAG);
                GetPhysicsEnvironment()->updateCcdPhysicsController(this, 
+                       m_savedMass,
                        m_savedCollisionFlags,
                        m_savedCollisionFilterGroup,
                        m_savedCollisionFilterMask);
+               GetRigidBody()->forceActivationState(ACTIVE_TAG);
        }
 }
 

Modified: branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.h
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.h      
2008-07-20 17:18:46 UTC (rev 15656)
+++ branches/apricot/source/gameengine/Ketsji/KX_BulletPhysicsController.h      
2008-07-20 17:25:12 UTC (rev 15657)
@@ -11,6 +11,8 @@
        int m_savedCollisionFlags;
        short int m_savedCollisionFilterGroup;
        short int m_savedCollisionFilterMask;
+       MT_Scalar m_savedMass;
+
 public:
 
        KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna);

Modified: branches/apricot/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_GameObject.cpp 2008-07-20 
17:18:46 UTC (rev 15656)
+++ branches/apricot/source/gameengine/Ketsji/KX_GameObject.cpp 2008-07-20 
17:25:12 UTC (rev 15657)
@@ -224,6 +224,10 @@
                RemoveParent(scene);
                obj->GetSGNode()->AddChild(GetSGNode());
 
+               if (m_pPhysicsController1) 
+               {
+                       m_pPhysicsController1->SuspendDynamics(true);
+               }
                // Set us to our new scale, position, and orientation
                scale1[0] = scale1[0]/scale2[0];
                scale1[1] = scale1[1]/scale2[1];
@@ -240,10 +244,6 @@
                if (rootlist->RemoveValue(this))
                        // the object was in parent list, decrement ref count 
as it's now removed
                        Release();
-               if (m_pPhysicsController1) 
-               {
-                       m_pPhysicsController1->SuspendDynamics(true);
-               }
        }
 }
 
@@ -724,8 +724,12 @@
 
 void KX_GameObject::NodeSetLocalPosition(const MT_Point3& trans)
 {
-       if (m_pPhysicsController1)
+       if (m_pPhysicsController1 && (!GetSGNode() || 
!GetSGNode()->GetSGParent()))
        {
+               // don't update physic controller if the object is a child:
+               // 1) the transformation will not be right
+               // 2) in this case, the physic controller is necessarily a 
static object
+               //    that is updated from the normal kinematic synchronization
                m_pPhysicsController1->setPosition(trans);
        }
 
@@ -737,25 +741,22 @@
 
 void KX_GameObject::NodeSetLocalOrientation(const MT_Matrix3x3& rot)
 {
-       if (m_pPhysicsController1)
+       if (m_pPhysicsController1 && (!GetSGNode() || 
!GetSGNode()->GetSGParent()))
        {
+               // see note above
                m_pPhysicsController1->setOrientation(rot.getRotation());
        }
        if (GetSGNode())
                GetSGNode()->SetLocalOrientation(rot);
-       else
-       {
-               int i;
-               i=0;
-       }
 }
 
 
 
 void KX_GameObject::NodeSetLocalScale(const MT_Vector3& scale)
 {
-       if (m_pPhysicsController1)

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