Let us know if you have a nice R.U.B.E script to share!

iforce2d
 Site Admin
 Posts: 860
 Joined: Sat Dec 22, 2012 7:20 pm
Post
by iforce2d » Wed Apr 24, 2013 4:03 pm
This script will select all vertices of the currently selected fixtures, where the vertex is almost exactly between its neighbors, within a given tolerance. These are good candidates for removal in most applications, and the presence of colinear edges can be a problem case for some algorithms. The tolerance is for comparing the dot product of the two segments on either side of the vertex.
Code: Select all
float tolerance = 0.00001;
fixture[] fs = sf();
for (uint i = 0; i < fs.length; i++) {
fixture f = fs[i];
for (int k = 1; k < f.getNumVertices()1; k++) {
vertex v0 = f.getVertex(k  1);
vertex v1 = f.getVertex(k);
vertex v2 = f.getVertex(k + 1);
vec2 s0 = v1.pos  v0.pos;
vec2 s1 = v2.pos  v1.pos;
s0.normalize();
s1.normalize();
float dot = s0.x * s1.x + s0.y * s1.y;
if ( abs(dot) > (1tolerance) )
v1.select();
}
}