[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15597] branches/apricot/source: svn merge -r15566:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/ blender

Campbell Barton ideasman42 at gmail.com
Wed Jul 16 09:11:14 CEST 2008


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




More information about the Bf-blender-cvs mailing list