示例#1
0
        private void Draw(Bitmap bitmap, GeometryShader2D shader, Matrix4x4 transform)
        {
            var geometries = new List <IMarkGeometry>();

            var border = (MarkGeometryRectangle)Boundary.Clone();

            border.Stroke = Color.White;

            border.Transform(transform);
            geometries.Add(border);

            // apply transformation to geometries
            foreach (var line in Segments)
            {
                var geometry = ((IMarkGeometry)line.Clone());
                geometry.Transform(transform);
                geometries.Add(geometry);
            }

            // draw used cells in red
            shader.Draw(
                bitmap,
                geometries
                );

            if (ChildrenExists)
            {
                NorthWest.Draw(bitmap, shader, transform);
                NorthEast.Draw(bitmap, shader, transform);
                SouthWest.Draw(bitmap, shader, transform);
                SouthEast.Draw(bitmap, shader, transform);
            }
        }
示例#2
0
        public bool SaveImage(string filePath)
        {
            var bitmap = new Bitmap(
                480, 480,
                PixelFormat.Format24bppRgb
                );

            var shader = new GeometryShader2D();

            shader.UpdateSettings(1, 1, Color.Red, Color.Green, Color.Transparent);

            shader.Reset(bitmap, Color.Black);

            var xScale = bitmap.Width / Boundary.Extents.Width;
            var yScale = bitmap.Height / Boundary.Extents.Height;

            // calculate transform
            var transformationMatrix = GeometricArithmeticModule.CombineTransformations(
                // centre geometries at origin before scaling
                GeometricArithmeticModule.GetTranslationTransformationMatrix(
                    -Boundary.Extents.Centre.X,
                    -Boundary.Extents.Centre.Y
                    ),
                // scale geometries to fit the target bitmap
                GeometricArithmeticModule.GetScalingTransformationMatrix(
                    xScale,
                    -yScale
                    ),
                // centre geometries in target bitmap
                GeometricArithmeticModule.GetTranslationTransformationMatrix(
                    0.5 * bitmap.Width,
                    0.5 * bitmap.Height
                    )
                );

            Draw(bitmap, shader, transformationMatrix);
            return(shader.WriteToFile(bitmap, filePath, PixelFormat.Format24bppRgb, 120, 120, GeometryShader2D.OptimisationSetting.Default));
        }