protected override bool AllVerticesInScreenPolygon(ScreenPolygonParams data) { // Computes the lines that are completely enclosed to the screen polygon if (vp.processVisibleOnly && !Selected) { return(false); } SelectedSubItems = new List <int>(); for (int i = 0; i < Lines.Length; i++) { IndexLine line = Lines[i]; if (UtilityEx.AllVerticesInScreenPolygon(data, new List <Point3D>() { Vertices[line.V1], Vertices[line.V2] }, 2)) { SelectedSubItems.Add(i); } } return(false); }
protected override bool AllVerticesInScreenPolygon(ScreenPolygonParams data) { // Computes the triangles that are completely enclosed to the screen polygon if (vp.processVisibleOnly && !Selected) { return(false); } SelectedSubItems = new List <int>(); for (int i = 0; i < Triangles.Length; i++) { var verts = GetTriangleVertices(Triangles[i]); if (UtilityEx.AllVerticesInScreenPolygon(data, verts, 3)) { SelectedSubItems.Add(i); } } UpdateCompileSelection(); return(false); }
protected override bool IsCrossingScreenPolygon(ScreenPolygonParams data) { if (vp.processVisibleOnly && !Selected) { return(false); } SelectedSubItems = new List <int>(); bool res = base.IsCrossingScreenPolygon(data); return(res); }
protected override bool InsideOrCrossingScreenPolygon(ScreenPolygonParams data) { // Computes the triangles that are inside or crossing the screen polygon for (int i = 0; i < Triangles.Length; i++) { var verts = GetTriangleVertices(Triangles[i]); if (UtilityEx.InsideOrCrossingScreenPolygon(verts[0], verts[1], verts[2], data)) { SelectedSubItems.Add(i); } } return(false); }
protected override bool IsCrossingScreenPolygon(ScreenPolygonParams data) { // Computes the triangles that are crossing the screen polygon if (vp.processVisibleOnly && !Selected) { return(false); } SelectedSubItems = new List <int>(); bool res = base.IsCrossingScreenPolygon(data); UpdateCompileSelection(); return(res); }
protected override bool ThroughTriangleScreenPolygon(ScreenPolygonParams data) { SelectedSubItems.Sort(); for (int i = 0; i < Triangles.Length; i++) { if (SelectedSubItems.BinarySearch(i) >= 0) { continue; } var verts = GetTriangleVertices(Triangles[i]); if (ThroughTriangleScreenPolygon(verts[0], verts[1], verts[2], data)) { SelectedSubItems.Add(i); } } return(false); }
protected override bool InsideOrCrossingScreenPolygon(ScreenPolygonParams data) { // Computes the lines that are inside or crossing the screen polygon for (int i = 0; i < Lines.Length; i++) { Segment2D seg; IndexLine line = Lines[i]; Point3D pt1 = Vertices[line.V1]; Point3D pt2 = Vertices[line.V2]; Point3D screenP1 = vp.Camera.WorldToScreen(pt1, data.ViewFrame); Point3D screenP2 = vp.Camera.WorldToScreen(pt2, data.ViewFrame); if (screenP1.Z > 1 || screenP2.Z > 1) { return(false); // for perspective } seg = new Segment2D(screenP1, screenP2); if (UtilityEx.PointInPolygon(screenP1, data.ScreenPolygon) || UtilityEx.PointInPolygon(screenP2, data.ScreenPolygon)) { SelectedSubItems.Add(i); continue; } for (int j = 0; j < data.ScreenSegments.Count; j++) { Point2D i0; if (Segment2D.Intersection(data.ScreenSegments[j], seg, out i0)) { SelectedSubItems.Add(i); break; } } } return(false); }
protected override bool IsCrossingScreenPolygon(ScreenPolygonParams data) { int newSelectedCount = 0; for (int j = 0; j < PointArray.Length; j += 3) { Point2D onScreen = model.WorldToScreen(PointArray[j], PointArray[j + 1], PointArray[j + 2]); if (ColorArray[j] != 255 && onScreen.X > data.Min.X && onScreen.X <data.Max.X && onScreen.Y> data.Min.Y && onScreen.Y < data.Max.Y && Utility.PointInPolygon(onScreen, data.ScreenPolygon)) { // sets point color to red ColorArray[j] = 255; newSelectedCount++; } } selectedCount += newSelectedCount; if (newSelectedCount != 0) { RegenMode = regenType.CompileOnly; CustomSelected = true; } else if (selectedCount == 0) { CustomSelected = false; } return(false); }