|
|
@@ -1,16 +1,32 @@
|
|
|
using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
using UnityEngine;
|
|
|
+using Sirenix.OdinInspector;
|
|
|
|
|
|
public class MeshSelection : MonoBehaviour
|
|
|
{
|
|
|
+ [DetailedInfoBox("使用说明", "1、选择要修改的物体\n2、点击开始选择,然后“ctrl+左键”选择网格上的面,选择完毕后点击生成\n3、选择第二个面进行生成点位\n4、点击生成中心点")]
|
|
|
|
|
|
- private GameObject ToolSelectObj;
|
|
|
+ [LabelText("需要修改的物体")]
|
|
|
+ public GameObject ToolSelectObj;
|
|
|
|
|
|
+ [HideInInspector]
|
|
|
public List<int> SelectedTrianglesIndex = new List<int>();
|
|
|
-
|
|
|
+ [HideInInspector]
|
|
|
public HashSet<Vector3> TrianglesVector3s = new HashSet<Vector3>();
|
|
|
|
|
|
+ [LabelText("第一个点位")]
|
|
|
+ [ShowIf("showF"), ReadOnly]
|
|
|
+ public GameObject firstObj;
|
|
|
+
|
|
|
+ [LabelText("第二个点位")]
|
|
|
+ [ShowIf("showS"),ReadOnly]
|
|
|
+ public GameObject SecondObj;
|
|
|
+
|
|
|
+ bool showF = false;
|
|
|
+ bool showS = false;
|
|
|
+ bool showC = false;
|
|
|
+
|
|
|
|
|
|
public void GetBoundaryVertices(Mesh mesh)
|
|
|
{
|
|
|
@@ -38,7 +54,6 @@ public class MeshSelection : MonoBehaviour
|
|
|
{
|
|
|
TrianglesVector3s.Add(ToolSelectObj.transform.TransformPoint(vertices[edge.Key.Item1]));
|
|
|
TrianglesVector3s.Add(ToolSelectObj.transform.TransformPoint(vertices[edge.Key.Item2]));
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -55,23 +70,49 @@ public class MeshSelection : MonoBehaviour
|
|
|
Vector3 v3 = Vector3.zero;
|
|
|
foreach(Vector3 vector3 in TrianglesVector3s)
|
|
|
{
|
|
|
- GameObject gameObject = new GameObject();
|
|
|
- gameObject.transform.position = vector3;
|
|
|
v3 += vector3;
|
|
|
}
|
|
|
|
|
|
- GameObject obj = new GameObject();
|
|
|
- obj.transform.SetParent(ToolSelectObj.transform.parent, true);
|
|
|
- obj.transform.localPosition = v3 / TrianglesVector3s.Count ;
|
|
|
- obj.name = ToolSelectObj.name+"---生成点";
|
|
|
- //ToolSelectObj.transform.SetParent(obj.transform,true);
|
|
|
+ if(firstObj == null)
|
|
|
+ {
|
|
|
+ firstObj = new GameObject();
|
|
|
+ firstObj.transform.SetParent(ToolSelectObj.transform.parent, true);
|
|
|
+ firstObj.transform.position = v3 / TrianglesVector3s.Count;
|
|
|
+ firstObj.name = ToolSelectObj.name + "-第一个生成点";
|
|
|
+ showF = true;
|
|
|
+ TrianglesVector3s.Clear();
|
|
|
+ if (showF && showS) showC = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (SecondObj == null)
|
|
|
+ {
|
|
|
+ SecondObj = new GameObject();
|
|
|
+ SecondObj.transform.SetParent(ToolSelectObj.transform.parent, true);
|
|
|
+ SecondObj.transform.position = v3 / TrianglesVector3s.Count;
|
|
|
+ SecondObj.name = ToolSelectObj.name + "-第二个生成点";
|
|
|
+ showS = true;
|
|
|
+ TrianglesVector3s.Clear();
|
|
|
+ if (showF && showS) showC = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- TrianglesVector3s.Clear();
|
|
|
- }
|
|
|
|
|
|
- public void setObj(GameObject obj)
|
|
|
+ }
|
|
|
+ [Button("生成中心点")]
|
|
|
+ [ShowIf("showC")]
|
|
|
+ public void CreateCenterObj()
|
|
|
{
|
|
|
- ToolSelectObj = obj;
|
|
|
+ GameObject obj = new GameObject();
|
|
|
+ obj.transform.SetParent(ToolSelectObj.transform.parent, true);
|
|
|
+ obj.transform.position = (firstObj.transform.position + SecondObj.transform.position) / 2;
|
|
|
+ obj.transform.rotation = Quaternion.LookRotation( (firstObj.transform.position - SecondObj.transform.position).normalized);
|
|
|
+ obj.name = ToolSelectObj.name + "---生成点";
|
|
|
+ ToolSelectObj.transform.SetParent(obj.transform);
|
|
|
+ DestroyImmediate(firstObj);
|
|
|
+ DestroyImmediate(SecondObj);
|
|
|
+ showC= showF = showS = false;
|
|
|
+ TrianglesVector3s.Clear();
|
|
|
}
|
|
|
|
|
|
}
|