/// <summary> /// /// </summary> private static void Set(V vertex, HeMesh3d.Face face) { if (!face.IsUnused) { vertex.Position = face.GetBarycenter(HeMesh3d.Vertex.Accessors.Position); } }
/// <summary> /// /// </summary> private Vec3d GetFacePoint(HeMesh3d.Face face, out double distance) { var he = face.First; // get positions of face vertices var p0 = he.Start.Position; he = he.Next; var p1 = he.Start.Position; he = he.Next; var p2 = he.Start.Position; // get centroid of face var p = (p0 + p1 + p2) / 3.0; // get normal of face var n = Vec3d.Cross(p1 - p0, p2 - p1); // scale the normal distance = _offsetField.Evaluate(p); n *= distance / n.Length; return(p + n); }
/// <summary> /// /// </summary> public override double Evalutate(HeMesh3d.Face face) { var p0 = face.GetBarycenter(); var p1 = (Vec3d)transform.position; return(p0.DistanceTo(p1)); }
/// <summary> /// /// </summary> /// <param name="face"></param> /// <returns></returns> public override double Evalutate(HeMesh3d.Face face) { var p0 = transform.TransformPoint((Vector3)face.GetBarycenter()); return(Math.Abs(_distanceField.Evaluate(p0))); //return _distanceField.Evaluate(p0); }
/// <summary> /// /// </summary> public override double Evalutate(HeMesh3d.Face face) { var p0 = face.GetBarycenter(); //var p1 = (Vec3d)transform.position; //return p0.DistanceTo(p1); var gs = RemapTextureGrayScale(p0.X, p0.Z); var gt = Mathf.InverseLerp(0, 1f, (float)gs); var ht = Mathf.InverseLerp(_minHeight, _maxHeight, (float)p0.Y); double value; if (gt == 1 || gt == 0 || ht == 1 || ht == 0) { value = double.MaxValue; } else { value = Mathf.Abs(gt - ht); } //print(gs+","+gt+','+ht+","+value); return(value); }
/// <summary> /// /// </summary> public override double Evalutate(HeMesh3d.Face face) { var p0 = face.GetBarycenter(); var th = GetToTerrainDistance((Vector3)p0); return(th); }
/// <summary> </summary> private static void Set(Vertex v, HeMesh3d.Face f) { if (!f.IsRemoved) { v.Position = f.Vertices.Mean(_getPosition); v.Normal = f.GetNormal(_getPosition); } }
/// <summary> </summary> private static void Set(V v, HeMesh3d.Face f) { if (!f.IsUnused) { v.Position = f.Vertices.Mean(HeMesh3d.Vertex.GetPosition); v.Normal = f.GetNormal(HeMesh3d.Vertex.GetPosition); } }
/// <summary> /// /// </summary> private void AddTetrahedron(HeMesh3d.Face face, int vertex) { var he = face.First; var v0 = he.Start; he = he.Next; var v1 = he.Start; he = he.Next; var v2 = he.Start; _tetrahedra.Add(new Tetra(vertex, v2, v1, v0)); }
/// <summary> /// /// </summary> public override double Evalutate(HeMesh3d.Face face) { var p0 = face.GetBarycenter(); switch (_type) { case EvaluateType.FollowTerrain: return(GetFollowTerrain((Vector3)p0)); case EvaluateType.MinimalHeight: return(GetMinimalHeight((Vector3)p0)); case EvaluateType.MaximalHeight: return(GetMaximalHeight((Vector3)p0)); } throw new System.NotImplementedException(); }
/// <summary> /// /// </summary> private void AddTetrahedron(HeMesh3d.Face face, int vertex) { var he = face.First; var v0 = he.Start; he = he.Next; var v1 = he.Start; he = he.Next; var v2 = he.Start; var adj = FindTetraByVertices(v0, v1, v2); GameObject[] nodes = new GameObject[4]; _tetrahedra.Add(new Tetra(vertex, v2, v1, v0, adj)); //Attention! }
/// <summary> /// /// </summary> /// <typeparam name="V"></typeparam> /// <typeparam name="E"></typeparam> /// <typeparam name="F"></typeparam> /// <param name="mesh"></param> /// <param name="start"></param> /// <param name="setEdge"></param> public static void Unroll(HeMesh3d mesh, HeMesh3d.Face start, Action <HeMesh3d.Vertex, Vec3d> setUnrolledPosition, Func <HeMesh3d.Halfedge, double> getUnrollFactor = null) { Unroll(mesh, start, HeMesh3d.Vertex.Accessors.Position, setUnrolledPosition, getUnrollFactor); }
/// <summary> /// /// </summary> /// <typeparam name="V"></typeparam> /// <typeparam name="E"></typeparam> /// <typeparam name="F"></typeparam> /// <param name="mesh"></param> /// <param name="start"></param> /// <param name="setEdge"></param> public static void DetachFaceCycles(HeMesh3d mesh, HeMesh3d.Face start) { DetachFaceCycles(mesh, start, Set); }
/// <summary> /// /// </summary> public abstract double Evalutate(HeMesh3d.Face face);