Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        protected override bool IsCrossingScreenPolygon(ScreenPolygonParams data)
        {
            if (vp.processVisibleOnly && !Selected)
            {
                return(false);
            }

            SelectedSubItems = new List <int>();

            bool res = base.IsCrossingScreenPolygon(data);

            return(res);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
            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);
            }