コード例 #1
0
ファイル: HeGraph3d.cs プロジェクト: GitZHCODE/zCode
 /// <summary>
 ///
 /// </summary>
 private static void Set(V vertex, HeMesh3d.Face face)
 {
     if (!face.IsUnused)
     {
         vertex.Position = face.GetBarycenter(HeMesh3d.Vertex.Accessors.Position);
     }
 }
コード例 #2
0
ファイル: GrowthManager.cs プロジェクト: peljevic/Almost-July
        /// <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);
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        public override double Evalutate(HeMesh3d.Face face)
        {
            var p0 = face.GetBarycenter();
            var p1 = (Vec3d)transform.position;

            return(p0.DistanceTo(p1));
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
ファイル: TerrainEvaluator.cs プロジェクト: zimhe/Graph
        /// <summary>
        ///
        /// </summary>
        public override double Evalutate(HeMesh3d.Face face)
        {
            var p0 = face.GetBarycenter();

            var th = GetToTerrainDistance((Vector3)p0);

            return(th);
        }
コード例 #7
0
 /// <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);
     }
 }
コード例 #8
0
ファイル: HeGraph3d.cs プロジェクト: Alan-Baylis/SpatialSlur
 /// <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);
     }
 }
コード例 #9
0
ファイル: GrowthManager.cs プロジェクト: peljevic/Almost-July
        /// <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));
        }
コード例 #10
0
        /// <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();
        }
コード例 #11
0
        /// <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!
        }
コード例 #12
0
 /// <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);
 }
コード例 #13
0
 /// <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);
 }
コード例 #14
0
 /// <summary>
 ///
 /// </summary>
 public abstract double Evalutate(HeMesh3d.Face face);