public void Draw(Graphics2D graphics, Packable packable, double height, bool selected, bool annotate) { graphics.NumberOfViews = 1; graphics.Clear(selected ? Color.LightBlue : Color.White); graphics.SetViewport(0.0f, 0.0f, (float)_layer.Length, (float)_layer.Width); graphics.SetCurrentView(0); graphics.DrawRectangle(Vector2D.Zero, new Vector2D(_layer.Length, _layer.Width), Color.Black); // draw layer (brick) if (_layer is Layer2DBrick layer2D) { uint pickId = 0; foreach (var bPosition in layer2D.Positions) { Box b = null; if (packable is PackProperties) { b = new Pack(pickId++, packable as PackProperties, bPosition); } else if (packable is PackableBrick) { b = new Box(pickId++, packable as PackableBrick, bPosition); } if (null != b) { b.Draw(graphics); } } } // draw layer (cylinder) else if (_layer is Layer2DCylImp) { Layer2DCylImp layer2DCyl = _layer as Layer2DCylImp; uint pickId = 0; foreach (Vector2D pos in layer2DCyl) { Cylinder c = new Cylinder(pickId++, packable as CylinderProperties, new CylPosition(new Vector3D(pos.X, pos.Y, 0.0), HalfAxis.HAxis.AXIS_Z_P)); c.Draw(graphics); } } // draw axes bool showAxis = false; if (showAxis) { // draw axis X graphics.DrawLine(Vector2D.Zero, new Vector2D(_layer.Length, 0.0), Color.Red); // draw axis Y graphics.DrawLine(Vector2D.Zero, new Vector2D(0.0, _layer.Width), Color.Green); } // annotate thumbnail if (annotate) { Annotate(graphics.Graphics, graphics.Size, height); } }