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

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

Modified Paths:
--------------
    branches/apricot/source/blender/src/buttons_scene.c
    branches/apricot/source/blender/src/transform_conversions.c
    branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    branches/apricot/source/gameengine/Ketsji/KX_GameObject.h
    branches/apricot/source/gameengine/Ketsji/KX_NearSensor.cpp
    branches/apricot/source/gameengine/Ketsji/KX_RadarSensor.cpp
    branches/apricot/source/gameengine/Ketsji/KX_Scene.cpp
    branches/apricot/source/gameengine/Ketsji/KX_Scene.h
    branches/apricot/source/gameengine/Rasterizer/Makefile

Modified: branches/apricot/source/blender/src/buttons_scene.c
===================================================================
--- branches/apricot/source/blender/src/buttons_scene.c 2008-07-16 05:50:54 UTC 
(rev 15596)
+++ branches/apricot/source/blender/src/buttons_scene.c 2008-07-16 07:10:33 UTC 
(rev 15597)
@@ -137,36 +137,42 @@
        bSample *sample, *newsample;
 
        sound = G.buts->lockpoin;
+       
+       /* No Sound or Selected the same sample as we alredy have, just ignore 
*/
+       if (sound==NULL || str==sound->name)
+               return;
+               
+       if (sizeof(sound->sample->name) < strlen(str)) {
+               error("Path too long: %s", str);
+               return;
+       }
+               
+       // save values
+       sample = sound->sample;
+       strcpy(name, sound->sample->name);      
+       strcpy(sound->name, str);
+       sound_set_sample(sound, NULL);
+       sound_initialize_sample(sound);
 
-       if (sound) {
-               // save values
-               sample = sound->sample;
-               strcpy(name, sound->sample->name);
+       if (sound->sample->type == SAMPLE_INVALID) {
+               error("Not a valid sample: %s", str);
 
-               strcpy(sound->name, str);
-               sound_set_sample(sound, NULL);
-               sound_initialize_sample(sound);
+               newsample = sound->sample;
 
-               if (sound->sample->type == SAMPLE_INVALID) {
-                       error("Not a valid sample: %s", str);
+               // restore values
+               strcpy(sound->name, name);
+               sound_set_sample(sound, sample);
 
-                       newsample = sound->sample;
+               // remove invalid sample
 
-                       // restore values
-                       strcpy(sound->name, name);
-                       sound_set_sample(sound, sample);
-
-                       // remove invalid sample
-
-                       sound_free_sample(newsample);
-                       BLI_remlink(samples, newsample);
-                       MEM_freeN(newsample);
-               }
+               sound_free_sample(newsample);
+               BLI_remlink(samples, newsample);
+               MEM_freeN(newsample);
+               return;
        }
-
+       
        BIF_undo_push("Load new audio file");
        allqueue(REDRAWBUTSSCENE, 0);
-
 }
 
 
@@ -403,7 +409,7 @@
                sample = sound->sample;
 
                /* info string */
-               if (sound->sample && sound->sample->len) {
+               if (sound->sample && sound->sample->len && 
sound->sample->channels && sound->sample->bits) {
                        char *tmp;
                        if (sound->sample->channels == 1) tmp= "Mono";
                        else if (sound->sample->channels == 2) tmp= "Stereo";
@@ -1174,18 +1180,18 @@
                             130,140,120,19, &last_seq->flag, 
                             0.0, 21.0, 100, 0, 
                             "Use a custom directory to store data");
-       }
 
-       if (last_seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) {
-               uiDefIconBut(block, BUT, B_SEQ_SEL_PROXY_DIR, 
-                            ICON_FILESEL, 10, 120, 20, 20, 0, 0, 0, 0, 0, 
-                            "Select the directory/name for "
-                            "the proxy storage");
+               if (last_seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) {
+                       uiDefIconBut(block, BUT, B_SEQ_SEL_PROXY_DIR, 
+                                    ICON_FILESEL, 10, 120, 20, 20, 0, 0, 0, 0, 
0, 
+                                    "Select the directory/name for "
+                                    "the proxy storage");
 
-               uiDefBut(block, TEX, 
-                        B_SEQ_BUT_RELOAD, "Dir: ", 
-                        30,120,220,20, last_seq->strip->proxy->dir, 
-                        0.0, 160.0, 100, 0, "");
+                       uiDefBut(block, TEX, 
+                                B_SEQ_BUT_RELOAD, "Dir: ", 
+                                30,120,220,20, last_seq->strip->proxy->dir, 
+                                0.0, 160.0, 100, 0, "");
+               }
        }
 
        if (last_seq->flag & SEQ_USE_PROXY) {

Modified: branches/apricot/source/blender/src/transform_conversions.c
===================================================================
--- branches/apricot/source/blender/src/transform_conversions.c 2008-07-16 
05:50:54 UTC (rev 15596)
+++ branches/apricot/source/blender/src/transform_conversions.c 2008-07-16 
07:10:33 UTC (rev 15597)
@@ -3887,7 +3887,7 @@
                        }
                }
        }
-       else if (t->spacetype == SPACE_ACTION) {
+       if (t->spacetype == SPACE_ACTION) {
                void *data;
                short datatype;
                

Modified: 
branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp   
2008-07-16 05:50:54 UTC (rev 15596)
+++ branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp   
2008-07-16 07:10:33 UTC (rev 15597)
@@ -1845,7 +1845,10 @@
        int aspect_width;
        int aspect_height;
        vector<MT_Vector3> inivel,iniang;
-       
+       set<Group*> grouplist;  // list of groups to be converted
+       set<Object*> allblobj;  // all objects converted
+       set<Object*> groupobj;  // objects from groups (never in active layer)
+
        if (alwaysUseExpandFraming) {
                frame_type = RAS_FrameSettings::e_frame_extend;
                aspect_width = canvas->GetWidth();
@@ -1917,6 +1920,8 @@
        for (SETLOOPER(blenderscene, base))
        {
                Object* blenderobject = base->object;
+               allblobj.insert(blenderobject);
+
                KX_GameObject* gameobj = gameobject_from_blenderobject(
                                                                                
base->object, 
                                                                                
kxscene, 
@@ -2044,7 +2049,9 @@
                                
                                gameobj->NodeUpdateGS(0,true);
                                gameobj->Bucketize();
-                               
+               
+                               if (gameobj->IsDupliGroup())
+                                       
grouplist.insert(blenderobject->dup_group);
                        }
                        else
                        {
@@ -2071,6 +2078,188 @@
 
        }
 
+       if (!grouplist.empty())
+       {
+               // now convert the group referenced by dupli group object
+               // keep track of all groups already converted
+               set<Group*> allgrouplist = grouplist;
+               set<Group*> tempglist;
+               // recurse
+               while (!grouplist.empty())
+               {
+                       set<Group*>::iterator git;
+                       tempglist.clear();
+                       tempglist.swap(grouplist);
+                       for (git=tempglist.begin(); git!=tempglist.end(); git++)
+                       {
+                               Group* group = *git;
+                               GroupObject* go;
+                               for(go=(GroupObject*)group->gobject.first; go; 
go=(GroupObject*)go->next) 
+                               {
+                                       Object* blenderobject = go->ob;
+                                       if 
(converter->FindGameObject(blenderobject) == NULL)
+                                       {
+                                               allblobj.insert(blenderobject);
+                                               groupobj.insert(blenderobject);
+                                               KX_GameObject* gameobj = 
gameobject_from_blenderobject(
+                                                                               
                                blenderobject, 
+                                                                               
                                kxscene, 
+                                                                               
                                rendertools, 
+                                                                               
                                converter,
+                                                                               
                                blenderscene);
+                                                                               
+                                               // this code is copied from 
above except that
+                                               // object from groups are never 
is active layer
+                                               bool isInActiveLayer = false;
+                                               bool addobj=true;
+                                               
+                                               if (converter->addInitFromFrame)
+                                                       if (!isInActiveLayer)
+                                                               addobj=false;
+                                                                               
                                
+                                               if (gameobj&&addobj)
+                                               {
+                                                       MT_Point3 posPrev;      
                
+                                                       MT_Matrix3x3 angor;     
                
+                                                       if 
(converter->addInitFromFrame) 
+                                                               
blenderscene->r.cfra=blenderscene->r.sfra;
+                                                       
+                                                       MT_Point3 pos = 
MT_Point3(
+                                                               
blenderobject->loc[0]+blenderobject->dloc[0],
+                                                               
blenderobject->loc[1]+blenderobject->dloc[1],
+                                                               
blenderobject->loc[2]+blenderobject->dloc[2]
+                                                       );
+                                                       MT_Vector3 eulxyz = 
MT_Vector3(
+                                                               
blenderobject->rot[0],
+                                                               
blenderobject->rot[1],
+                                                               
blenderobject->rot[2]
+                                                       );
+                                                       MT_Vector3 scale = 
MT_Vector3(
+                                                               
blenderobject->size[0],
+                                                               
blenderobject->size[1],
+                                                               
blenderobject->size[2]
+                                                       );
+                                                       if 
(converter->addInitFromFrame){//rcruiz
+                                                               float 
eulxyzPrev[3];
+                                                               
blenderscene->r.cfra=blenderscene->r.sfra-1;
+                                                               
update_for_newframe();
+                                                               MT_Vector3 
tmp=pos-MT_Point3(blenderobject->loc[0]+blenderobject->dloc[0],
+                                                                               
                                        
blenderobject->loc[1]+blenderobject->dloc[1],
+                                                                               
                                        
blenderobject->loc[2]+blenderobject->dloc[2]
+                                                                               
                        );
+                                                               
eulxyzPrev[0]=blenderobject->rot[0];
+                                                               
eulxyzPrev[1]=blenderobject->rot[1];
+                                                               
eulxyzPrev[2]=blenderobject->rot[2];
+
+                                                               double fps = 
(double) blenderscene->r.frs_sec/
+                                                                       
(double) blenderscene->r.frs_sec_base;
+
+                                                               tmp.scale(fps, 
fps, fps);
+                                                               
inivel.push_back(tmp);
+                                                               
tmp=eulxyz-eulxyzPrev;
+                                                               tmp.scale(fps, 
fps, fps);
+                                                               
iniang.push_back(tmp);
+                                                               
blenderscene->r.cfra=blenderscene->r.sfra;
+                                                               
update_for_newframe();
+                                                       }               
+                                                                               
+                                                       
gameobj->NodeSetLocalPosition(pos);
+                                                       
gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
+                                                       
gameobj->NodeSetLocalScale(scale);
+                                                       
gameobj->NodeUpdateGS(0,true);
+                                                       
+                                                       
BL_ConvertIpos(blenderobject,gameobj,converter);
+                                                       // TODO: expand to 
multiple ipos per mesh
+                                                       Material *mat = 
give_current_material(blenderobject, 1);
+                                                       if(mat) 
BL_ConvertMaterialIpos(mat, gameobj, converter);        
+                                       
+                                                       
sumolist->Add(gameobj->AddRef());
+                                                       
+                                                       
BL_ConvertProperties(blenderobject,gameobj,timemgr,kxscene,isInActiveLayer);
+                                                       
+                                       
+                                                       
gameobj->SetName(blenderobject->id.name);
+                                       
+                                                       // templist to find 
Root Parents (object with no parents)
+                                                       
templist->Add(gameobj->AddRef());
+                                                       
+                                                       // update 
children/parent hierarchy
+                                                       if 
((blenderobject->parent != 0)&&(!converter->addInitFromFrame))
+                                                       {
+                                                               // blender has 
an additional 'parentinverse' offset in each object
+                                                               SG_Node* 
parentinversenode = new SG_Node(NULL,NULL,SG_Callbacks());
+                                                       
+                                                               // define a 
normal parent relationship for this node.
+                                                               
KX_NormalParentRelation * parent_relation = KX_NormalParentRelation::New();
+                                                               
parentinversenode->SetParentRelation(parent_relation);
+                                       
+                                                               parentChildLink 
pclink;
+                                                               
pclink.m_blenderchild = blenderobject;
+                                                               
pclink.m_gamechildnode = parentinversenode;
+                                                               
vec_parent_child.push_back(pclink);
+
+                                                               float* fl = 
(float*) blenderobject->parentinv;
+                                                               MT_Transform 
parinvtrans(fl);
+                                                               
parentinversenode->SetLocalPosition(parinvtrans.getOrigin());
+                                                               
parentinversenode->SetLocalOrientation(parinvtrans.getBasis());
+                                                               
+                                                               
parentinversenode->AddChild(gameobj->GetSGNode());
+                                                       }
+                                                       
+                                                       // needed for python 
scripting
+                                                       
logicmgr->RegisterGameObjectName(gameobj->GetName(),gameobj);
+
+                                                       // needed for dynamic 
object morphing
+                                                       
logicmgr->RegisterGameObj(gameobj, blenderobject);
+                                                       for (int i = 0; i < 
gameobj->GetMeshCount(); i++)
+                                                               
logicmgr->RegisterGameMeshName(gameobj->GetMesh(i)->GetName(), blenderobject);
+                                       
+                                                       
converter->RegisterGameObject(gameobj, blenderobject);  
+                                                       // this was put in 
rapidly, needs to be looked at more closely
+                                                       // only draw/use 
objects in active 'blender' layers
+                                       
+                                                       
logicbrick_conversionlist->Add(gameobj->AddRef());
+                                                       
+                                                       if 
(converter->addInitFromFrame){
+                                                               
posPrev=gameobj->NodeGetWorldPosition();
+                                                               
angor=gameobj->NodeGetWorldOrientation();
+                                                       }
+                                                       if (isInActiveLayer)
+                                                       {
+                                                               
objectlist->Add(gameobj->AddRef());
+                                                               
//tf.Add(gameobj->GetSGNode());
+                                                               
+                                                               
gameobj->NodeUpdateGS(0,true);
+                                                               
gameobj->Bucketize();
+                                               
+                                                       }
+                                                       else
+                                                       {

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