public ToolManager() { rulerTool = new RulerTool(this); angleTool = new AngleTool(this); selectTool = new SelectTool(this); pathTool = new PathTool(this); sketchTool = new SketchTool(this); contextMenuTool = new ContextMenuTool(this); pointInspectTool = new PointInspectTool(this); }
void ATool() { Handles.color = color; // Move Handles angle.from = Handles.PositionHandle(angle.from, Quaternion.identity); angle.p1 = Handles.PositionHandle(angle.p1, Quaternion.identity); angle.p2 = Handles.PositionHandle(angle.p2, Quaternion.identity); // Draw Handles.DrawLine(angle.from, angle.p1); Handles.DrawLine(angle.from, angle.p2); Vector3 n, s1, s2; s1 = (angle.p2 - angle.from).normalized; s2 = (angle.p1 - angle.from).normalized; n = Vector3.Cross(s1, s2); float s1Length = Vector3.Distance(angle.from, angle.p1); float s2Length = Vector3.Distance(angle.from, angle.p2); float length = AngleTool.Smallest(s1Length, s2Length); GUIStyle style = new GUIStyle(); style.normal.textColor = color; style.fontSize = 20; float a = Vector3.Angle(s1, s2); a = MTool.Round(a, decimals); char m = '°'; Handles.DrawWireArc(angle.from, n, (angle.p2 - angle.from).normalized, a, length / 2); Handles.Label(angle.from, a.ToString() + m, style); }
protected override void OnMouseDown(Vector3 pos, ICADObject sko) { var entity = sko as IEntity; if (constraint != null && entity == null) { Finish(); return; } if (entity == null) { return; } if (e0 == null) { e0 = entity; if (entity.type == IEntityType.Line) { SpawnConstraint(() => new PointsDistance(DetailEditor.instance.currentSketch.GetSketch(), entity)); } else if (entity.IsCircular()) { SpawnConstraint(() => new Diameter(DetailEditor.instance.currentSketch.GetSketch(), entity)); } } else { if (entity.type == IEntityType.Point || e0.IsCircular() && entity.type == IEntityType.Line) { var t = e0; e0 = entity; entity = t; } if (e0.type == IEntityType.Point) { if (entity.type == IEntityType.Point) { SpawnConstraint(() => new PointsDistance(DetailEditor.instance.currentSketch.GetSketch(), e0, entity)); } else if (entity.type == IEntityType.Line) { SpawnConstraint(() => new PointLineDistance(DetailEditor.instance.currentSketch.GetSketch(), e0, entity)); } else if (entity.IsCircular()) { var circle = entity as CircleEntity; var arc = entity as ArcEntity; if (circle != null && circle.center.IsCoincidentWith(e0)) { var c = SpawnConstraint(() => new Diameter(DetailEditor.instance.currentSketch.GetSketch(), circle)); c.showAsRadius = true; e0 = null; } else if (arc != null && arc.c.IsCoincidentWith(e0)) { var c = SpawnConstraint(() => new Diameter(DetailEditor.instance.currentSketch.GetSketch(), arc)); e0 = null; } else { SpawnConstraint(() => new PointCircleDistance(DetailEditor.instance.currentSketch.GetSketch(), e0, entity)); } } } else if (e0.IsCircular()) { if (entity.IsCircular()) { SpawnConstraint(() => new CirclesDistance(DetailEditor.instance.currentSketch.GetSketch(), e0, entity)); } } else if (e0.type == IEntityType.Line) { if (entity.type == IEntityType.Line) { SpawnConstraint(() => AngleTool.CreateConstraint(e0, entity)); } else if (entity.IsCircular()) { SpawnConstraint(() => new LineCircleDistance(DetailEditor.instance.currentSketch.GetSketch(), e0, entity)); } } } }