Edge length attribute of force diagram

Does the edge length attribute get updated once horizonatal equilibrium is solved for (i.e.

horizontal_nodal(form, force, alpha=100, kmax=100).

When I run,


I only get zeros.

no, but it should. please file an issue…

in the meantime, you can do

l = [force.edge_length(u, v) for u, v in force.edges()]

(i) Why does the form and the corresponding force diagrams does not have the same number of edges?
(ii) Are the member order in a connectivity matrix, edge lengths of form and force diagrams (found as above) are consistent
Connectivity matrix was determined as follow

C = compas.datastructures.mesh_connectivity_matrix(form, rtype=‘array’)

a form diagram and a mesh are not exactly the same. the form diagram extends the mesh with functionality that is specific to TNA-based applications. you can’t expect a general mesh function (mesh_connectivity_matrix) to return the correct connectivity matrix of a form diagram, because it does not know what a form diagram is.

the number of edges of the form diagram for which is_edge == True is equal to the number of edges of the force diagram.

the edges have no order. therefore the preferred way of getting edges in corresponding order is to get the edges of the form diagram (those with is_edge == True) in whatever order they come out and then to get the corresponding edges of the force diagram in the same order.

there are helper functions for this…

for example to get the connectivity matrix of the form diagram C and the one of the force diagram C_, you could do the following:

from compas.numerical import connectivity_matrix

key_index   = form.key_index()
form_edges  = [[key_index[u], key_index[v]] for u, v in form.edges_where({'is_edge': True})]
force_edges = force.ordered_edges(form)

C  = connectivity_matrix(form_edges)
C_ = connectivity_matrix(force_edges)