System.Func.Invoke(Vector2d)

Here are the examples of the csharp api System.Func.Invoke(Vector2d) taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

2 Examples 7

19 Source : GraphSplitter2d.cs
with GNU General Public License v3.0
from RhubarbVR

protected virtual void do_split(Line2d line, bool insert_edges, int insert_gid)
		{
			if (EdgeSigns.Length < Graph.MaxVertexID)
				EdgeSigns.resize(Graph.MaxVertexID);
			foreach (int vid in Graph.VertexIndices())
			{
				EdgeSigns[vid] = line.WhichSide(Graph.GetVertex(vid), OnVertexTol);
			}


			hits.Clear();
			foreach (int eid in Graph.EdgeIndices())
			{
				Index2i ev = Graph.GetEdgeV(eid);
				Index2i signs = new Index2i(EdgeSigns[ev.a], EdgeSigns[ev.b]);
				if (signs.a * signs.b > 0)
					continue;   // both positive or negative, ignore

				edge_hit hit = new edge_hit() { hit_eid = eid, vtx_signs = signs, hit_vid = -1 };
				Vector2d a = Graph.GetVertex(ev.a);
				Vector2d b = Graph.GetVertex(ev.b);

				// parallel-edge case (both are zero)
				if (signs.a == signs.b)
				{
					if (a.DistanceSquared(b) > MathUtil.Epsilon)
					{
						// we need to somehow not insert a new segment for this span below. 
						// so, insert two hit points for the ray-interval, with same eid.
						// This will result in this span being skipped by the same-eid test below
						// *however*, if other edges self-intersect w/ this segment, this will *not work*
						// and duplicate edges will be inserted
						hit.hit_vid = ev.a;
						hit.line_t = line.Project(a);
						hits.Add(hit);
						hit.hit_vid = ev.b;
						hit.line_t = line.Project(b);
						hits.Add(hit);
					}
					else
					{
						// degenerate edge - fall through to a == 0 case below
						signs.b = 1;
					}
				}

				if (signs.a == 0)
				{
					hit.hit_pos = a;
					hit.hit_vid = ev.a;
					hit.line_t = line.Project(a);
				}
				else if (signs.b == 0)
				{
					hit.hit_pos = b;
					hit.hit_vid = ev.b;
					hit.line_t = line.Project(b);
				}
				else
				{
					IntrLine2Segment2 intr = new IntrLine2Segment2(line, new Segment2d(a, b));
					if (intr.Find() == false)
						throw new Exception("GraphSplitter2d.Split: signs are different but ray did not it?");
					if (intr.IsSimpleIntersection)
					{
						hit.hit_pos = intr.Point;
						hit.line_t = intr.Parameter;
					}
					else
					{
						throw new Exception("GraphSplitter2d.Split: got parallel edge case!");
					}
				}
				hits.Add(hit);
			}

			// sort by increasing ray-t
			hits.Sort((hit0, hit1) => { return hit0.line_t.CompareTo(hit1.line_t); });

			// insert segments between successive intersection points
			int N = hits.Count;
			for (int i = 0; i < N - 1; ++i)
			{
				int j = i + 1;
				// note: skipping parallel segments depends on this eid == eid test (see above)
				if (hits[i].line_t == hits[j].line_t || hits[i].hit_eid == hits[j].hit_eid)
					continue;

				int vi = hits[i].hit_vid;
				int vj = hits[j].hit_vid;
				if (vi == vj && vi >= 0)
					continue;

				if (vi >= 0 && vj >= 0)
				{
					int existing = Graph.FindEdge(vi, vj);
					if (existing >= 0)
						continue;
				}

				if (vi == -1)
				{
					DGraph2.EdgeSplitInfo split;
					var result = Graph.SplitEdge(hits[i].hit_eid, out split);
					if (result != MeshResult.Ok)
						throw new Exception("GraphSplitter2d.Split: first edge split failed!");
					vi = split.vNew;
					Graph.SetVertex(vi, hits[i].hit_pos);
					edge_hit tmp = hits[i];
					tmp.hit_vid = vi;
					hits[i] = tmp;
				}

				if (vj == -1)
				{
					DGraph2.EdgeSplitInfo split;
					var result = Graph.SplitEdge(hits[j].hit_eid, out split);
					if (result != MeshResult.Ok)
						throw new Exception("GraphSplitter2d.Split: second edge split failed!");
					vj = split.vNew;
					Graph.SetVertex(vj, hits[j].hit_pos);
					edge_hit tmp = hits[j];
					tmp.hit_vid = vj;
					hits[j] = tmp;
				}

				// check if we actually want to add this segment
				if (InsideTestF != null)
				{
					Vector2d midpoint = 0.5 * (Graph.GetVertex(vi) + Graph.GetVertex(vj));
					if (InsideTestF(midpoint) == false)
						continue;
				}

				if (insert_edges)
					Graph.AppendEdge(vi, vj, insert_gid);
			}


		}

19 Source : Polygon2d.cs
with GNU General Public License v3.0
from RhubarbVR

public Polygon2d Transform(Func<Vector2d, Vector2d> transformF)
		{
			int N = vertices.Count;
			for (int i = 0; i < N; ++i)
				vertices[i] = transformF(vertices[i]);
			Timestamp++;
			return this;
		}