I am trying to make a model of a roof structure. Then I found this picture on Pinterest. The method for making this structure is like a vector field. But I cannot figure out what is the logic. Can anyone give me a suggestion about how to make a structure like this?

For me you donâ€™t need vector field, it seems to be connexions between triangles.
For each edge of triangle, I put a middle point that is attracted by the middle.
Green curves are edges
Red curves are the attracted lines

Continuing to play a bit with that, definitively it uses dual of a triangular mesh. The logic is to generate curves form the mesh vertex to the frontier of the dual mesh.
I was obliged to make my own dual mesh to get the borders that are not in DualMesh from Daniel Piker

Hi Laurent, Thank you for your reply. I still have several questions about the logic. At first, you use Maelstrom component to create the rotation. Does it mean that if you have several rotation centers you should create the same number of points to match different centers? Secondly, I tried to make the same result as above pictures you posted. I divided curve by points and tried to pull each point to the ground by the distance from these points to each vertex. But I still cannot get what you posted above. Could you help me a little bit more with it or share your .gh file to me? Thank you!

Lines are done using the vertex to the dual lines,
*Distance (with unit) is the approximate distance between discetization on dual lines.
*Radius is the distance from the mesh vertex (radius of column)

It is a pity that multiplication work better in GH1 than GH0.9. I was obliged to replace it with a scale.
As I use always Weld Vertices I thought it is in legacy GH. It could almost be replaced by a line of C# !!!

Not cool to downgrade, Rhinocommon has also new features that I didnâ€™t know. I tested it on Rhino 5. twirl mesh for Joseph.gh (29.5 KB) One Line in RH6
int edges = mesh.TopologyVertices.ConnectedEdges(topologyVertexIndex);

These Lines in RH5
int meshVertexIndices = mesh.TopologyVertices.MeshVertexIndices(topologyVertexIndex);
int connectedVertices = mesh.Vertices.GetConnectedVertices(meshVertexIndices[0]);
List edgesList = new List ();
for (int i = 0; i < connectedVertices.Length; i++)
{
int test = mesh.TopologyEdges.GetEdgeIndex(mesh.TopologyVertices.TopologyVertexIndex(meshVertexIndices[0]), mesh.TopologyVertices.TopologyVertexIndex(connectedVertices[i]));
if (test >= 0)
{
edgesList.Add(test);
}
}
int edges = edgesList.ToArray();

It appears there are two duplicate curves (and six unique) in each branch of eight? Instead of 0â€¦7 , there should be six (0â€¦5) unique curves in each direction.