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(); }
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; } }