Index: cpp/gdk/3d.cpp
===================================================================
--- cpp/gdk/3d.cpp	(revision 74)
+++ cpp/gdk/3d.cpp	(revision 80)
@@ -3,9 +3,7 @@
 // Refer to http://www.framsticks.com/ for further information.
 
-#include "nonstd.h"
-#include <math.h>
-#include <string.h>
+#include "nonstd_math.h"
+#include "framsg.h"
 #include "3d.h"
-#include "framsg.h"
 
 Pt3D operator+(const Pt3D &p1,const Pt3D &p2) {return Pt3D(p1.x+p2.x,p1.y+p2.y,p1.z+p2.z);}
Index: cpp/gdk/3d.h
===================================================================
--- cpp/gdk/3d.h	(revision 74)
+++ cpp/gdk/3d.h	(revision 80)
@@ -6,5 +6,9 @@
 #define _3D_H_
 
-#include <memory.h>
+#ifdef SHP
+#include <string.h> //memcpy
+#else
+#include <memory.h> //memcpy
+#endif
 
 /**********************************
@@ -49,5 +53,6 @@
 double operator()() const;
 /** vector length = \f$\sqrt{x^2+y^2+z^2}\f$  */
-double length() const {return operator()();} 
+double length() const {return operator()();}
+double length2() const {return x*x+y*y+z*z;}
 double distanceTo(const Pt3D& p) const;
 double manhattanDistanceTo(const Pt3D& p) const;
@@ -131,3 +136,2 @@
 
 #endif
-
Index: cpp/gdk/conv_f1.cpp
===================================================================
--- cpp/gdk/conv_f1.cpp	(revision 74)
+++ cpp/gdk/conv_f1.cpp	(revision 80)
@@ -4,5 +4,5 @@
 
 #include "conv_f1.h"
-#include "nonstd.h"
+#include "nonstd_stl.h"
 #include "framsg.h"
 #include "multirange.h"
@@ -12,5 +12,6 @@
 //#define v1f1COMPATIBLE
 
-F1Props stdprops={1, 0, 1, 0.4, 0.25, 0.25, 0.25, 0.25, 0.0, 1.0, 1.0, 1 };
+F1Props stdprops={1, 0, 1, 0.4, 0.25, 0.25, 0.25, 0.25, 0.0, 1.0, 1.0, 1,
+		 0.2, 0.5,0.5,0.5 };
 
 class Builder
@@ -141,4 +142,14 @@
 	case 'E': c.energ+=(10.0-c.energ)*0.1;	break;
 	case 'e': c.energ-=c.energ*0.1;		break;
+
+	case 'D': c.cred+=(1.0-c.cred)*0.25;break;
+	case 'd': c.cred+=(0.0-c.cred)*0.25;break;
+	case 'G': c.cgreen+=(1.0-c.cgreen)*0.25;break;
+	case 'g': c.cgreen+=(0.0-c.cgreen)*0.25;break;
+	case 'B': c.cblue+=(1.0-c.cblue)*0.25;break;
+	case 'b': c.cblue+=(0.0-c.cblue)*0.25;break;
+	case 'H': c.grub+=(0.7-c.grub)*0.25;break;
+	case 'h': c.grub+=(0.05-c.grub)*0.25;break;
+
 	case '[': //neuron
 //		setdebug(g-(char*)geny,DEBUGNEURO | !l_neu);
@@ -181,4 +192,5 @@
 		// oslabianie cech wzdluz struktury
 		c.dlug=0.5*c.dlug+0.5*stdprops.dlug;
+		c.grub=0.5*c.grub+0.5*stdprops.grub;
 		c.skr=0.66*c.skr;
 		c.rot=0.66*c.rot;
@@ -251,6 +263,6 @@
 {
 double len=min(2.0,c.dlug);
-sprintf(tmp,"j:p1=%ld,p2=%ld,dx=%lg,rx=%lg,ry=%lg,rz=%lg,stam=%lg",
-	part1,part2,len,angle.x,angle.y,angle.z,c.odpor);
+sprintf(tmp,"j:p1=%ld,p2=%ld,dx=%lg,rx=%lg,ry=%lg,rz=%lg,stam=%lg,vr=%g,vg=%g,vb=%g",
+	part1,part2,len,angle.x,angle.y,angle.z,c.odpor, c.cred,c.cgreen,c.cblue);
 lastjoint_muscle_power=c.ruch;
 return model.singleStepBuild(tmp,makeRange(g));
@@ -259,6 +271,6 @@
 int Builder::growPart(F1Props &c,const char *g)
 {
-sprintf(tmp,"p:m=1,dn=%lg,fr=%lg,ing=%lg,as=%lg",
-	1.0/c.masa,c.tarcie,c.wchl,c.asym);
+sprintf(tmp,"p:m=1,dn=%lg,fr=%lg,ing=%lg,as=%lg,vs=%g,vr=%g,vg=%g,vb=%g",
+	1.0/c.masa,c.tarcie,c.wchl,c.asym, c.grub, c.cred,c.cgreen,c.cblue);
 return model.singleStepBuild(tmp,makeRange(g));
 }
Index: cpp/gdk/conv_f1.h
===================================================================
--- cpp/gdk/conv_f1.h	(revision 74)
+++ cpp/gdk/conv_f1.h	(revision 80)
@@ -14,4 +14,5 @@
 	double bendrange;
 	int resetrange;
+	double grub,cred,cgreen,cblue;
 	void wykluczanie();
 };
Index: cpp/gdk/defassign-f0_joint.h
===================================================================
--- cpp/gdk/defassign-f0_joint.h	(revision 74)
+++ cpp/gdk/defassign-f0_joint.h	(revision 80)
@@ -1,2 +1,3 @@
+
 
 
@@ -12,4 +13,7 @@
 stamina=0.25;
 vis_style="joint";
+vcolor.x=0.5;
+vcolor.y=0.5;
+vcolor.z=0.5;
 
 
@@ -37,2 +41,5 @@
 
 
+
+
+
Index: cpp/gdk/defassign-f0_neuro.h
===================================================================
--- cpp/gdk/defassign-f0_neuro.h	(revision 74)
+++ cpp/gdk/defassign-f0_neuro.h	(revision 80)
@@ -1,2 +1,3 @@
+
 
 
@@ -9,4 +10,5 @@
 part_refno=-1;
 joint_refno=-1;
+
 vis_style="neuro";
 
@@ -31,2 +33,5 @@
 
 
+
+
+
Index: cpp/gdk/defassign-f0_neuroconn.h
===================================================================
--- cpp/gdk/defassign-f0_neuroconn.h	(revision 74)
+++ cpp/gdk/defassign-f0_neuroconn.h	(revision 80)
@@ -1,2 +1,3 @@
+
 
 
@@ -31,2 +32,5 @@
 
 
+
+
+
Index: cpp/gdk/defassign-f0_part.h
===================================================================
--- cpp/gdk/defassign-f0_part.h	(revision 74)
+++ cpp/gdk/defassign-f0_part.h	(revision 80)
@@ -1,2 +1,3 @@
+
 
 // default assignments for Part : 
@@ -8,4 +9,8 @@
 assim=0.25;
 vis_style="part";
+vsize=0.2;
+vcolor.x=0.5;
+vcolor.y=0.5;
+vcolor.z=0.5;
 
 
@@ -35,2 +40,5 @@
 
 
+
+
+
Index: cpp/gdk/f0.def
===================================================================
--- cpp/gdk/f0.def	(revision 74)
+++ cpp/gdk/f0.def	(revision 80)
@@ -1,2 +1,9 @@
+CLASS(Model,f0_model,m)
+GROUP(Properties)
+GROUP(Visual)
+PROP(se,0,1024,startenergy,f,,,,startenergy)
+PROP(Vstyle,1,0,vis_style,s,0,-1,,vis_style)
+ENDCLASS
+
 CLASS(Part,f0_part,p)
 GROUP(Geometry)
@@ -17,4 +24,8 @@
 PROP(i,1,0,`info',s,,,,info)
 PROP(Vstyle,2,0,vis_style,s,0,-1,part,vis_style)
+XPROP(vs,2,0,visual thickness,f,0.05,0.7,0.2,vsize)
+XPROP(vr,2,0,red component,f,0.0,1.0,0.5,vcolor.x)
+XPROP(vg,2,1024,green component,f,0.0,1.0,0.5,vcolor.y)
+XPROP(vb,2,1024,blue component,f,0.0,1.0,0.5,vcolor.z)
 ENDCLASS
 
@@ -37,4 +48,7 @@
 PROP(i,2,0,`info',s,,,,info)
 PROP(Vstyle,3,0,vis_style,s,0,-1,joint,vis_style)
+XPROP(vr,3,0,red component,f,0.0,1.0,0.5,vcolor.x)
+XPROP(vg,3,1024,green component,f,0.0,1.0,0.5,vcolor.y)
+XPROP(vb,3,1024,blue component,f,0.0,1.0,0.5,vcolor.z)
 ENDCLASS
 
@@ -51,4 +65,7 @@
 PROP(i,2,0,`info',s,,,,info)
 PROP(Vstyle,3,0,vis_style,s,0,-1,joint,vis_style)
+XPROP(vr,3,0,red component,f,0.0,1.0,0.5,vcolor.x)
+XPROP(vg,3,1024,green component,f,0.0,1.0,0.5,vcolor.y)
+XPROP(vb,3,1024,blue component,f,0.0,1.0,0.5,vcolor.z)
 ENDCLASS
 
@@ -59,5 +76,5 @@
 PROP(p,0,0,`part ref#',d,-1,999999,-1,part_refno)
 PROP(j,0,0,`joint ref#',d,-1,999999,-1,joint_refno)
-PROP(d,1,0,item details,s,,,,details,GETSET)
+PROP(d,1,0,item details,s,,,N,details,GETSET)
 PROP(i,1,0,`info',s,,,,info)
 PROP(Vstyle,2,0,vis_style,s,0,-1,neuro,vis_style)
@@ -139,4 +156,23 @@
 ENDNEUROCLASS
 
+NEUROCLASS(VectorEye,VEye,Vector Eye [EXPERIMENTAL!],Refer to publications to learn more about this neuron.,1,1,1)
+SYMBOL(`11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24')
+NEUROPROP(tx,0,0,target.x,f,,,,target.x)
+NEUROPROP(ty,0,0,target.y,f,,,,target.y)
+NEUROPROP(tz,0,0,target.z,f,,,,target.z)
+NEUROPROP(ts,0,0,target shape,s,0,-1,0,targetShape)
+NEUROPROP(p,0,0,perspective,f,0.1,10.0,1.0,perspz)
+NEUROPROP(s,0,0,scale,f,0.1,100.0,1.0,perspscale)
+NEUROPROP(h,0,0,show hidden lines,d,0,1,0,showhidden)
+NEUROPROP(o,0,0,`output lines count (each line needs four channels)',d,0,99,0,outputcount)
+NEUROPROP(d,0,0,debug,d,0,1,0,showdebug)
+ENDNEUROCLASS
+
+NEUROCLASS(VisualMotorNeuron,VMotor,Visual-Motor Cortex [EXPERIMENTAL!],`Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron.',-1,1,0)
+NEUROPROP(noIF,0,0,number of basic features,d,,,,noIF)
+NEUROPROP(noDim,0,0,number of degrees of freedom,d,,,,noDim)
+NEUROPROP(params,0,0,parameters,s,,,,params)
+ENDNEUROCLASS 
+
 NEUROCLASS(Sticky,Sti,Sticky [EXPERIMENTAL!],,1,0,1)
 VISUALHINTS(EffectorClass)
@@ -177,2 +213,3 @@
 NEUROPROP(t,0,0,time,f,0,6.283185307,0,t)
 ENDNEUROCLASS
+
Index: cpp/gdk/f0classes.h
===================================================================
--- cpp/gdk/f0classes.h	(revision 74)
+++ cpp/gdk/f0classes.h	(revision 80)
@@ -1,7 +1,8 @@
+
 
 #define FIELDSTRUCT Part
 ParamEntry f0_part_paramtab[]=
 {
- {"Geometry",3,14,"p" },
+ {"Geometry",3,18,"p" },
  {"Other properties",},
  {"Visual",},
@@ -20,9 +21,13 @@
  {"i",1,0,"info","s",FIELD(info),},
  {"Vstyle",2,0,"vis_style","s 0 -1 part",FIELD(vis_style),},
+ {"vs",2,0,"visual thickness","f 0.05 0.7 0.2",FIELD(vsize),},
+ {"vr",2,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",2,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",2,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
  {0,0,0,}
 };
 ParamEntry f0_part_xtra_paramtab[]=
 {
- {"Extra properties",1,5,"p"},
+ {"Extra properties",1,9,"p"},
  {"m",0,0,"mass","f 0.1 999.0 1.0",FIELD(mass),},
  {"dn",0,0,"density","f 0.2 5.0 1.0",FIELD(density),},
@@ -30,4 +35,8 @@
  {"ing",0,0,"ingestion","f 0.0 1.0 0.25",FIELD(ingest),},
  {"as",0,0,"assimilation","f 0.0 1.0 0.25",FIELD(assim),},
+ {"vs",0,0,"visual thickness","f 0.05 0.7 0.2",FIELD(vsize),},
+ {"vr",0,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",0,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",0,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
  {0,0,0,}
 };
@@ -38,5 +47,5 @@
 ParamEntry f0_joint_paramtab[]=
 {
- {"Connections",4,13,"j" },
+ {"Connections",4,16,"j" },
  {"Geometry",},
  {"Other properties",},
@@ -55,11 +64,17 @@
  {"i",2,0,"info","s",FIELD(info),},
  {"Vstyle",3,0,"vis_style","s 0 -1 joint",FIELD(vis_style),},
+ {"vr",3,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",3,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",3,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
  {0,0,0,}
 };
 ParamEntry f0_joint_xtra_paramtab[]=
 {
- {"Extra properties",1,2,"j"},
+ {"Extra properties",1,5,"j"},
  {"stif",0,0,"stiffness","f 0.0 1.0 1.0",FIELD(stif),},
  {"rotstif",0,0,"rotation stiffness","f 0.0 1.0 1.0",FIELD(rotstif),},
+ {"vr",0,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",0,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",0,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
  {0,0,0,}
 };
@@ -70,5 +85,5 @@
 ParamEntry f0_nodeltajoint_paramtab[]=
 {
- {"Connections",4,7,"j" },
+ {"Connections",4,10,"j" },
  {"Geometry",},
  {"Other properties",},
@@ -81,11 +96,17 @@
  {"i",2,0,"info","s",FIELD(info),},
  {"Vstyle",3,0,"vis_style","s 0 -1 joint",FIELD(vis_style),},
+ {"vr",3,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",3,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",3,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
  {0,0,0,}
 };
 ParamEntry f0_nodeltajoint_xtra_paramtab[]=
 {
- {"Extra properties",1,2,"j"},
+ {"Extra properties",1,5,"j"},
  {"stif",0,0,"stiffness","f 0.0 1.0 1.0",FIELD(stif),},
  {"rotstif",0,0,"rotation stiffness","f 0.0 1.0 1.0",FIELD(rotstif),},
+ {"vr",0,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",0,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",0,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
  {0,0,0,}
 };
@@ -156,2 +177,5 @@
 
 
+
+
+
Index: cpp/gdk/f0def.xml
===================================================================
--- cpp/gdk/f0def.xml	(revision 74)
+++ cpp/gdk/f0def.xml	(revision 80)
@@ -1,4 +1,11 @@
 <!DOCTYPE F0CLASSES>
 <F0CLASSES>
+
+ <CLASS ID="m" NAME="Model">
+  <GROUP NAME="Properties" />
+  <GROUP NAME="Visual" />
+  <PROP ID="se" NAME="startenergy" GROUP="0" FLAGS="1024" TYPE="f" />
+  <PROP ID="Vstyle" NAME="vis_style" GROUP="1" FLAGS="0" TYPE="s" MIN="0" MAX="-1" />
+ </CLASS>
 
  <CLASS ID="p" NAME="Part">
@@ -20,4 +27,8 @@
   <PROP ID="i" NAME="info" GROUP="1" FLAGS="0" TYPE="s" />
   <PROP ID="Vstyle" NAME="vis_style" GROUP="2" FLAGS="0" TYPE="s" MIN="0" MAX="-1" DEF="part" />
+  <PROP ID="vs" XTRA="1" NAME="visual thickness" GROUP="2" FLAGS="0" TYPE="f" MIN="0.05" MAX="0.7" DEF="0.2" />
+  <PROP ID="vr" XTRA="1" NAME="red component" GROUP="2" FLAGS="0" TYPE="f" MIN="0.0" MAX="1.0" DEF="0.5" />
+  <PROP ID="vg" XTRA="1" NAME="green component" GROUP="2" FLAGS="1024" TYPE="f" MIN="0.0" MAX="1.0" DEF="0.5" />
+  <PROP ID="vb" XTRA="1" NAME="blue component" GROUP="2" FLAGS="1024" TYPE="f" MIN="0.0" MAX="1.0" DEF="0.5" />
  </CLASS>
 
@@ -40,4 +51,7 @@
   <PROP ID="i" NAME="info" GROUP="2" FLAGS="0" TYPE="s" />
   <PROP ID="Vstyle" NAME="vis_style" GROUP="3" FLAGS="0" TYPE="s" MIN="0" MAX="-1" DEF="joint" />
+  <PROP ID="vr" XTRA="1" NAME="red component" GROUP="3" FLAGS="0" TYPE="f" MIN="0.0" MAX="1.0" DEF="0.5" />
+  <PROP ID="vg" XTRA="1" NAME="green component" GROUP="3" FLAGS="1024" TYPE="f" MIN="0.0" MAX="1.0" DEF="0.5" />
+  <PROP ID="vb" XTRA="1" NAME="blue component" GROUP="3" FLAGS="1024" TYPE="f" MIN="0.0" MAX="1.0" DEF="0.5" />
  </CLASS>
 
@@ -50,5 +64,5 @@
   <PROP ID="p" NAME="part ref#" GROUP="0" FLAGS="0" TYPE="d" MIN="-1" MAX="999999" DEF="-1" />
   <PROP ID="j" NAME="joint ref#" GROUP="0" FLAGS="0" TYPE="d" MIN="-1" MAX="999999" DEF="-1" />
-  <PROP ID="d" NAME="item details" GROUP="1" FLAGS="0" TYPE="s" />
+  <PROP ID="d" NAME="item details" GROUP="1" FLAGS="0" TYPE="s" DEF="N" />
   <PROP ID="i" NAME="info" GROUP="1" FLAGS="0" TYPE="s" />
   <PROP ID="Vstyle" NAME="vis_style" GROUP="2" FLAGS="0" TYPE="s" MIN="0" MAX="-1" DEF="neuro" />
@@ -77,5 +91,5 @@
  </NEUROCLASS>
 
- <NEUROCLASS ID="Nu" NAME="Unipolar neuron [EXPERIMENTAL!]" DESCRIPTION="Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.\nHaving 0 as one of the saturation states should help in \"gate circuits\", where input signal is passed through or blocked depending on the other singal." INPUTS="-1" OUTPUT="1" LOCATION="0"  >
+ <NEUROCLASS ID="Nu" NAME="Unipolar neuron [EXPERIMENTAL!]" DESCRIPTION="Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.\nHaving 0 as one of the saturation states should help in &quot;gate circuits&quot;, where input signal is passed through or blocked depending on the other singal." INPUTS="-1" OUTPUT="1" LOCATION="0"  >
   <NEUROPROP ID="in" NAME="Inertia" TYPE="f" MIN="0.0" MAX="1.0" DEF="0.8" />
   <NEUROPROP ID="fo" NAME="Force" TYPE="f" MIN="0.0" MAX="999.0" DEF="0.04" />
@@ -95,5 +109,5 @@
  </NEUROCLASS>
 
- <NEUROCLASS ID="S" NAME="Smell" DESCRIPTION="Smell sensor. Aggregated \"smell of energy\" experienced from all energy objects (creatures and food pieces).\nClose objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)" INPUTS="0" OUTPUT="1" LOCATION="1"  VISUALHINTS="32"  SYMBOL="5,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,3,10,40,15,45,15,55,10,60,5,20,30,25,35,30,45,30,55,25,65,20,70,4,15,35,20,40,22,50,20,60,15,65,5,75,50,50,50,45,45,40,50,45,55,50,50"  >
+ <NEUROCLASS ID="S" NAME="Smell" DESCRIPTION="Smell sensor. Aggregated &quot;smell of energy&quot; experienced from all energy objects (creatures and food pieces).\nClose objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)" INPUTS="0" OUTPUT="1" LOCATION="1"  VISUALHINTS="32"  SYMBOL="5,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,3,10,40,15,45,15,55,10,60,5,20,30,25,35,30,45,30,55,25,65,20,70,4,15,35,20,40,22,50,20,60,15,65,5,75,50,50,50,45,45,40,50,45,55,50,50"  >
 
 
@@ -130,4 +144,23 @@
  </NEUROCLASS>
 
+ <NEUROCLASS ID="VEye" NAME="Vector Eye [EXPERIMENTAL!]" DESCRIPTION="Refer to publications to learn more about this neuron." INPUTS="1" OUTPUT="1" LOCATION="1"  SYMBOL="11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24"  >
+
+  <NEUROPROP ID="tx" NAME="target.x" TYPE="f" MIN="" MAX="" DEF="" />
+  <NEUROPROP ID="ty" NAME="target.y" TYPE="f" MIN="" MAX="" DEF="" />
+  <NEUROPROP ID="tz" NAME="target.z" TYPE="f" MIN="" MAX="" DEF="" />
+  <NEUROPROP ID="ts" NAME="target shape" TYPE="s" MIN="0" MAX="-1" DEF="0" />
+  <NEUROPROP ID="p" NAME="perspective" TYPE="f" MIN="0.1" MAX="10.0" DEF="1.0" />
+  <NEUROPROP ID="s" NAME="scale" TYPE="f" MIN="0.1" MAX="100.0" DEF="1.0" />
+  <NEUROPROP ID="h" NAME="show hidden lines" TYPE="d" MIN="0" MAX="1" DEF="0" />
+  <NEUROPROP ID="o" NAME="output lines count (each line needs four channels)" TYPE="d" MIN="0" MAX="99" DEF="0" />
+  <NEUROPROP ID="d" NAME="debug" TYPE="d" MIN="0" MAX="1" DEF="0" />
+ </NEUROCLASS>
+
+ <NEUROCLASS ID="VMotor" NAME="Visual-Motor Cortex [EXPERIMENTAL!]" DESCRIPTION="Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron." INPUTS="-1" OUTPUT="1" LOCATION="0"  >
+  <NEUROPROP ID="noIF" NAME="number of basic features" TYPE="d" MIN="" MAX="" DEF="" />
+  <NEUROPROP ID="noDim" NAME="number of degrees of freedom" TYPE="d" MIN="" MAX="" DEF="" />
+  <NEUROPROP ID="params" NAME="parameters" TYPE="s" MIN="" MAX="" DEF="" />
+ </NEUROCLASS> 
+
  <NEUROCLASS ID="Sti" NAME="Sticky [EXPERIMENTAL!]" DESCRIPTION="" INPUTS="1" OUTPUT="0" LOCATION="1"  VISUALHINTS="16"  >
 
@@ -155,5 +188,5 @@
  </NEUROCLASS>
 
- <NEUROCLASS ID="ChSel" NAME="Channel selector" DESCRIPTION="Outputs a single channel (selected by the \"ch\" parameter) from multichannel input" INPUTS="1" OUTPUT="1" LOCATION="0"  SYMBOL="6,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,1,30,50,50,50,1,35,53,39,47"  >
+ <NEUROCLASS ID="ChSel" NAME="Channel selector" DESCRIPTION="Outputs a single channel (selected by the &quot;ch&quot; parameter) from multichannel input" INPUTS="1" OUTPUT="1" LOCATION="0"  SYMBOL="6,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,1,30,50,50,50,1,35,53,39,47"  >
 
   <NEUROPROP ID="ch" NAME="channel" TYPE="d" MIN="" MAX="" DEF="" />
@@ -169,3 +202,4 @@
  </NEUROCLASS>
 
+
 </F0CLASSES>
Index: cpp/gdk/f0defxml.m4
===================================================================
--- cpp/gdk/f0defxml.m4	(revision 74)
+++ cpp/gdk/f0defxml.m4	(revision 80)
@@ -15,9 +15,9 @@
 define(`PROP',ZPROP(-,$@))
 define(`ZPROP',
-`  <`PROP' ID="$2" ifelse($1,X,`XTRA="1" ')NAME="$5" `GROUP'="$3" FLAGS="$4" TYPE="$6" ifelse($7,,,MIN="$7" MAX="$8" DEF="$9" )/>')
+`  <`PROP' ID="$2" ifelse($1,X,`XTRA="1" ')NAME="$5" `GROUP'="$3" FLAGS="$4" TYPE="$6" ifelse($7,,,MIN="$7" )ifelse($8,,,MAX="$8" )ifelse($9,,,DEF="$9" )/>')
 define(`GROUP',`  <`GROUP' NAME="$1" />')
 define(`ENDCLASS',` </`CLASS'>divert')
 
-define(`NEUROCLASS',` <`NEUROCLASS' ID="$2" NAME="$3" DESCRIPTION="$4" INPUTS="$5" OUTPUT="$6" LOCATION="$7" divert(2) >')
+define(`NEUROCLASS',` <`NEUROCLASS' ID="$2" NAME="$3" DESCRIPTION="patsubst(`$4',`\\\"',&quot;)" INPUTS="$5" OUTPUT="$6" LOCATION="$7" divert(2) >')
 define(`VISUALHINTS',`divert `VISUALHINTS'="eval($1)" divert(2)')
 define(`SYMBOL',`divert `SYMBOL'="$1" divert(2)')
Index: cpp/gdk/model.def
===================================================================
--- cpp/gdk/model.def	(revision 74)
+++ cpp/gdk/model.def	(revision 80)
@@ -59,5 +59,4 @@
 prop:id=getInputNeuroIndex,name="get input neuron index",group="Connections",flags=1+2,type="p d(d)   "
 prop:id=getInputWeight,name="get input weight",group="Connections",flags=1+2,type="p f(d)   "
-prop:id=classObject,name="neuron class",group="Connections",flags=1+2,type="o NeuroClass   "
 
 
@@ -102,5 +101,5 @@
 
 
-neuro: id=*,name="Constant",info="Constant value",inputs=0,output=1,location=0  ,vhints=1  ,symbol="4,4,26,27,26,73,73,73,73,27,26,27,1,73,50,100,50,1,56,68,46,68,2,41,47,51,32,51,68" 
+neuro: id=*,name="Constant",info="Constant value",inputs=0,output=1,location=0  ,vhints=1  ,symbol="3,6,100,50,90,50,90,40,70,40,70,60,90,60,90,50,1,85,50,75,50,1,80,45,80,55" 
 
 
@@ -120,9 +119,8 @@
 
 
-neuro: id=D,name="Differentiate",info="Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights",inputs=-1,output=1,location=0  ,symbol="3,3,25,0,25,100,75,50,25,0,1,75,50,100,50,3,44,42,51,57,36,57,44,42" 
+neuro: id=D,name="Differentiate",info="Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights",inputs=-1,output=1,location=0 
 
 
-
-neuro: id=Fuzzy,name="Fuzzy system [EXPERIMENTAL!]",info="Refer to publications to learn more about this neuron.",inputs=-1,output=1,location=0  ,symbol="5,2,30,65,37,37,44,65,3,37,65,44,37,51,37,58,65,2,51,65,58,37,65,65,6,100,50,70,50,70,25,25,10,25,90,70,75,70,50,1,70,65,25,65" 
+neuro: id=Fuzzy,name="Fuzzy system [EXPERIMENTAL!]",info="Refer to publications to learn about this neuron",inputs=-1,output=1,location=0  ,symbol="5,2,30,65,37,37,44,65,3,37,65,44,37,51,37,58,65,2,51,65,58,37,65,65,6,100,50,70,50,70,25,25,10,25,90,70,75,70,50,1,70,65,25,65" 
 
 prop:id=ns,name="number of fuzzy sets",type="d 1  "
@@ -132,9 +130,28 @@
 
 
-neuro: id=Sti,name="Sticky [EXPERIMENTAL!]",info="",inputs=1,output=0,location=1  ,vhints=16 
+neuro: id=VEye,name="Vector Eye [EXPERIMENTAL!]",info="",inputs=1,output=1,location=1  ,symbol="11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24" 
+
+prop:id=tx,name="target.x",type="f   "
+prop:id=ty,name="target.y",type="f   "
+prop:id=tz,name="target.z",type="f   "
+prop:id=ts,name="target shape",type="s 0 -1 0"
+prop:id=p,name="perspective",type="f 0.1 10.0 1.0"
+prop:id=s,name="scale",type="f 0.1 100.0 1.0"
+prop:id=h,name="show hidden lines",type="d 0 1 0"
+prop:id=o,name="output lines count (each line needs four channels)",type="d 0 99 0"
+prop:id=d,name="debug",type="d 0 1 0"
+
+
+neuro: id=VMotor,name="Visual-Motor Cortex [EXPERIMENTAL!]",info="Must be connected to the VEye and properly set up.",inputs=-1,output=1,location=0 
+prop:id=noIF,name="number of basic features",type="d   "
+prop:id=noDim,name="number of degrees of freedom",type="d   "
+prop:id=params,name="parameters",type="s   "
+ 
+
+neuro: id=Sti,name="Sticky [EXPERIMENTAL!]",info="",inputs=1,output=0,location=1  ,vhints=32 
 
 
 
-neuro: id=LMu,name="Linear muscle [EXPERIMENTAL!]",info="",inputs=1,output=0,location=2  ,vhints=16 
+neuro: id=LMu,name="Length muscle [EXPERIMENTAL!]",info="",inputs=1,output=0,location=2  ,vhints=16 
 
 prop:id=p,name="power",type="f 0.01 1.0 1.0"
@@ -149,14 +166,11 @@
 
 
-neuro: id=Ch,name="Channelize",info="Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.",inputs=-1,output=1,location=0  ,symbol="10,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,1,30,80,55,50,1,30,20,55,50,1,30,35,55,50,1,30,45,55,50,1,30,55,55,50,1,61,53,65,47,1,30,65,55,50" 
+neuro: id=Ch,name="Channelize",info="Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.",inputs=-1,output=1,location=0 
 
 
-
-neuro: id=ChMux,name="Channel multiplexer",info="Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)",inputs=2,output=1,location=0  ,symbol="7,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,3,30,67,45,67,45,50,50,50,1,35,70,39,64,2,30,33,53,33,53,48" 
+neuro: id=ChMux,name="Channel multiplexer",info="Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)",inputs=2,output=1,location=0 
 
 
-
-neuro: id=ChSel,name="Channel selector",info="Outputs a single channel (selected by the \"ch\" parameter) from multichannel input",inputs=1,output=1,location=0  ,symbol="6,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,1,30,50,50,50,1,35,53,39,47" 
-
+neuro: id=ChSel,name="Channel selector",info="Outputs a single channel (selected by the \"ch\" parameter) from multichannel input",inputs=1,output=1,location=0 
 prop:id=ch,name="channel",type="d   "
 
Index: cpp/gdk/neurocls-factory.h
===================================================================
--- cpp/gdk/neurocls-factory.h	(revision 74)
+++ cpp/gdk/neurocls-factory.h	(revision 80)
@@ -2,4 +2,5 @@
 // do not edit - generated automatically from "f0.def"
 // (to be included in "neurofactory.cpp")
+
 
 
@@ -83,4 +84,28 @@
 #undef FIELDSTRUCT
 
+#define FIELDSTRUCT NI_VectorEye 
+ParamEntry NI_VectorEye_tab []={
+{"Vector Eye [EXPERIMENTAL!]",1, 9 ,"VEye",},
+{"tx",0,0,"target.x","f   ",FIELD(target.x),},
+{"ty",0,0,"target.y","f   ",FIELD(target.y),},
+{"tz",0,0,"target.z","f   ",FIELD(target.z),},
+{"ts",0,0,"target shape","s 0 -1 0",FIELD(targetShape),},
+{"p",0,0,"perspective","f 0.1 10.0 1.0",FIELD(perspz),},
+{"s",0,0,"scale","f 0.1 100.0 1.0",FIELD(perspscale),},
+{"h",0,0,"show hidden lines","d 0 1 0",FIELD(showhidden),},
+{"o",0,0,"output lines count (each line needs four channels)","d 0 99 0",FIELD(outputcount),},
+{"d",0,0,"debug","d 0 1 0",FIELD(showdebug),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_VisualMotorNeuron 
+ParamEntry NI_VisualMotorNeuron_tab []={
+{"Visual-Motor Cortex [EXPERIMENTAL!]",1, 3 ,"VMotor",},
+{"noIF",0,0,"number of basic features","d   ",FIELD(noIF),},
+{"noDim",0,0,"number of degrees of freedom","d   ",FIELD(noDim),},
+{"params",0,0,"parameters","s   ",FIELD(params),},
+ {0,0,0,},};
+#undef FIELDSTRUCT 
+
 #define FIELDSTRUCT NI_Sticky 
 ParamEntry NI_Sticky_tab []={
@@ -141,4 +166,5 @@
 #undef FIELDSTRUCT
 
+
 #define SETIMPLEMENTATION \
 setImplementation("N",new NI_StdNeuron); \
@@ -152,4 +178,6 @@
 setImplementation("D",new NI_Diff); \
 setImplementation("Fuzzy",new NI_FuzzyNeuro); \
+setImplementation("VEye",new NI_VectorEye); \
+setImplementation("VMotor",new NI_VisualMotorNeuron); \
 setImplementation("Sti",new NI_Sticky); \
 setImplementation("LMu",new NI_LinearMuscle); \
Index: cpp/gdk/neurocls-library.h
===================================================================
--- cpp/gdk/neurocls-library.h	(revision 74)
+++ cpp/gdk/neurocls-library.h	(revision 80)
@@ -2,4 +2,5 @@
 // do not edit - generated automatically from "f0.def"
 // (to be included in "neurolibrary.cpp")
+
 
 
@@ -108,4 +109,31 @@
 addClass(new NeuroClass(NI_FuzzyNeuro_tab,"Refer to publications to learn more about this neuron.",-1,1,0, FuzzyNeuro_xy,0,0));
 
+     static int VectorEye_xy[]={122,11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24};   
+static ParamEntry NI_VectorEye_tab[]={
+{"Vector Eye [EXPERIMENTAL!]",1, 9 ,"VEye",},
+
+{"tx",0,0,"target.x","f   ",},
+{"ty",0,0,"target.y","f   ",},
+{"tz",0,0,"target.z","f   ",},
+{"ts",0,0,"target shape","s 0 -1 0",},
+{"p",0,0,"perspective","f 0.1 10.0 1.0",},
+{"s",0,0,"scale","f 0.1 100.0 1.0",},
+{"h",0,0,"show hidden lines","d 0 1 0",},
+{"o",0,0,"output lines count (each line needs four channels)","d 0 99 0",},
+{"d",0,0,"debug","d 0 1 0",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_VectorEye_tab,"Refer to publications to learn more about this neuron.",1,1,1, VectorEye_xy,0,0));
+
+     
+static ParamEntry NI_VisualMotorNeuron_tab[]={
+{"Visual-Motor Cortex [EXPERIMENTAL!]",1, 3 ,"VMotor",},
+{"noIF",0,0,"number of basic features","d   ",},
+{"noDim",0,0,"number of degrees of freedom","d   ",},
+{"params",0,0,"parameters","s   ",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_VisualMotorNeuron_tab,"Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron.",-1,1,0, 0,0)); 
+
      
 static ParamEntry NI_Sticky_tab[]={
@@ -182,2 +210,3 @@
 {0,0,0,},};
 addClass(new NeuroClass(NI_Sinus_tab,"Output frequency = f0+input",1,1,0, Sinus_xy,0,0));
+
