void SortCenters() { PointSorter ps = new PointSorter(); ps.direction = DimDirection; //сортируем по направлению centers.Sort(ps); centers_projected.Sort(ps); }
private void UpdateMesh(PointSorter sortedPoints) { Vector3 v0 = sortedPoints.FirstPoint.WorldPos; Vector3 v1 = sortedPoints.SecondPoint.WorldPos; Vector3 v2 = sortedPoints.ThirdPoint.WorldPos; TrianglePlane = new Plane(v0, v1, v2); triangleMesh.vertices = new Vector3[] { v0, v1, v2 }; triangleMesh.normals = new Vector3[] { TrianglePlane.normal, TrianglePlane.normal, TrianglePlane.normal }; triangleMesh.RecalculateBounds(); }
public void DoUpdate(bool showTriangle) { FoundTriangle = false; Vector2 cursorPosition = GetCursorPixelPosition(); Datum[] data = GetData(cursorPosition).ToArray(); if (data.Length >= 3) { PointSorter sortedPoints = new PointSorter(data); if (sortedPoints.TriangleFound) { FoundTriangle = true; PointA = sortedPoints.FirstPoint.WorldPos; PointB = sortedPoints.SecondPoint.WorldPos; PointC = sortedPoints.ThirdPoint.WorldPos; UpdateMesh(sortedPoints); } } meshFilter.gameObject.SetActive(showTriangle); }
public override void Execute() { base.Execute(); var sset = Input.Objects("Выберите объекты для нанесения выносок или ", new string[] { "Angle", "Уклон", "oFFset", "cМЕщение", "Text", "ТТекст" }, new SelectionTextInputEventHandler(KeywordInput)); if (Input.StatusBad) { return; } string[] Keywords = null; if (sset.Count == 1) { Keywords = new string[] { "LEft", "ЛЕво", "RIght", "ПРаво", "INside", "внуТРи", "OUtside", "сНАружи" }; } leader_point = Input.Point("\nУкажите точку, через которую пройдет выносная линия", Keywords); if (Input.StatusKeyword) { SideInput(Input.StringResult); leader_point = Input.Point("\nУкажите точку, через которую пройдет выносная линия"); } if (Input.StatusBad) { return; } //достаем объекты using (Utilities.TransactionHelper th = new Utilities.TransactionHelper()) { objects = th.ReadObjects(sset); Line dir = new Line(Point3d.Origin, new Point3d(1000, 0, 0)); //для работы функции нахождения центра bool hascenter; for (int i = 0; i < objects.Count; i++) { Point3d cen = UT.GetCenter(objects[i], dir, Point3d.Origin, out hascenter); if (hascenter) { centers.Add(cen); } } if (centers.Count > 1) //если больше 1 объекта { dir = new Line(centers[0], centers[centers.Count - 1]); //сортируем PointSorter ps = new PointSorter(); ps.direction = dir; //сортируем по направлению centers.Sort(ps); } //создаем объекты if (centers.Count > 1) { GroupLeader(centers[0], centers[centers.Count - 1], leader_point); } else if (centers.Count == 1) { GroupLeader(centers[0], leader_point, group_leader_side); } else { return; //если объектов 0 то нам здесь нечего делать } cline = s_cline; } Make(); Line p1p2 = new Line(p1, p2); bool subleader = false; if (p1p2.Angle > Math.PI * 1 / 4 && p1p2.Angle < Math.PI * 3 / 4 || p1p2.Angle > Math.PI * 5 / 4 && p1p2.Angle < Math.PI * 7 / 4) { subleader = true; } else { geometry.Add(mt); } using (TransactionHelper th = new TransactionHelper()) { th.WriteObjects(geometry); } //нужно 2 разных транзакции чтобы видеть результат работы предыдущей части if (subleader) { using (TransactionHelper th = new TransactionHelper()) { PrepareSubLeader(); th.WriteObject(geometry.Last()); } } }