Index: cpp/frams/config/f0-SDK.def
===================================================================
--- cpp/frams/config/f0-SDK.def	(revision 945)
+++ cpp/frams/config/f0-SDK.def	(revision 952)
@@ -1,3 +1,3 @@
-CLASS(Model,f0_model,m)
+CLASS(Model,f0_model,m,Model)
 GROUP(Properties)
 GROUP(Visual)
@@ -6,5 +6,5 @@
 ENDCLASS
 
-CLASS(Part,f0_part,p)
+CLASS(Part,f0_part,p,Part)
 GROUP(Geometry)
 GROUP(Other properties)
@@ -39,5 +39,5 @@
 ENDCLASS
 
-CLASS(Joint,f0_joint,j)
+CLASS(Joint,f0_joint,j,Joint)
 GROUP(Connections)
 GROUP(Geometry)
@@ -73,5 +73,5 @@
 ENDCLASS
 
-CLASS(Joint,f0_nodeltajoint,j,NOXML)
+CLASS(Joint,f0_nodeltajoint,j,Joint,NOXML)
 GROUP(Connections)
 GROUP(Geometry)
@@ -101,5 +101,5 @@
 ENDCLASS
 
-CLASS(Neuro,f0_neuro,n)
+CLASS(Neuro,f0_neuro,n,Neuro)
 GROUP(Connections)
 GROUP(Other)
@@ -117,5 +117,5 @@
 ENDCLASS
 
-CLASS(NeuroConn,f0_neuroconn,c)
+CLASS(NeuroConn,f0_neuroconn,c,Neuron connection)
 GROUP(Connection)
 GROUP(Other)
@@ -141,13 +141,36 @@
 ENDNEUROCLASS
 
-NEUROCLASS(Gyro,G,Gyroscope,`Equilibrium sensor.\n0=the stick is horizontal\n+1/-1=the stick is vertical',0,1,2)
+NEUROCLASS(Gyro,G,Gyroscope,`Tilt sensor.\nSignal is proportional to sin(angle) = most sensitive in horizontal orientation.\n0=the stick is horizontal\n+1/-1=the stick is vertical',0,1,2)
+SHAPETYPE(BallAndStickShapeType)
 VISUALHINTS(ReceptorClass)
 SYMBOL(`8,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,12,43,24,48,24,48,19,38,19,38,24,43,24,43,54,48,54,48,64,43,69,38,64,38,54,43,54,5,63,69,58,74,48,79,38,79,28,74,23,69,1,43,79,43,74,1,23,69,26,66,1,63,69,60,66,1,55,76,53,73,1,31,75,33,72')
 ENDNEUROCLASS
 
-NEUROCLASS(Touch,T,Touch,`Touch sensor.\n-1=no contact\n0=just touching\n>0=pressing, value depends on the force applied',0,1,1)
+NEUROCLASS(GyroP,Gp,Part Gyroscope,`Tilt sensor. Signal is directly proportional to the tilt angle.\n0=the part X axis is horizontal\n+1/-1=the axis is vertical',0,1,1)
+VISUALHINTS(ReceptorClass)
+SYMBOL(`8,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,12,43,24,48,24,48,19,38,19,38,24,43,24,43,54,48,54,48,64,43,69,38,64,38,54,43,54,5,63,69,58,74,48,79,38,79,28,74,23,69,1,43,79,43,74,1,23,69,26,66,1,63,69,60,66,1,55,76,53,73,1,31,75,33,72')
+NEUROPROP(ry,1,0,rotation.y,f,-6.282,6.282,0,ry)
+NEUROPROP(rz,1,0,rotation.z,f,-6.282,6.282,0,rz)
+ENDNEUROCLASS
+
+NEUROCLASS(Touch,T,Touch,`Touch and proximity sensor (Tc+Tp combined)\n-1=no contact\n0=just touching\n>0=pressing, value depends on the force applied (not implemented in ODE mode)',0,1,1)
 VISUALHINTS(ReceptorClass)
 SYMBOL(`2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50')
 NEUROPROP(r,1,0,Range,f,0.0,1.0,1.0,range)
+NEUROPROP(ry,1,0,rotation.y,f,-6.282,6.282,0,ry)
+NEUROPROP(rz,1,0,rotation.z,f,-6.282,6.282,0,rz)
+ENDNEUROCLASS
+
+NEUROCLASS(TouchC,Tc,Touch contact,`Touch sensor.\n-1=no contact\n0=the Part is touching the obstacle\n>0=pressing, value depends on the force applied (not implemented in ODE mode)',0,1,1)
+VISUALHINTS(ReceptorClass)
+SYMBOL(`2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50')
+ENDNEUROCLASS
+
+NEUROCLASS(TouchP,Tp,Touch proximity,`Proximity sensor detecting obstacles along the X axis.\n-1=distance is \'r\' or more\n0=zero distance',0,1,1)
+VISUALHINTS(ReceptorClass)
+SYMBOL(`2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50')
+NEUROPROP(r,1,0,Range,f,0.0,1.0,1.0,range)
+NEUROPROP(ry,1,0,rotation.y,f,-6.282,6.282,0,ry)
+NEUROPROP(rz,1,0,rotation.z,f,-6.282,6.282,0,rz)
 ENDNEUROCLASS
 
Index: cpp/frams/config/f0.def
===================================================================
--- cpp/frams/config/f0.def	(revision 945)
+++ cpp/frams/config/f0.def	(revision 952)
@@ -1,3 +1,3 @@
-CLASS(Model,f0_model,m)
+CLASS(Model,f0_model,m,Model)
 GROUP(Properties)
 GROUP(Visual)
@@ -6,5 +6,5 @@
 ENDCLASS
 
-CLASS(Part,f0_part,p)
+CLASS(Part,f0_part,p,Part)
 GROUP(Geometry)
 GROUP(Other properties)
@@ -39,5 +39,5 @@
 ENDCLASS
 
-CLASS(Joint,f0_joint,j)
+CLASS(Joint,f0_joint,j,Joint)
 GROUP(Connections)
 GROUP(Geometry)
@@ -73,5 +73,5 @@
 ENDCLASS
 
-CLASS(Joint,f0_nodeltajoint,j,NOXML)
+CLASS(Joint,f0_nodeltajoint,j,Joint,NOXML)
 GROUP(Connections)
 GROUP(Geometry)
@@ -101,5 +101,5 @@
 ENDCLASS
 
-CLASS(Neuro,f0_neuro,n)
+CLASS(Neuro,f0_neuro,n,Neuro)
 GROUP(Connections)
 GROUP(Other)
@@ -117,5 +117,5 @@
 ENDCLASS
 
-CLASS(NeuroConn,f0_neuroconn,c)
+CLASS(NeuroConn,f0_neuroconn,c,Neuron connection)
 GROUP(Connection)
 GROUP(Other)
@@ -141,13 +141,36 @@
 ENDNEUROCLASS
 
-NEUROCLASS(Gyro,G,Gyroscope,`Equilibrium sensor.\n0=the stick is horizontal\n+1/-1=the stick is vertical',0,1,2)
+NEUROCLASS(Gyro,G,Gyroscope,`Tilt sensor.\nSignal is proportional to sin(angle) = most sensitive in horizontal orientation.\n0=the stick is horizontal\n+1/-1=the stick is vertical',0,1,2)
+SHAPETYPE(BallAndStickShapeType)
 VISUALHINTS(ReceptorClass)
 SYMBOL(`8,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,12,43,24,48,24,48,19,38,19,38,24,43,24,43,54,48,54,48,64,43,69,38,64,38,54,43,54,5,63,69,58,74,48,79,38,79,28,74,23,69,1,43,79,43,74,1,23,69,26,66,1,63,69,60,66,1,55,76,53,73,1,31,75,33,72')
 ENDNEUROCLASS
 
-NEUROCLASS(Touch,T,Touch,`Touch sensor.\n-1=no contact\n0=just touching\n>0=pressing, value depends on the force applied',0,1,1)
+NEUROCLASS(GyroP,Gp,Part Gyroscope,`Tilt sensor. Signal is directly proportional to the tilt angle.\n0=the part X axis is horizontal\n+1/-1=the axis is vertical',0,1,1)
+VISUALHINTS(ReceptorClass)
+SYMBOL(`8,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,12,43,24,48,24,48,19,38,19,38,24,43,24,43,54,48,54,48,64,43,69,38,64,38,54,43,54,5,63,69,58,74,48,79,38,79,28,74,23,69,1,43,79,43,74,1,23,69,26,66,1,63,69,60,66,1,55,76,53,73,1,31,75,33,72')
+NEUROPROP(ry,1,0,rotation.y,f,-6.282,6.282,0,ry)
+NEUROPROP(rz,1,0,rotation.z,f,-6.282,6.282,0,rz)
+ENDNEUROCLASS
+
+NEUROCLASS(Touch,T,Touch,`Touch and proximity sensor (Tc+Tp combined)\n-1=no contact\n0=just touching\n>0=pressing, value depends on the force applied (not implemented in ODE mode)',0,1,1)
 VISUALHINTS(ReceptorClass)
 SYMBOL(`2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50')
 NEUROPROP(r,1,0,Range,f,0.0,1.0,1.0,range)
+NEUROPROP(ry,1,0,rotation.y,f,-6.282,6.282,0,ry)
+NEUROPROP(rz,1,0,rotation.z,f,-6.282,6.282,0,rz)
+ENDNEUROCLASS
+
+NEUROCLASS(TouchC,Tc,Touch contact,`Touch sensor.\n-1=no contact\n0=the Part is touching the obstacle\n>0=pressing, value depends on the force applied (not implemented in ODE mode)',0,1,1)
+VISUALHINTS(ReceptorClass)
+SYMBOL(`2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50')
+ENDNEUROCLASS
+
+NEUROCLASS(TouchP,Tp,Touch proximity,`Proximity sensor detecting obstacles along the X axis.\n-1=distance is \'r\' or more\n0=zero distance',0,1,1)
+VISUALHINTS(ReceptorClass)
+SYMBOL(`2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50')
+NEUROPROP(r,1,0,Range,f,0.0,1.0,1.0,range)
+NEUROPROP(ry,1,0,rotation.y,f,-6.282,6.282,0,ry)
+NEUROPROP(rz,1,0,rotation.z,f,-6.282,6.282,0,rz)
 ENDNEUROCLASS
 
