public void RemoveGizmoVolume(Gizmo gizmo) { if (!(gizmo is GizmoVolume)) { return; } GizmoVolume gizmoVolume = (GizmoVolume)gizmo; VolumeBehaviour volumeBehaviour = (VolumeBehaviour)gizmoMap[gizmoVolume]; Destroy(volumeBehaviour.gameObject); gizmoMap.Remove(gizmoVolume); }
public void AddGizmoVolume(Gizmo gizmo) { if (!(gizmo is GizmoVolume)) { return; } GizmoVolume gizmoVolume = (GizmoVolume)gizmo; GameObject gizmoObject = new GameObject("volume"); gizmoObject.transform.SetParent(gizmoWrapper.transform); VolumeBehaviour volumeBehaviour = gizmoObject.AddComponent <VolumeBehaviour>(); volumeBehaviour.Init(geoCamera); FaceRefer face = gizmoVolume.face; if (face.ids.Length < 3) { return; } Vector3 center = geometry.Center(); Vector3 v1 = geometry.UnitVector(face.ids[0]); Vector3 v2 = geometry.UnitVector(face.ids[1]); Vector3 v3 = geometry.UnitVector(face.ids[2]); float radius = v3.z - v2.z; int pointCount = 4; Vector3[] vectors = new Vector3[pointCount]; float angledegree = 360.0f; float angleRad = Mathf.Deg2Rad * angledegree; float angleCur = angleRad; float angledelta = angleRad / pointCount; for (int i = 0; i < pointCount; i++) { float cosA = Mathf.Cos(angleCur); float sinA = Mathf.Sin(angleCur); vectors[i] = new Vector3(radius * cosA, v1.y, radius * sinA); angleCur -= angledelta; } string area = geometry.Volume(face.ids); volumeBehaviour.SetData(center, vectors, area); gizmoMap.Add(gizmoVolume, volumeBehaviour); }