Here’s a code snippet for adding automatic orientation into Farseer Physics.

This is what I edited in Geometry.cs: [csharp] protected void SetVertices(Vertices vertices) { if (!VerticesCCW(vertices)) { vertices.Reverse(); } _localVertices = new Vertices(vertices); _worldVertices = new Vertices(vertices); _aabb.Update(_localVertices); }

///

/// Determine if the passed in

/// list of vertices is oriented /// CCW. ///

/// /// true if oriented counter-clockwise protected bool VerticesCCW(Vertices vertices) { float sum = 0; Vector2[] verts = vertices.ToArray(); // the sign of the ‘area' of the polygon is all // we are interested in. for (int i = 0; i < verts.Length; i++) { int nextIndex = i + 1; if (i == verts.Length - 1) { nextIndex = 0; } sum += (verts[i].X * verts[nextIndex].Y - verts[nextIndex].X * verts[i].Y); } return (sum <= 0); } [/csharp]