Index: cpp/frams/model/defassign-f0-SDK.h
===================================================================
--- cpp/frams/model/defassign-f0-SDK.h	(revision 932)
+++ cpp/frams/model/defassign-f0-SDK.h	(revision 934)
@@ -25,4 +25,46 @@
 vcolor.z=1.0;
 }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+void Part_MinMaxDef::defassign()
+{
+volume=1;
+}
+
+
 
 
@@ -121,4 +163,6 @@
 
 
+
+
 void Neuro::defassign()
 {
@@ -128,4 +172,6 @@
 vis_style="neuro";
 }
+
+
 
 
Index: cpp/frams/model/f0-SDK-classes.h
===================================================================
--- cpp/frams/model/f0-SDK-classes.h	(revision 932)
+++ cpp/frams/model/f0-SDK-classes.h	(revision 934)
@@ -63,4 +63,19 @@
  {"vg",0,1024,"green component","f 0.0 1.0 1.0",FIELD(vcolor.y),},
  {"vb",0,1024,"blue component","f 0.0 1.0 1.0",FIELD(vcolor.z),},
+ {0,0,0,}
+};
+#undef FIELDSTRUCT
+
+
+#define FIELDSTRUCT Part_MinMaxDef
+ParamEntry f0_part_minmaxdef_paramtab[]=
+{
+ {"Geometry",1,1,"p" },
+ {"f",0,0,"volume","f 0.1 10 1",FIELD(volume),},
+ {0,0,0,}
+};
+ParamEntry f0_part_minmaxdef_xtra_paramtab[]=
+{
+ {"Extra properties",1,0,"p"},
  {0,0,0,}
 };
Index: cpp/frams/model/model.cpp
===================================================================
--- cpp/frams/model/model.cpp	(revision 932)
+++ cpp/frams/model/model.cpp	(revision 934)
@@ -1328,6 +1328,6 @@
 //////////////////////
 
-class MinPart : public Part { public: MinPart() { Param par(f0_part_paramtab, this); par.setMin(); } };
-class MaxPart : public Part { public: MaxPart() { Param par(f0_part_paramtab, this); par.setMax(); } };
+class MinPart : public Part_MinMaxDef { public: MinPart() { Param par(f0_part_paramtab, this); par.setMin(); Param par2(f0_part_minmaxdef_paramtab, this); par2.setMin(); } };
+class MaxPart : public Part_MinMaxDef { public: MaxPart() { Param par(f0_part_paramtab, this); par.setMax(); Param par2(f0_part_minmaxdef_paramtab, this); par2.setMax(); } };
 class MinJoint : public Joint { public: MinJoint() { Param par(f0_joint_paramtab, this); par.setMin(); } };
 class MaxJoint : public Joint { public: MaxJoint() { Param par(f0_joint_paramtab, this); par.setMax(); } };
@@ -1335,7 +1335,7 @@
 class MaxNeuro : public Neuro { public: MaxNeuro() { Param par(f0_neuro_paramtab, this); par.setMax(); } };
 
-Part &Model::getMinPart() { static MinPart part; return part; }
-Part &Model::getMaxPart() { static MaxPart part; return part; }
-Part &Model::getDefPart() { static Part part; return part; }
+Part_MinMaxDef &Model::getMinPart() { static MinPart part; return part; }
+Part_MinMaxDef &Model::getMaxPart() { static MaxPart part; return part; }
+Part_MinMaxDef &Model::getDefPart() { static Part_MinMaxDef part; return part; }
 Joint &Model::getMinJoint() { static MinJoint joint; return joint; }
 Joint &Model::getMaxJoint() { static MaxJoint joint; return joint; }
Index: cpp/frams/model/modelparts.h
===================================================================
--- cpp/frams/model/modelparts.h	(revision 932)
+++ cpp/frams/model/modelparts.h	(revision 934)
@@ -26,4 +26,16 @@
 typedef UserTags<Model, void *, 5> ModelUserTags;
 
+
+/// Introduced only because we can't have a forward declaration of enum in the Model class, 
+/// and we would need a forward declaration because of mutual (cyclic) dependence of declarations of Model and NeuroClass.
+/// https://stackoverflow.com/questions/27019292/is-in-class-enum-forward-declaration-possible
+/// Use Model::... instead of ModelEnum::...
+class ModelEnum
+{
+public:
+	enum ShapeType { SHAPE_BALL_AND_STICK, SHAPE_SOLIDS, SHAPE_UNKNOWN, SHAPE_ILLEGAL };
+};
+
+
 /** Common base for model elements. */
 class PartBase
@@ -102,4 +114,13 @@
 
 	static Param &getStaticParam();
+};
+
+class Part_MinMaxDef : public Part //contains additional information for Model::getMinPart()/getMaxPart()/getDefPart()
+{
+public:
+	double volume; ///< Introduced to limit the range of volumes (~mass) in simulation of solids. Genetic operators should observe this min,max volume by calculating and limiting the volume of Parts based on their type and sx,sy,sz.
+
+	void defassign();
+	Part_MinMaxDef() { defassign(); }
 };
 
@@ -256,4 +277,5 @@
 		*/
 	int getSupportedShapeTypes() { return (int)supported_shape_types; }
+	bool isShapeTypeSupported(ModelEnum::ShapeType t) { return (1 << (int)t) & supported_shape_types; }
 	int *getSymbolGlyph()
 	{
@@ -511,5 +533,5 @@
 };
 
-extern ParamEntry f0_part_paramtab[], f0_joint_paramtab[], f0_nodeltajoint_paramtab[], f0_neuro_paramtab[], f0_neuroconn_paramtab[], f0_neuroitem_paramtab[];
+extern ParamEntry f0_part_paramtab[], f0_part_minmaxdef_paramtab[], f0_joint_paramtab[], f0_nodeltajoint_paramtab[], f0_neuro_paramtab[], f0_neuroconn_paramtab[], f0_neuroitem_paramtab[];
 
 #endif
