

TinkerCell is a Computer-Aided Design software tool for Synthetic Biology that promotes collaboration through its plugin interface. This blog is used to keep notes on updates to the project.
nodes = pytc.itemsOfFamily("node");
connections = pytc.itemsOfFamily("connection");
numNodes = len(nodes);
numConnections = len(connections);
M = [];
for i in range(0,numConnections):
pytc.setStraight(connections[i]);
connected_nodes = pytc.getConnectedParts( connections[i] );
for j in connected_nodes:
n = 0;
for k in range(0,numNodes):
if nodes[k] == j:
n = k;
break;
n += numConnections;
M.append( (i,n) ); #connection i and node k are connected
G = nx.Graph();
G.add_nodes_from( range( 0, numConnections + numNodes ) );
G.add_edges_from(M);
Pos = nx.spring_layout(G);
minx = 0;
maxx = 0;
miny = 0;
maxy = 0;
for i in range(0,len(Pos)):
if minx == 0 or minx > Pos[i][0]:
minx = Pos[i][0];
if miny == 0 or miny > Pos[i][1]:
miny = Pos[i][1];
if maxx == 0 or maxx <>
maxx = Pos[i][0];
if maxy == 0 or maxy <>
maxy = Pos[i][0];
for i in range(0,len(Pos)):
Pos[i][0] += - minx;
Pos[i][0] *= 500.0/(maxx - minx);
Pos[i][1] += - miny;
Pos[i][1] *= 500.0/(maxy - miny);
for i in range(0,numConnections):
pytc.setCenterPoint(connections[i],Pos[i][0],Pos[i][1]);
for i in range(numConnections,numConnections+numNodes):
pytc.setPos(nodes[i-numConnections],Pos[i][0],Pos[i][1]);
print "layout finished";