[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15622] branches/apricot/source: svn merge -r15608:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/ blender
Campbell Barton
ideasman42 at gmail.com
Fri Jul 18 15:06:50 CEST 2008
Revision: 15622
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15622
Author: campbellbarton
Date: 2008-07-18 15:06:49 +0200 (Fri, 18 Jul 2008)
Log Message:
-----------
svn merge -r15608:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/blender
Modified Paths:
--------------
branches/apricot/source/blender/python/api2_2x/doc/Render.py
branches/apricot/source/blender/python/api2_2x/sceneRender.c
branches/apricot/source/blender/src/editmesh.c
branches/apricot/source/blender/src/editmesh_lib.c
branches/apricot/source/blender/src/interface.c
branches/apricot/source/gameengine/Ketsji/KX_Scene.cpp
Modified: branches/apricot/source/blender/python/api2_2x/doc/Render.py
===================================================================
--- branches/apricot/source/blender/python/api2_2x/doc/Render.py 2008-07-18 13:05:15 UTC (rev 15621)
+++ branches/apricot/source/blender/python/api2_2x/doc/Render.py 2008-07-18 13:06:49 UTC (rev 15622)
@@ -833,9 +833,7 @@
def enableCropping(toggle):
"""
- Enable/disable exclusion of border rendering from total image.
- @type toggle: int
- @param toggle: pass 1 for on / 0 for off
+ Deprecated: see the L{crop} attribute.
"""
def setImageType(type):
Modified: branches/apricot/source/blender/python/api2_2x/sceneRender.c
===================================================================
--- branches/apricot/source/blender/python/api2_2x/sceneRender.c 2008-07-18 13:05:15 UTC (rev 15621)
+++ branches/apricot/source/blender/python/api2_2x/sceneRender.c 2008-07-18 13:06:49 UTC (rev 15622)
@@ -985,7 +985,7 @@
/* return M_Render_BitToggleInt( args, R_MOVIECROP,
&self->renderContext->mode );
*/
- printf("cropping option is now default, obsolete\n");
+ printf("obsolete: movie cropping option is now default\n");
Py_RETURN_NONE;
}
Modified: branches/apricot/source/blender/src/editmesh.c
===================================================================
--- branches/apricot/source/blender/src/editmesh.c 2008-07-18 13:05:15 UTC (rev 15621)
+++ branches/apricot/source/blender/src/editmesh.c 2008-07-18 13:06:49 UTC (rev 15622)
@@ -340,8 +340,9 @@
#endif
EM_remove_selection(efa, EDITFACE);
- if (G.editMesh->act_face==efa)
- EM_set_actFace(NULL);
+ if (G.editMesh->act_face==efa) {
+ EM_set_actFace( G.editMesh->faces.first == efa ? NULL : G.editMesh->faces.first);
+ }
CustomData_em_free_block(&G.editMesh->fdata, &efa->data);
if(efa->fast==0)
@@ -1062,7 +1063,7 @@
EM_fgon_flags();
if (EM_get_actFace(0)==NULL) {
- EM_set_actFace(NULL); /* will use the first face, this is so we alwats have an active face */
+ EM_set_actFace( G.editMesh->faces.first ); /* will use the first face, this is so we alwats have an active face */
}
/* vertex coordinates change with cache edit, need to recalc */
Modified: branches/apricot/source/blender/src/editmesh_lib.c
===================================================================
--- branches/apricot/source/blender/src/editmesh_lib.c 2008-07-18 13:05:15 UTC (rev 15621)
+++ branches/apricot/source/blender/src/editmesh_lib.c 2008-07-18 13:06:49 UTC (rev 15622)
@@ -72,12 +72,7 @@
/* this replaces the active flag used in uv/face mode */
void EM_set_actFace(EditFace *efa)
{
- if (efa) {
- G.editMesh->act_face = efa;
- } else {
- /* True or NULL if we have no faces, so we always have an active face */
- G.editMesh->act_face = G.editMesh->faces.first;
- }
+ G.editMesh->act_face = efa;
}
EditFace * EM_get_actFace(int sloppy)
Modified: branches/apricot/source/blender/src/interface.c
===================================================================
--- branches/apricot/source/blender/src/interface.c 2008-07-18 13:05:15 UTC (rev 15621)
+++ branches/apricot/source/blender/src/interface.c 2008-07-18 13:06:49 UTC (rev 15622)
@@ -5405,7 +5405,9 @@
int getsizex, getsizey;
bwin_getsize(win, &getsizex, &getsizey);
- block->aspect= 2.0/( (getsizex)*block->winmat[0][0]);
+ /* TODO - investigate why block->winmat[0][0] is negative
+ * in the image view when viewRedrawForce is called */
+ block->aspect= 2.0/fabs( (getsizex)*block->winmat[0][0]);
}
uiSetCurFont(block, font);
Modified: branches/apricot/source/gameengine/Ketsji/KX_Scene.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_Scene.cpp 2008-07-18 13:05:15 UTC (rev 15621)
+++ branches/apricot/source/gameengine/Ketsji/KX_Scene.cpp 2008-07-18 13:06:49 UTC (rev 15622)
@@ -509,6 +509,11 @@
// hierarchy that's because first ALL bricks must exist in the new
// replica of the hierarchy in order to make cross-links work properly
// !
+// It is VERY important that the order of sensors and actuators in
+// the replicated object is preserved: it is is used to reconnect the logic.
+// This method is more robust then using the bricks name in case of complex
+// group replication. The replication of logic bricks is done in
+// SCA_IObject::ReParentLogic(), make sure it preserves the order of the bricks.
void KX_Scene::ReplicateLogic(KX_GameObject* newobj)
{
// also relink the controller to sensors/actuators
@@ -531,37 +536,36 @@
for (vector<SCA_ISensor*>::iterator its = linkedsensors.begin();!(its==linkedsensors.end());its++)
{
SCA_ISensor* oldsensor = (*its);
- STR_String name = oldsensor->GetName();
- //find this name in the list
- SCA_ISensor* newsensor = newobj->FindSensor(name);
+ SCA_IObject* oldsensorobj = oldsensor->GetParent();
+ SCA_IObject* newsensorobj = NULL;
- if (newsensor)
+ // the original owner of the sensor has been replicated?
+ void **h_obj = m_map_gameobject_to_replica[oldsensorobj];
+ if (h_obj)
+ newsensorobj = (SCA_IObject*)(*h_obj);
+ if (!newsensorobj)
{
- // relink this newsensor to the controller
- m_logicmgr->RegisterToSensor(cont,newsensor);
+ // no, then the sensor points outside the hierachy, keep it the same
+ m_logicmgr->RegisterToSensor(cont,oldsensor);
}
else
{
- // it can be linked somewhere in the hierarchy or...
- for (vector<KX_GameObject*>::iterator git = m_logicHierarchicalGameObjects.begin();
- !(git==m_logicHierarchicalGameObjects.end());++git)
+ // yes, then the new sensor has the same position
+ SCA_SensorList& sensorlist = oldsensorobj->GetSensors();
+ SCA_SensorList::iterator sit;
+ SCA_ISensor* newsensor = NULL;
+ int sensorpos;
+
+ for (sensorpos=0, sit=sensorlist.begin(); sit!=sensorlist.end(); sit++, sensorpos++)
{
- newsensor = (*git)->FindSensor(name);
- if (newsensor)
+ if ((*sit) == oldsensor)
+ {
+ newsensor = newsensorobj->GetSensors().at(sensorpos);
break;
- }
-
- if (newsensor)
- {
- // relink this newsensor to the controller somewhere else within this
- // hierarchy
- m_logicmgr->RegisterToSensor(cont,newsensor);
+ }
}
- else
- {
- // must be an external sensor, so...
- m_logicmgr->RegisterToSensor(cont,oldsensor);
- }
+ assert(newsensor != NULL);
+ m_logicmgr->RegisterToSensor(cont,newsensor);
}
}
@@ -569,38 +573,38 @@
for (vector<SCA_IActuator*>::iterator ita = linkedactuators.begin();!(ita==linkedactuators.end());ita++)
{
SCA_IActuator* oldactuator = (*ita);
- STR_String name = oldactuator->GetName();
- //find this name in the list
- SCA_IActuator* newactuator = newobj->FindActuator(name);
- if (newactuator)
+ SCA_IObject* oldactuatorobj = oldactuator->GetParent();
+ SCA_IObject* newactuatorobj = NULL;
+
+ // the original owner of the sensor has been replicated?
+ void **h_obj = m_map_gameobject_to_replica[oldactuatorobj];
+ if (h_obj)
+ newactuatorobj = (SCA_IObject*)(*h_obj);
+
+ if (!newactuatorobj)
{
- // relink this newsensor to the controller
- m_logicmgr->RegisterToActuator(cont,newactuator);
- newactuator->SetUeberExecutePriority(m_ueberExecutionPriority);
+ // no, then the sensor points outside the hierachy, keep it the same
+ m_logicmgr->RegisterToActuator(cont,oldactuator);
}
else
{
- // it can be linked somewhere in the hierarchy or...
- for (vector<KX_GameObject*>::iterator git = m_logicHierarchicalGameObjects.begin();
- !(git==m_logicHierarchicalGameObjects.end());++git)
+ // yes, then the new sensor has the same position
+ SCA_ActuatorList& actuatorlist = oldactuatorobj->GetActuators();
+ SCA_ActuatorList::iterator ait;
+ SCA_IActuator* newactuator = NULL;
+ int actuatorpos;
+
+ for (actuatorpos=0, ait=actuatorlist.begin(); ait!=actuatorlist.end(); ait++, actuatorpos++)
{
- newactuator= (*git)->FindActuator(name);
- if (newactuator)
+ if ((*ait) == oldactuator)
+ {
+ newactuator = newactuatorobj->GetActuators().at(actuatorpos);
break;
- }
-
- if (newactuator)
- {
- // relink this actuator to the controller somewhere else within this
- // hierarchy
- m_logicmgr->RegisterToActuator(cont,newactuator);
- newactuator->SetUeberExecutePriority(m_ueberExecutionPriority);
+ }
}
- else
- {
- // must be an external actuator, so...
- m_logicmgr->RegisterToActuator(cont,oldactuator);
- }
+ assert(newactuator != NULL);
+ m_logicmgr->RegisterToActuator(cont,newactuator);
+ newactuator->SetUeberExecutePriority(m_ueberExecutionPriority);
}
}
}
@@ -669,19 +673,22 @@
}
// don't replicate logic now: we assume that the objects in the group can have
// logic relationship, even outside parent relationship
+ // In order to match 3D view, the position of groupobj is used as a
+ // transformation matrix instead of the new position. This means that
+ // the group reference point is 0,0,0
- MT_Point3 newpos = groupobj->NodeGetWorldPosition();
- replica->NodeSetLocalPosition(newpos);
-
- MT_Matrix3x3 newori = groupobj->NodeGetWorldOrientation();
- replica->NodeSetLocalOrientation(newori);
-
// get the rootnode's scale
- MT_Vector3 newscale = groupobj->GetSGNode()->GetRootSGParent()->GetLocalScale();
-
+ MT_Vector3 newscale = groupobj->NodeGetWorldScaling();
// set the replica's relative scale with the rootnode's scale
replica->NodeSetRelativeScale(newscale);
+ MT_Matrix3x3 newori = groupobj->NodeGetWorldOrientation() * gameobj->NodeGetWorldOrientation();
+ replica->NodeSetLocalOrientation(newori);
+
+ MT_Point3 newpos = groupobj->NodeGetWorldPosition() +
+ newscale*(groupobj->NodeGetWorldOrientation() * gameobj->NodeGetWorldPosition());
+ replica->NodeSetLocalPosition(newpos);
+
if (replica->GetPhysicsController())
{
replica->GetPhysicsController()->setPosition(newpos);
More information about the Bf-blender-cvs
mailing list