Index: cpp/frams/model/defassign-f0-SDK.h
===================================================================
--- cpp/frams/model/defassign-f0-SDK.h	(revision 926)
+++ cpp/frams/model/defassign-f0-SDK.h	(revision 932)
@@ -25,4 +25,5 @@
 vcolor.z=1.0;
 }
+
 
 
@@ -119,4 +120,5 @@
 
 
+
 void Neuro::defassign()
 {
@@ -126,4 +128,5 @@
 vis_style="neuro";
 }
+
 
 
@@ -184,2 +187,3 @@
 
 
+
Index: cpp/frams/model/f0-SDK-classes.h
===================================================================
--- cpp/frams/model/f0-SDK-classes.h	(revision 926)
+++ cpp/frams/model/f0-SDK-classes.h	(revision 932)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -172,7 +172,7 @@
  {"Vstyle",2,0,"vis_style","s 0 0 neuro",FIELD(vis_style),},
  {"getInputCount",0,1+2,"input count","d",GETONLY(inputCount),},
- {"getInputNeuroDef",0,1+2,"get input neuron","p oNeuroDef(d)",PROCEDURE(p_getInputNeuroDef),},
- {"getInputNeuroIndex",0,1+2,"get input neuron index","p d(d)",PROCEDURE(p_getInputNeuroIndex),},
- {"getInputWeight",0,1+2,"get input weight","p f(d)",PROCEDURE(p_getInputWeight),},
+ {"getInputNeuroDef",0,0,"get input neuron","p oNeuroDef(d)",PROCEDURE(p_getInputNeuroDef),},
+ {"getInputNeuroIndex",0,0,"get input neuron index","p d(d)",PROCEDURE(p_getInputNeuroIndex),},
+ {"getInputWeight",0,0,"get input weight","p f(d)",PROCEDURE(p_getInputWeight),},
  {"classObject",0,1+2,"neuron class","oNeuroClass",GETONLY(classObject),},
  {0,0,0,}
Index: cpp/frams/model/model.h
===================================================================
--- cpp/frams/model/model.h	(revision 926)
+++ cpp/frams/model/model.h	(revision 932)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2019  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -93,5 +93,5 @@
 
 public:
-	enum ShapeType { SHAPE_UNKNOWN, SHAPE_ILLEGAL, SHAPE_BALL_AND_STICK, SHAPE_SOLIDS };
+	enum ShapeType { SHAPE_BALL_AND_STICK = 0, SHAPE_SOLIDS = 1, SHAPE_UNKNOWN, SHAPE_ILLEGAL };
 	/// used in internalCheck()
 	enum CheckType {
Index: cpp/frams/model/modelparts.cpp
===================================================================
--- cpp/frams/model/modelparts.cpp	(revision 926)
+++ cpp/frams/model/modelparts.cpp	(revision 932)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2019  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -98,5 +98,5 @@
 NeuroClass::NeuroClass(ParamEntry *_props, SString _description,
 	int _prefinputs, int _prefoutput, int _preflocation,
-	int *_vectordata, bool own_vd, int vhints)
+	int *_vectordata, bool own_vd, int vhints, int sup_shapes)
 	:ownedvectordata(own_vd),
 	name(_props->name), longname(_props->id), description(_description),
@@ -105,4 +105,5 @@
 	prefoutput(_prefoutput),
 	preflocation(_preflocation),
+	supported_shape_types(sup_shapes),
 	vectordata(_vectordata),
 	visualhints(vhints), impl_count(0),/*impl(0),*/active(1), genactive(0)
Index: cpp/frams/model/modelparts.h
===================================================================
--- cpp/frams/model/modelparts.h	(revision 926)
+++ cpp/frams/model/modelparts.h	(revision 932)
@@ -124,8 +124,10 @@
 	class Pt3D d;		///< position delta between parts
 	class Pt3D rot;	///< orientation delta between parts expressed as 3 angles
-	enum Shape { SHAPE_BALL_AND_STICK = 0, ///<  old Framsticks compatible, creates a physical rod between parts (cylinder or cuboid), do not mix with part.shape>0
-		     SHAPE_FIXED = 1, ///< merge parts into one physical entity
-		     SHAPE_HINGE_X = 2, ///< hinge connection, revolving around X axis defined by hinge_pos and hinge_rot
-		     SHAPE_HINGE_XY = 3 }; ///< double hinge connection, revolving around X and Y axes defined by hinge_pos and hinge_rot
+	enum Shape {
+		SHAPE_BALL_AND_STICK = 0, ///<  old Framsticks compatible, creates a physical rod between parts (cylinder or cuboid), do not mix with part.shape>0
+		SHAPE_FIXED = 1, ///< merge parts into one physical entity
+		SHAPE_HINGE_X = 2, ///< hinge connection, revolving around X axis defined by hinge_pos and hinge_rot
+		SHAPE_HINGE_XY = 3 ///< double hinge connection, revolving around X and Y axes defined by hinge_pos and hinge_rot
+	};
 	paInt shape;///< values of type Shape (paInt for integration with Param)
 	class Pt3D hinge_pos; ///< hinge position (relative to part1) for HINGE_X and HINGE_XY
@@ -199,4 +201,9 @@
 	paInt prefinputs, prefoutput;
 	paInt preflocation;
+
+	static constexpr int SUPPORTED_SHAPE_BALL_AND_STICK = 1;
+	static constexpr int SUPPORTED_SHAPE_SOLIDS = 2;
+	static constexpr int SUPPORTED_SHAPE_ALL = SUPPORTED_SHAPE_BALL_AND_STICK | SUPPORTED_SHAPE_SOLIDS;
+	paInt supported_shape_types; //< bitfield of 'Model::shape' values: NeuroClass::SUPPORTED_SHAPE_xxx = 1 << Model::SHAPE_xxx
 	int *vectordata;
 	paInt visualhints;
@@ -212,5 +219,5 @@
 	NeuroClass();
 	NeuroClass(ParamEntry *_props, SString _description,
-		int _prefinputs, int _prefoutput, int _preflocation, int *_vectordata, bool own_vd = 1, int vhints = 0);
+		int _prefinputs, int _prefoutput, int _preflocation, int *_vectordata, bool own_vd = 1, int vhints = 0, int sup_shapes = NeuroClass::SUPPORTED_SHAPE_ALL);
 	/** class name for use in Neuro::setClassName(), Neuro::setDetails() (former 'moredata' field),
 		eg. "N","-",G" */
@@ -248,4 +255,5 @@
 		}
 		*/
+	int getSupportedShapeTypes() { return (int)supported_shape_types; }
 	int *getSymbolGlyph()
 	{
