Exemple #1
0
        static void DrawBox(Graphics.ISceneContext sc, Geom.Box2i box)
        {
            const int SHADOW = 4;

            GL.glColor4f(0.5f, 0.5f, 0.5f, 0.5f);
            GL.glBegin(GL.GL_QUADS);
            foreach (var p in new Geom.Point2i[] {
                // 右側の影
                new Geom.Point2i(box.Upper.x, box.Lower.y + SHADOW),
                new Geom.Point2i(box.Upper.x, box.Upper.y),
                new Geom.Point2i(box.Upper.x + SHADOW, box.Upper.y),
                new Geom.Point2i(box.Upper.x + SHADOW, box.Lower.y + SHADOW),
                // 下側の影
                new Geom.Point2i(box.Lower.x + SHADOW, box.Upper.y),
                new Geom.Point2i(box.Lower.x + SHADOW, box.Upper.y + SHADOW),
                new Geom.Point2i(box.Upper.x, box.Upper.y + SHADOW),
                new Geom.Point2i(box.Upper.x, box.Upper.y),
                // 右下の影
                new Geom.Point2i(box.Upper.x, box.Upper.y),
                new Geom.Point2i(box.Upper.x, box.Upper.y + SHADOW),
                new Geom.Point2i(box.Upper.x + SHADOW, box.Upper.y + SHADOW),
                new Geom.Point2i(box.Upper.x + SHADOW, box.Upper.y)
            }.Select(pt => sc.Camera.ScreenToCamera(pt)))
            {
                GL.glVertex3dv(p);
            }
            GL.glEnd();

            GL.glColor4f(1, 1, 1, 0.5f);
            GL.glBegin(GL.GL_QUADS);
            foreach (var p in new Geom.Point2i[] {
                new Geom.Point2i(box.Lower.x, box.Lower.y),
                new Geom.Point2i(box.Lower.x, box.Upper.y),
                new Geom.Point2i(box.Upper.x, box.Upper.y),
                new Geom.Point2i(box.Upper.x, box.Lower.y)
            }.Select(pt => sc.Camera.ScreenToCamera(pt)))
            {
                GL.glVertex3dv(p);
            }
            GL.glEnd();
        }
Exemple #2
0
        void FixPos()
        {
            const int MARGIN = 5;

            Geom.Size2i size = _view.Camera.ScreenSize;
            Geom.Box2i  box  = this.BoundingBox;
            if (box.Lower.x < MARGIN)
            {
                _pos.x += MARGIN - box.Lower.x;
            }
            if (box.Lower.y < MARGIN)
            {
                _pos.y += MARGIN - box.Lower.y;
            }
            if (box.Upper.x + MARGIN > size.x)
            {
                _pos.x -= box.Upper.x + MARGIN - size.x;
            }
            if (box.Upper.y + MARGIN > size.y)
            {
                _pos.y -= box.Upper.y + MARGIN - size.y;
            }
        }