1using NaughtyAttributes;
4using System.Collections;
5using System.Collections.Generic;
12 SortedDictionary<float, List<Vector3>> dist =
new SortedDictionary<float, List<Vector3>>();
13 SortedDictionary<string, List<Vector3>> finalHoles =
new SortedDictionary<string, List<Vector3>>();
14 SortedDictionary<string, List<Vector3>> collectHoles =
new SortedDictionary<string, List<Vector3>>();
15 SortedDictionary<float, List<Vector3>> maxDistances =
new SortedDictionary<float, List<Vector3>>();
16 SortedDictionary<float, List<Vector3>> holeDiameter =
new SortedDictionary<float, List<Vector3>>();
17 SortedDictionary<string, List<Vector3>> filteredHoles =
new SortedDictionary<string, List<Vector3>>();
18 SortedDictionary<float, List<Vector3>> HolesWithMidPoint =
new SortedDictionary<float, List<Vector3>>();
22 List<Vector3> HoleCoord =
new List<Vector3>();
23 List<string> HoleList =
new List<string>();
24 List<Vector3> HoleCoordTeszt =
new List<Vector3>();
25 Vector3 a =
new Vector3();
26 Vector3 b =
new Vector3();
27 Vector3 x =
new Vector3();
28 Vector3 y =
new Vector3();
29 Vector3 TesztX =
new Vector3();
30 Vector3 TesztY =
new Vector3();
31 Vector3 TesztZ =
new Vector3();
32 public Vector3
TesztA =
new Vector3();
33 public Vector3
TesztB =
new Vector3();
34 public Vector3
TesztC =
new Vector3();
39 Vector3 PrevTesztX =
new Vector3();
40 Vector3 PrevTesztY =
new Vector3();
41 Vector3 z =
new Vector3();
42 Vector3 c =
new Vector3();
44 float biggestSizeOfTheModel;
50 var numberOfTriangles =
Hole.GetComponent<MeshFilter>().mesh.triangles;
51 var Vertex =
Hole.GetComponent<MeshFilter>().mesh.vertices;
54 a = Vertex[numberOfTriangles[p]];
55 b = Vertex[numberOfTriangles[p + 1]];
56 c = Vertex[numberOfTriangles[p + 2]];
68 private void GetInfo()
70 size =
Hole.GetComponent<MeshRenderer>().bounds;
71 var numberOfVertex =
Hole.GetComponent<MeshFilter>().mesh.vertexCount;
72 var Vertex =
Hole.GetComponent<MeshFilter>().mesh.vertices;
73 var numberOfTriangles =
Hole.GetComponent<MeshFilter>().mesh.triangles;
74 bool AlreadyAdded =
false;
78 Mesh mesh =
new Mesh();
81 float[] arrayNumbers = { size.max.x, size.max.y, size.max.z };
82 biggestSizeOfTheModel = arrayNumbers.Max();
84 for (
int i = 0; i < numberOfTriangles.Length-2; i+=3)
86 a =
Vertex[numberOfTriangles[i]];
87 b =
Vertex[numberOfTriangles[i+1]];
88 c =
Vertex[numberOfTriangles[i+2]];
92 dist.Add(
distanceAB,
new List<Vector3>() { a, b });
95 dist.Add(
distanceBC,
new List<Vector3>() { b, c });
99 dist.Add(
distanceCA,
new List<Vector3>() { c, a });
102 var v = dist.Keys.Min();
107 Debug.Log(PrevTesztX);
108 Debug.Log(PrevTesztY);
110 if (v < biggestSizeOfTheModel * PercentFloat)
112 var keyValuePair1 = collectHoles.FirstOrDefault(s => s.Value.Contains(x));
113 var keyValuePair2 = collectHoles.FirstOrDefault(s => s.Value.Contains(y));
114 var keyValuePair1List = collectHoles.Where(s => s.Value.Contains(x));
115 var keyValuePair2List = collectHoles.Where(s => s.Value.Contains(y));
116 int countX = collectHoles.Count(s => s.Value.Contains(x));
117 int countY = collectHoles.Count(s => s.Value.Contains(y));
118 if (keyValuePair1.Value !=
null)
120 foreach (var item
in keyValuePair1List)
122 if (countX < 2 && countY < 2)
125 if (x.x <= y.x * 1.001f || x.x >= y.x * 0.999f || x.y <= y.y * 1.001f || x.y >= y.y * 0.999f || x.z <= y.z * 1.001f || x.z >= y.z * 0.999f)
127 var distanceSample =
Vector3.Distance(item.Value[0], item.Value[1]);
128 if (v >= distanceSample * 0.98f && v <= distanceSample * 1.02f)
134 collectHoles[item.Key].Add(x);
135 collectHoles[item.Key].Add(y);
143 if (keyValuePair2.Value !=
null)
145 foreach (var item
in keyValuePair2List)
147 if (countX < 2 && countY < 2)
149 if (x.x <= y.x * 1.001f || x.x >= y.x * 0.999f || x.y <= y.y * 1.001f || x.y >= y.y * 0.999f || x.z <= y.z * 1.001f || x.z >= y.z * 0.999f)
151 var distanceSample =
Vector3.Distance(item.Value[0], item.Value[1]);
152 if (v >= distanceSample * 0.98f && v <= distanceSample * 1.02f)
158 collectHoles[item.Key].Add(x);
159 collectHoles[item.Key].Add(y);
169 if (keyValuePair1.Value ==
null && keyValuePair2.Value ==
null)
175 collectHoles.Add(
"Hole" + m,
new List<Vector3>() { x, y });
383 foreach (KeyValuePair<
string, List<Vector3>> keyValue
in collectHoles)
385 bool isNotHole =
false;
386 string key = keyValue.Key;
387 List<Vector3> values = keyValue.Value;
388 AlreadyAdded =
false;
392 for (
int j = 0; j < values.Count; j++)
394 var keyValuePairOld = collectHoles.FirstOrDefault(s => s.Value.Contains(values[j]));
395 var keyValuePairList = collectHoles.Where(s => s.Value.Contains(values[j]));
396 var keyValuePairNew = filteredHoles.FirstOrDefault(s => s.Value.Contains(values[j]));
398 if (keyValuePairOld.Value !=
null)
400 foreach (var item
in keyValuePairList)
402 if (!HoleList.Contains(item.Key))
405 if (keyValuePairNew.Value ==
null)
407 TesztX = values[j] * 1000;
408 Debug.Log(HoleCoordTeszt);
412 filteredHoles.Add(key, values);
415 filteredHoles[key].AddRange(item.Value);
416 HoleList.Add(item.Key);
418 if (keyValuePairNew.Value !=
null)
420 filteredHoles[keyValuePairNew.Key].AddRange(item.Value);
421 HoleList.Add(item.Key);
431 foreach (KeyValuePair<
string, List<Vector3>> keyValue
in filteredHoles)
433 string key = keyValue.Key;
434 List<Vector3> values = keyValue.Value;
437 for (
int i = 0; i < values.Count; i++)
439 for (
int j = 0; j < values.Count; j++)
441 if (!HoleCoord.Contains(values[j]))
443 HoleCoord.Add(values[j]);
445 maxDistance =
Vector3.Distance(values[i], values[j]);
446 if (!maxDistances.ContainsKey(maxDistance))
451 var asd = maxDistances[maxDistance];
463 maxDistances.Add(maxDistance,
new List<Vector3>() { values[i], values[j] });
468 var max = maxDistances.Keys.Max();
469 var xMax = maxDistances[max][0];
470 var yMax = maxDistances[max][1];
471 maxDistances.Clear();
472 Vector3 midPoint =
new Vector3((xMax.x + yMax.x) / 2.0f, (xMax.y + yMax.y) / 2.0f, (xMax.z + yMax.z) / 2.0f);
473 var keyValuePairDiam = maxDistances.FirstOrDefault(s => s.Value.Contains(midPoint));
474 GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
475 cylinder.AddComponent<RectTransform>();
476 cylinder.transform.position = midPoint;
477 cylinder.transform.parent =
Hole.transform;
480 cylinder.SetActive(
false);
483 cylinder.transform.up =
Vector3.Cross(midPoint - values[0],midPoint - values[5]);
485 Plane plane =
new Plane(values[0], values[1], values[2]);
493 if (!holeDiameter.ContainsKey(max))
498 var asd = holeDiameter[max];
510 holeDiameter.Add(max,
new List<Vector3>() { midPoint });
512 holeDiameter[max].Add(midPoint);
513 Debug.Log(max +
":" + midPoint);
515 Debug.Log(max +
":" + midPoint);
516 finalHoles.Add(key, values);
519 Debug.Log(finalHoles.Count);
520 Debug.Log(HoleCoord.Count);
525 public void newScale(GameObject theGameObject,
float newSize)
528 float sizeX = theGameObject.GetComponent<Renderer>().bounds.size.x;
529 float sizeY = theGameObject.GetComponent<Renderer>().bounds.size.y;
530 float sizeZ = theGameObject.GetComponent<Renderer>().bounds.size.z;
531 Vector3 rescale = theGameObject.transform.localScale;
533 rescale.x = newSize * rescale.x / sizeX;
534 rescale.y = newSize * rescale.y / sizeY;
535 rescale.z = newSize * rescale.z / sizeZ;
537 theGameObject.transform.localScale = rescale;
546 foreach (KeyValuePair<
string, List<Vector3>> keyValue
in finalHoles)
548 string key = keyValue.Key;
549 List<Vector3> values = keyValue.Value;
550 for (
int i = 0; i < values.Count - 1; i++)
552 Gizmos.color =
new Color(1, 1, 1);
553 Gizmos.DrawLine(values[i], values[i + 1]);
UnityEngine.UI.Button Button
void newScale(GameObject theGameObject, float newSize)