Revision: 22679
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22679
Author:   ben2610
Date:     2009-08-21 16:15:49 +0200 (Fri, 21 Aug 2009)

Log Message:
-----------
new Armature sensor to get signal from the IK solver - part 1.

Modified Paths:
--------------
    branches/itasc/projectfiles_vc9/gameengine/gamelogic/SCA_GameLogic.vcproj
    branches/itasc/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
    branches/itasc/source/blender/blenkernel/intern/sca.c
    branches/itasc/source/blender/blenloader/intern/readfile.c
    branches/itasc/source/blender/blenloader/intern/writefile.c
    branches/itasc/source/blender/editors/space_logic/logic_window.c
    branches/itasc/source/blender/ikplugin/BIK_api.h
    branches/itasc/source/blender/ikplugin/intern/itasc_plugin.cpp
    branches/itasc/source/blender/makesdna/DNA_constraint_types.h
    branches/itasc/source/blender/makesdna/DNA_sensor_types.h
    branches/itasc/source/blender/makesrna/RNA_access.h
    branches/itasc/source/blender/makesrna/intern/rna_constraint.c
    branches/itasc/source/blender/makesrna/intern/rna_sensor.c
    branches/itasc/source/gameengine/Converter/KX_ConvertSensors.cpp
    branches/itasc/source/gameengine/GameLogic/SCA_EventManager.h
    branches/itasc/source/gameengine/Ketsji/KX_Scene.cpp

Added Paths:
-----------
    branches/itasc/source/gameengine/GameLogic/SCA_BasicEventManager.cpp
    branches/itasc/source/gameengine/GameLogic/SCA_BasicEventManager.h
    branches/itasc/source/gameengine/Ketsji/KX_ArmatureSensor.cpp
    branches/itasc/source/gameengine/Ketsji/KX_ArmatureSensor.h

Modified: 
branches/itasc/projectfiles_vc9/gameengine/gamelogic/SCA_GameLogic.vcproj
===================================================================
--- branches/itasc/projectfiles_vc9/gameengine/gamelogic/SCA_GameLogic.vcproj   
2009-08-21 14:12:06 UTC (rev 22678)
+++ branches/itasc/projectfiles_vc9/gameengine/gamelogic/SCA_GameLogic.vcproj   
2009-08-21 14:15:49 UTC (rev 22679)
@@ -498,6 +498,10 @@
                                >
                        </File>
                        <File
+                               
RelativePath="..\..\..\source\gameengine\GameLogic\SCA_BasicEventManager.cpp"
+                               >
+                       </File>
+                       <File
                                
RelativePath="..\..\..\source\gameengine\GameLogic\SCA_DelaySensor.cpp"
                                >
                        </File>
@@ -659,6 +663,10 @@
                                >
                        </File>
                        <File
+                               
RelativePath="..\..\..\source\gameengine\GameLogic\SCA_BasicEventManager.h"
+                               >
+                       </File>
+                       <File
                                
RelativePath="..\..\..\source\gameengine\GameLogic\SCA_DelaySensor.h"
                                >
                        </File>

Modified: branches/itasc/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
===================================================================
--- branches/itasc/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj  
2009-08-21 14:12:06 UTC (rev 22678)
+++ branches/itasc/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj  
2009-08-21 14:15:49 UTC (rev 22679)
@@ -718,6 +718,10 @@
                                Name="SensorsImp"
                                >
                                <File
+                                       
RelativePath="..\..\..\source\gameengine\Ketsji\KX_ArmatureSensor.cpp"
+                                       >
+                               </File>
+                               <File
                                        
RelativePath="..\..\..\source\gameengine\Ketsji\KX_MouseFocusSensor.cpp"
                                        >
                                </File>
@@ -1027,6 +1031,10 @@
                                Name="Sensors"
                                >
                                <File
+                                       
RelativePath="..\..\..\source\gameengine\Ketsji\KX_ArmatureSensor.h"
+                                       >
+                               </File>
+                               <File
                                        
RelativePath="..\..\..\source\gameengine\Ketsji\KX_MouseFocusSensor.h"
                                        >
                                </File>

Modified: branches/itasc/source/blender/blenkernel/intern/sca.c
===================================================================
--- branches/itasc/source/blender/blenkernel/intern/sca.c       2009-08-21 
14:12:06 UTC (rev 22678)
+++ branches/itasc/source/blender/blenkernel/intern/sca.c       2009-08-21 
14:15:49 UTC (rev 22679)
@@ -152,6 +152,9 @@
        case SENS_PROPERTY:
                sens->data= MEM_callocN(sizeof(bPropertySensor), "propsens");
                break;
+       case SENS_ARMATURE:
+               sens->data= MEM_callocN(sizeof(bArmatureSensor), "armsens");
+               break;
        case SENS_ACTUATOR:
                sens->data= MEM_callocN(sizeof(bActuatorSensor), "actsens");
                break;

Modified: branches/itasc/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/itasc/source/blender/blenloader/intern/readfile.c  2009-08-21 
14:12:06 UTC (rev 22678)
+++ branches/itasc/source/blender/blenloader/intern/readfile.c  2009-08-21 
14:15:49 UTC (rev 22679)
@@ -2146,6 +2146,8 @@
                                data = ((bKinematicConstraint*)con->data);
                                data->tar = newlibadr(fd, id->lib, data->tar);
                                data->poletar = newlibadr(fd, id->lib, 
data->poletar);
+                               con->lin_error = 0.f;
+                               con->rot_error = 0.f;
                        }
                        break;
                case CONSTRAINT_TYPE_TRACKTO:

Modified: branches/itasc/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/itasc/source/blender/blenloader/intern/writefile.c 2009-08-21 
14:12:06 UTC (rev 22678)
+++ branches/itasc/source/blender/blenloader/intern/writefile.c 2009-08-21 
14:15:49 UTC (rev 22679)
@@ -707,6 +707,9 @@
                case SENS_PROPERTY:
                        writestruct(wd, DATA, "bPropertySensor", 1, sens->data);
                        break;
+               case SENS_ARMATURE:
+                       writestruct(wd, DATA, "bArmatureSensor", 1, sens->data);
+                       break;
                case SENS_ACTUATOR:
                        writestruct(wd, DATA, "bActuatorSensor", 1, sens->data);
                        break;

Modified: branches/itasc/source/blender/editors/space_logic/logic_window.c
===================================================================
--- branches/itasc/source/blender/editors/space_logic/logic_window.c    
2009-08-21 14:12:06 UTC (rev 22678)
+++ branches/itasc/source/blender/editors/space_logic/logic_window.c    
2009-08-21 14:15:49 UTC (rev 22679)
@@ -634,6 +634,8 @@
                return "Keyboard";
        case SENS_PROPERTY:
                return "Property";
+       case SENS_ARMATURE:
+               return "Armature";
        case SENS_ACTUATOR:
                return "Actuator";
        case SENS_DELAY:
@@ -661,7 +663,7 @@
        /* the number needs to match defines in game.h */
        return "Sensors %t|Always %x0|Delay %x13|Keyboard %x3|Mouse %x5|"
                "Touch %x1|Collision %x6|Near %x2|Radar %x7|"
-               "Property %x4|Random %x8|Ray %x9|Message %x10|Joystick 
%x11|Actuator %x12";
+               "Property %x4|Random %x8|Ray %x9|Message %x10|Joystick 
%x11|Actuator %x12|Armature %x14";
 }
 
 static char *controller_name(int type)
@@ -964,6 +966,7 @@
        case SENS_NEAR:                 return TH_PANEL; 
        case SENS_KEYBOARD:             return TH_PANEL;
        case SENS_PROPERTY:             return TH_PANEL;
+       case SENS_ARMATURE:             return TH_PANEL;
        case SENS_ACTUATOR:             return TH_PANEL;
        case SENS_MOUSE:                return TH_PANEL;
        case SENS_RADAR:                return TH_PANEL;
@@ -1039,12 +1042,51 @@
                         "Invert the level (output) of this sensor");
 }
 
-static short draw_sensorbuttons(bSensor *sens, uiBlock *block, short xco, 
short yco, short width,char* objectname)
+static void check_armature_bone_constraint(Object *ob, char *posechannel, char 
*constraint)
 {
+       /* check that bone exist in the active object */
+       if (ob->type == OB_ARMATURE && ob->pose) {
+               bPoseChannel *pchan;
+               bPose *pose = ob->pose;
+               for (pchan=pose->chanbase.first; pchan; pchan=pchan->next) {
+                       if (!strcmp(pchan->name, posechannel)) {
+                               /* found it, now look for constraint channel */
+                               bConstraint *con;
+                               for (con=pchan->constraints.first; con; 
con=con->next) {
+                                       if (!strcmp(con->name, constraint)) {
+                                               /* found it, all ok */
+                                               return;                         
                
+                                       }
+                               }
+                               /* didn't find constraint, make empty */
+                               constraint[0] = 0;
+                               return;
+                       }
+               }
+       }
+       /* didn't find any */
+       posechannel[0] = 0;
+       constraint[0] = 0;
+}
+
+static void check_armature_sensor(bContext *C, void *arg1_but, void *arg2_sens)
+{
+       bArmatureSensor *sens = arg2_sens;
+       uiBut *but = arg1_but;
+       Object *ob= CTX_data_active_object(C);
+
+       /* check that bone exist in the active object */
+       but->retval = B_REDR;
+       check_armature_bone_constraint(ob, sens->posechannel, sens->constraint);
+}
+
+static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, 
short xco, short yco, short width,char* objectname)
+{
        bNearSensor      *ns           = NULL;
        bTouchSensor     *ts           = NULL;
        bKeyboardSensor  *ks           = NULL;
        bPropertySensor  *ps           = NULL;
+       bArmatureSensor  *arm          = NULL;
        bMouseSensor     *ms           = NULL;
        bCollisionSensor *cs           = NULL;
        bRadarSensor     *rs           = NULL;
@@ -1054,6 +1096,7 @@
        bJoystickSensor  *joy              = NULL;
        bActuatorSensor  *as           = NULL;
        bDelaySensor     *ds               = NULL;
+       uiBut *but;
        short ysize;
        char *str;
        
@@ -1266,6 +1309,45 @@
                        yco-= ysize;
                        break;
                }
+       case SENS_ARMATURE:
+               {
+                       ysize= 70;
+                       
+                       glRects(xco, yco-ysize, xco+width, yco);
+                       uiEmboss((float)xco, (float)yco-ysize,
+                               (float)xco+width, (float)yco, 1);
+                       
+                       draw_default_sensor_header(sens, block, xco, yco, 
width);
+                       arm= sens->data;
+
+                       if (ob->type == OB_ARMATURE) {
+                               uiBlockBeginAlign(block);
+                               but = uiDefBut(block, TEX, 1, "Bone: ",
+                                               (xco+10), (yco-44), 
(width-20)/2, 19,
+                                               arm->posechannel, 0, 31, 0, 0,
+                                               "Bone on which you want to 
check a constraint");
+                               uiButSetFunc(but, check_armature_sensor, but, 
arm);
+                               but = uiDefBut(block, TEX, 1, "Cons: ",
+                                               (xco+10)+(width-20)/2, 
(yco-44), (width-20)/2, 19,
+                                               arm->constraint, 0, 31, 0, 0,
+                                               "Name of the constraint you 
want to control");
+                               uiButSetFunc(but, check_armature_sensor, but, 
arm);
+                               uiBlockEndAlign(block);
+
+                               str= "Type %t|State changed %x0|Lin error below 
%x1|Lin error above %x2|Rot error below %x3|Rot error above %x4"; 
+
+                               uiDefButI(block, MENU, B_REDR, str,             
        xco+10,yco-66,0.4*(width-20), 19,
+                                       &arm->type, 0, 31, 0, 0, "Type");
+                       
+                               if (arm->type != SENS_ARM_STATE_CHANGED)
+                               {
+                                       uiDefButF(block, NUM, 1, "Value: ",     
        xco+10+0.4*(width-20),yco-66,0.6*(width-20), 19,
+                                       &arm->value, -10000.0, 10000.0, 100, 0, 
"Test the error against this value");
+                               }
+                       }
+                       yco-= ysize;
+                       break;
+               }
        case SENS_ACTUATOR:
                {
                        ysize= 48;
@@ -1682,28 +1764,7 @@
 
        /* check that bone exist in the active object */
        but->retval = B_REDR;
-       if (ob->type == OB_ARMATURE && ob->pose) {
-               bPoseChannel *pchan;
-               bPose *pose = ob->pose;
-               for (pchan=pose->chanbase.first; pchan; pchan=pchan->next) {
-                       if (!strcmp(pchan->name, act->posechannel)) {
-                               /* found it, now look for constraint channel */
-                               bConstraint *con;
-                               for (con=pchan->constraints.first; con; 
con=con->next) {
-                                       if (!strcmp(con->name, 
act->constraint)) {
-                                               /* found it, all ok */
-                                               return;                         
                
-                                       }
-                               }
-                               /* didn't find constraint, make empty */
-                               act->constraint[0] = 0;
-                               return;
-                       }
-               }
-       }
-       /* didn't find any */
-       act->posechannel[0] = 0;
-       act->constraint[0] = 0;
+       check_armature_bone_constraint(ob, act->posechannel, act->constraint);
 }
 
 
@@ -3279,7 +3340,7 @@
                                                uiButSetFunc(but, 
make_unique_prop_names_cb, sens->name, (void*) 0);
 
                                                sens->otype= sens->type;
-                                               yco= draw_sensorbuttons(sens, 
block, xco, yco, width,ob->id.name);
+                                               yco= draw_sensorbuttons(ob, 
sens, block, xco, yco, width,ob->id.name);
                                                if(yco-6 < ycoo) ycoo= 
(yco+ycoo-20)/2;
                                        }
                                        else {

Modified: branches/itasc/source/blender/ikplugin/BIK_api.h
===================================================================
--- branches/itasc/source/blender/ikplugin/BIK_api.h    2009-08-21 14:12:06 UTC 
(rev 22678)
+++ branches/itasc/source/blender/ikplugin/BIK_api.h    2009-08-21 14:15:49 UTC 
(rev 22679)
@@ -39,19 +39,51 @@
 struct bPose;
 struct bArmature;
 struct Scene;
+struct bConstraint;
 
+enum BIK_ParamType {
+       BIK_PARAM_TYPE_FLOAT = 0,
+       BIK_PARAM_TYPE_INT,
+       BIK_PARAM_TYPE_STRING,
+};
+
+struct BIK_ParamValue {
+       short type;                     /* BIK_PARAM_TYPE_.. */
+       short length;           /* for string, does not include terminating 0 */
+       union {
+               float f[8];
+               int   i[8];
+               char  s[32];
+       } value;                
+};
+typedef struct BIK_ParamValue BIK_ParamValue;
+
 void BIK_initialize_tree(struct Scene *scene, struct Object *ob, float ctime);
 void BIK_execute_tree(struct Scene *scene, struct Object *ob, struct 
bPoseChannel *pchan, float ctime);
 void BIK_release_tree(struct Scene *scene, struct Object *ob, float ctime);

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