コード例 #1
0
        public static void WorldPositionToArrayIndex(this Isosurface3D iso, ref Vector3Int refIndex, Vector3 position, Transform mesh, float maxDistance)
        {
            float      closestDistance = Mathf.Infinity;
            Vector3Int closestIndex    = new Vector3Int();

            for (int x = 0; x < iso.Size.x; x++)
            {
                for (int y = 0; y < iso.Size.y; y++)
                {
                    for (int z = 0; z < iso.Size.z; z++)
                    {
                        Vector3 worldPosition = Vectorx.Multiply(new Vector3(x, y, z), mesh.localScale) + mesh.position;

                        float distance = Vector3.Distance(worldPosition, position);

                        if (distance < closestDistance)
                        {
                            closestDistance = distance;
                            closestIndex    = new Vector3Int(x, y, z);
                        }
                    }
                }
            }

            if (closestDistance < maxDistance)
            {
                refIndex = closestIndex;
            }
        }
コード例 #2
0
        public static void SetCube(this Isosurface3D iso, Vector3Int center, Vector3Int size, float value)
        {
            float[,,] data = iso.Data;
            for (int x = center.x - size.x; x < center.x + size.x; x++)
            {
                for (int y = center.y - size.y; y < center.y + size.y; y++)
                {
                    for (int z = center.z - size.z; z < center.z + size.z; z++)
                    {
                        if (x < data.GetLength(0) && x > 0)
                        {
                            if (y < data.GetLength(1) && y > 0)
                            {
                                if (z < data.GetLength(2) && z > 0)
                                {
                                    data[x, y, z] = value;
                                }
                            }
                        }
                    }
                }
            }

            iso.Data = data;
        }
コード例 #3
0
        public static void SetAll(this Isosurface3D iso, float value)
        {
            float[,,] data = iso.Data;

            for (int x = 0; x < iso.Size.x; x++)
            {
                for (int y = 0; y < iso.Size.y; y++)
                {
                    for (int z = 0; z < iso.Size.z; z++)
                    {
                        data[x, y, z] = value;
                    }
                }
            }

            iso.Data = data;
        }
コード例 #4
0
 public static void EraseAll(this Isosurface3D iso)
 {
     SetAll(iso, -1f);
 }
コード例 #5
0
 public static void FillAll(this Isosurface3D iso)
 {
     SetAll(iso, 1f);
 }
コード例 #6
0
 public static void EraseCube(this Isosurface3D iso, Vector3Int center, Vector3Int size)
 {
     SetCube(iso, center, size, -1f);
 }