public static CVAngle Create(CMAngle model, Transform parent, CVLineSegment segment1, CVLineSegment segment2) { var name = string.Format("angle {0}: {1} <-> {2}", model.Id, segment1.Model.Id, segment2.Model.Id); return(new GameObject(name).AddComponent <CVAngle>().Init(model, parent, segment1, segment2)); }
private CVAngle Init(CMAngle model, Transform parent, CVLineSegment segment1, CVLineSegment segment2) { CVPoint point = segment1.GetCommonPoint(segment2); // функция вычисления направлений линий, образующих угол Func <CVLineSegment, Vector3> getDir = segment => segment.RealDirection.normalized * (point == segment.FirstPoint ? 1 : -1); // создание обозначения угла const float radius = 0.2f; Vector3[] positions = null; if (model.IsRightAngle) { positions = CalcRightAngleContour(radius, getDir(segment1), getDir(segment2)); } else { positions = CalcAngleContour(radius, getDir(segment1), getDir(segment2)); } CreateLineRenderer(transform, positions); // привязка обозначения угла к месту угла transform.parent = parent; transform.localPosition = point.RealPosition; transform.localRotation = Quaternion.identity; transform.localScale = Vector3.one; Model = model; return(this); }
public override void Do() { CMAngle model = Owner.model.CreateAngle(segment1.Value.Model, segment2.Value.Model, angle); createdAngle = CVAngle.Create(model, Owner.anglesObj, segment1.Value, segment2.Value); }