/// <summary> /// /// </summary> /// <typeparam name="V"></typeparam> /// <typeparam name="E"></typeparam> /// <param name="graph"></param> /// <param name="xmorph"></param> /// <param name="parallel"></param> public static void SpaceMorph <V, E>(this HeStructure <V, E> graph, SpaceMorph xmorph, bool parallel = false) where V : HeElement <V, E>, IHeVertex <V, E>, IVertex3d where E : Halfedge <V, E>, IHalfedge <V, E> { var verts = graph.Vertices; if (parallel) { Parallel.ForEach(Partitioner.Create(0, verts.Count), range => Body(range.Item1, range.Item2)); } else { Body(0, verts.Count); } void Body(int from, int to) { for (int i = from; i < to; i++) { var v = verts[i]; v.Position = xmorph.Apply(v.Position); } } }
/// <summary> /// /// </summary> /// <typeparam name="V"></typeparam> /// <typeparam name="E"></typeparam> /// <param name="graph"></param> /// <param name="xmorph"></param> /// <param name="parallel"></param> public static void SpaceMorph <V, E>(this IHeStructure <V, E> graph, SpaceMorph xmorph, bool parallel = false) where V : HeElement, IHeVertex <V, E>, IVertex3d where E : HeElement, IHalfedge <V, E> { var verts = graph.Vertices; Action <Tuple <int, int> > body = range => { for (int i = range.Item1; i < range.Item2; i++) { var v = verts[i]; v.Position = xmorph.Apply(v.Position); } }; if (parallel) { Parallel.ForEach(Partitioner.Create(0, verts.Count), body); } else { body(Tuple.Create(0, verts.Count)); } }