Exemplo n.º 1
0
        /// <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);
                }
            }
        }
Exemplo n.º 2
0
        /// <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));
            }
        }