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