Example #1
0
 public void MakeNew(Vector3 pos, LineSegment line)
 {
     pos = pos / divisions;
     if (!voxels.ContainsKey(pos))
     {
         var vc = new VoxelClass();
         vc.Voxel = Instantiate(voxel, pos, Quaternion.identity) as GameObject;
         var sc = (1.0f / divisions) * 0.9f;
         vc.Voxel.transform.localScale = new Vector3(sc, sc, sc);
         vc.Voxel.GetComponent<vTest>().Id = voxels.Count;
         vc.IntersectedByLines = new List<LineSegment>();
         voxels.Add(pos, vc);
         highlights.Add(pos);
     }
     voxels[pos].IntersectedByLines.Add(line);
 }
Example #2
0
 public void HandleIt(Vector3 testPosition, Vector3 position)
 {
     var coords = (position / divisions);
     if (IsPointInside(MM.GetMesh(), testPosition / divisions) && !voxels.ContainsKey(coords))
     {
         var v = Instantiate(voxel, coords, Quaternion.identity) as GameObject;
         v.transform.SetParent(transform);
         v.GetComponent<SingleCube>().Voxel();
         var scale = 1.0f / divisions;
         v.transform.localScale = new Vector3(scale, scale, scale);
         var small = SingleCube.scale;
         v.GetComponent<BoxCollider>().size = new Vector3(small, small, small);
         var vc = new VoxelClass();
         vc.Voxel = v;
         v.GetComponent<SingleCube>().Id = voxels.Count;
         voxels.Add(coords, vc);
         highlights.Add(coords);
     }
 }
Example #3
0
 public void InstVoxel(Vector3 pos)
 {
     if (!voxels.ContainsKey(pos))
     {
         var v = Instantiate(voxel, pos, Quaternion.identity) as GameObject;
         var scale = (1.0f / divisions) * 0.9f;
         v.transform.localScale = new Vector3(scale, scale, scale);
         v.transform.SetParent(GameObject.Find("voxelHolder").transform);
         var color = new Color(pos.x, pos.y, pos.z, 1f);
         var spec = new Color(pos.x, pos.y, pos.z, 1f);
         v.GetComponent<MeshRenderer>().material.SetColor("_SpecColor", spec);
         v.GetComponent<Renderer>().material.color = color;
         var vc = new VoxelClass();
         vc.Voxel = v;
         v.GetComponent<vTest>().Id = voxels.Count;
         voxels.Add(pos, vc);
         highlights.Add(pos);
     }
 }
Example #4
0
 public void MakeNew(VoxelClass vc, LineSegment line)
 {
     //vc.IntersectedByLines.Add(line);
     //if (vc.IntersectedByLines.Count > maxPathsThrough)
     //    maxPathsThrough = vc.IntersectedByLines.Count;
 }
Example #5
0
 public void AddSloxel(Vector3 centroid, CrossSectionLayer layer)
 {
     if (layer.SloxPositions.Contains(centroid)) return;
     layer.SloxPositions.Add(centroid);
     var slox = new Sloxel();
     slox.Layer = layer.Layer;
     slox.Position = centroid;
     slox.Dim = sloxelResolution.x;
     slox.Id = layer.Sloxels.Count;
     layer.Sloxels.Add(slox);
     var inc = 1 / sloxelResolution.x;
     foreach (var voxelLayer in voxelHeights)
     {
         if (Mathf.Abs(centroid.y - voxelLayer) <= voxelHeight / 2)
         {
             var voxPos = new Vector3(centroid.x, voxelLayer, centroid.z);
             if (!voxels.ContainsKey(voxPos))
             {
                 var voxObj = MonoBehaviour.Instantiate(GameObject.Find("VOXELIZER").GetComponent<MeshVoxelizer>().voxel, voxPos, Quaternion.identity) as GameObject;
                 voxObj.transform.SetParent(GameObject.Find("VOXELIZER").transform);
                 voxObj.GetComponent<SingleCube>().Voxel();
                 voxObj.GetComponent<SingleCube>().Id = voxels.Count;
                 voxObj.GetComponent<SingleCube>().Origin = voxPos;
                 var scale = increment * 0.9f;
                 voxObj.transform.localScale = new Vector3(scale, 0.9f * voxelHeight, scale);
                 var small = SingleCube.scale;
                 voxObj.GetComponent<BoxCollider>().size = new Vector3(small, small, small);
                 var newVox = new VoxelClass();
                 newVox.Id = (float)voxels.Count;
                 newVox.Origin = voxPos;
                 newVox.singleCube = voxObj.GetComponent<SingleCube>();
                 voxObj.GetComponent<SingleCube>().voxelClass = newVox;
                 newVox.Voxel = voxObj;
                 voxels.Add(voxPos, newVox);
                 highlights.Add(voxPos);
                 InspectorR.highlightVector = voxPos;
             }
             foreach (var line in layer.gcdLines)
             {
                 if (line.MovesInX)
                 {
                     if (line.p1.z >= slox.Position.z - inc / 2 && line.p1.z <= slox.Position.z + inc / 2)
                     {
                         var m = line.p2 - line.p1;
                         var sloxMinX = slox.Position.x - inc / 2;
                         var sloxMaxX = slox.Position.x + inc / 2;
                         var factorMinX = (sloxMinX - line.p1.x) / m.x;
                         var factorMaxX = (sloxMaxX - line.p1.x) / m.x;
                         if ((factorMinX >= 0 && factorMinX <= 1)
                             || (factorMaxX >= 0 && factorMaxX <= 1))
                         {
                             if (line.step < slox.MinLineNumber)
                                 slox.MinLineNumber = line.step;
                             if (line.step > slox.MaxLineNumber)
                                 slox.MaxLineNumber = line.step;
                             if (!slox.IntersectedByLines.Contains(line))
                             {
                                 foreach (var cb in line.CrazyBalls)
                                 {
                                     if (cb.t >= factorMinX && cb.t < factorMaxX)
                                     {
                                         slox.CrazyBalls.Add(cb);
                                     }
                                 }
                                 slox.IntersectedByLines.Add(line);
                             }
                         }
                     }
                 }
                 else if (line.MovesInZ)
                 {
                     if (line.p1.x >= slox.Position.x - inc / 2 && line.p1.x <= slox.Position.x + inc / 2)
                     {
                         var m = line.p2 - line.p1;
                         var sloxMinZ = slox.Position.z - inc / 2;
                         var sloxMaxZ = slox.Position.z + inc / 2;
                         var factorMinZ = (sloxMinZ - line.p1.z) / m.z;
                         var factorMaxZ = (sloxMaxZ - line.p1.z) / m.z;
                         if ((factorMinZ >= 0 && factorMinZ <= 1)
                             || (factorMaxZ >= 0 && factorMaxZ <= 1))
                         {
                             if (line.step < slox.MinLineNumber)
                                 slox.MinLineNumber = line.step;
                             if (line.step > slox.MaxLineNumber)
                                 slox.MaxLineNumber = line.step;
                             if (!slox.IntersectedByLines.Contains(line))
                             {
                                 foreach (var cb in line.CrazyBalls)
                                 {
                                     if (cb.t >= factorMinZ && cb.t < factorMaxZ)
                                     {
                                         slox.CrazyBalls.Add(cb);
                                     }
                                 }
                                 slox.IntersectedByLines.Add(line);
                             }
                         }
                     }
                 }
             }
             var v = voxels[voxPos];
             if (slox.MinLineNumber < v.MinLine)
                 v.MinLine = slox.MinLineNumber;
             if (slox.MaxLineNumber > v.MaxLine)
                 v.MaxLine = slox.MaxLineNumber;
             slox.Voxel = v;
             if (!layer.Voxels.Contains(v))
             {
                 layer.Voxels.Add(v);
             }
             slox.VoxelOrigin = voxPos;
             foreach (var cb in slox.CrazyBalls)
             {
                 v.CrazyBalls.Add(cb);
             }
             v.Sloxels.Add(slox);
         }
     }
 }