コード例 #1
0
        public CBox(int cx, int cy, BBox bbox)
        {
            RectangleF rc = Fitrect.Fit(new RectangleF(0, 0, cx, cy), new SizeF((float)(bbox.x1 - bbox.x0), (float)(bbox.y1 - bbox.y0)));

            ox = -bbox.x0;
            tx = +rc.Left;
            sx = rc.Width / (bbox.x1 - bbox.x0);

            oy = -bbox.y0;
            ty = +rc.Top;
            sy = rc.Height / (bbox.y1 - bbox.y0);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: kenjiuno/ThumbGensPack
        public CBox(int cx, int cy, BBox bbox)
        {
            RectangleF rc = Fitrect.Fit(new RectangleF(0, 0, cx, cy), new SizeF((float)(bbox.x1 - bbox.x0), (float)(bbox.y1 - bbox.y0)));

            ox = -bbox.x0;
            tx = +rc.Left;
            sx = rc.Width / (bbox.x1 - bbox.x0);

            oy = -bbox.y0;
            ty = +rc.Top;
            sy = rc.Height / (bbox.y1 - bbox.y0);
        }
コード例 #3
0
        static void Main(string[] args)
        {
            if (args.Length < 4)
            {
                Console.Error.WriteLine("dxf2bmp input.dxf output.bmp cx cy ");
                Environment.Exit(1);
            }
            using (StreamReader rr = new StreamReader(args[0], Encoding.Default)) {
                IEater        eater = null;
                List <IEater> al    = new List <IEater>();
                while (true)
                {
                    String row0 = rr.ReadLine();
                    String row1 = rr.ReadLine();
                    int    ty;
                    if (row1 == null || !int.TryParse(row0.Trim(), out ty))
                    {
                        break;
                    }
                    if (ty == 0)
                    {
                        if (false)
                        {
                        }
                        else if (row1 == "LINE")
                        {
                            al.Add(eater = new Line());
                        }
                        else if (row1 == "CIRCLE")
                        {
                            al.Add(eater = new Circle());
                        }
                        else
                        {
                            eater = null;
                        }
                    }
                    else if (eater != null)
                    {
                        eater.Eat(ty, row1);
                    }
                }

                BBox bbox = new BBox();
                {
                    foreach (var q in al.Where(p => p is Line).Cast <Line>())
                    {
                        bbox.Eat(q);
                    }
                    foreach (var q in al.Where(p => p is Circle).Cast <Circle>())
                    {
                        bbox.Eat(q);
                    }
                }

                bbox.InflateRate(0.02f, 0.02f);

                using (Bitmap pic = new Bitmap(int.Parse(args[2]), int.Parse(args[3]))) {
                    using (Graphics cv = Graphics.FromImage(pic)) {
                        cv.TranslateTransform(0, pic.Height);
                        cv.ScaleTransform(1, -1);

                        cv.SmoothingMode = SmoothingMode.HighQuality;

                        CBox cb = new CBox(pic.Width, pic.Height, bbox);

                        cv.Clear(Color.White);

                        foreach (IEater eat in al)
                        {
                            if (eat is Line)
                            {
                                Line t = (Line)eat;
                                cv.DrawLine(
                                    new Pen(t.color),
                                    (float)cb.X(t.x0),
                                    (float)cb.Y(t.y0),
                                    (float)cb.X(t.x1),
                                    (float)cb.Y(t.y1)
                                    );
                            }
                            else if (eat is Circle)
                            {
                                Circle t = (Circle)eat;
                                cv.DrawEllipse(
                                    Pens.Black,
                                    RectangleF.FromLTRB(
                                        (float)cb.X(t.x - t.r),
                                        (float)cb.Y(t.y - t.r),
                                        (float)cb.X(t.x + t.r),
                                        (float)cb.Y(t.y + t.r)
                                        )
                                    );
                            }
                        }

#if false
                        cv.FillRectangle(
                            new LinearGradientBrush(new Point(0, 0), new Point(pic.Width, pic.Height), Color.Black, Color.Gray),
                            new RectangleF(PointF.Empty, pic.Size)
                            );
                        cv.DrawString(
                            "A DXF thumbnail",
                            new Font(FontFamily.GenericSerif, 8),
                            Brushes.WhiteSmoke,
                            new RectangleF(PointF.Empty, pic.Size)
                            );
#endif
                    }
                    pic.Save(args[1], System.Drawing.Imaging.ImageFormat.Bmp);
                }
            }
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: kenjiuno/ThumbGensPack
        static void Main(string[] args)
        {
            if (args.Length < 4) {
                Console.Error.WriteLine("dxf2bmp input.dxf output.bmp cx cy ");
                Environment.Exit(1);
            }
            using (StreamReader rr = new StreamReader(args[0], Encoding.Default)) {
                IEater eater = null;
                List<IEater> al = new List<IEater>();
                while (true) {
                    String row0 = rr.ReadLine();
                    String row1 = rr.ReadLine();
                    int ty;
                    if (row1 == null || !int.TryParse(row0.Trim(), out ty))
                        break;
                    if (ty == 0) {
                        if (false) { }
                        else if (row1 == "LINE") al.Add(eater = new Line());
                        else if (row1 == "CIRCLE") al.Add(eater = new Circle());
                        else eater = null;
                    }
                    else if (eater != null) {
                        eater.Eat(ty, row1);
                    }
                }

                BBox bbox = new BBox();
                {
                    foreach (var q in al.Where(p => p is Line).Cast<Line>()) bbox.Eat(q);
                    foreach (var q in al.Where(p => p is Circle).Cast<Circle>()) bbox.Eat(q);
                }

                bbox.InflateRate(0.02f, 0.02f);

                using (Bitmap pic = new Bitmap(int.Parse(args[2]), int.Parse(args[3]))) {
                    using (Graphics cv = Graphics.FromImage(pic)) {
                        cv.TranslateTransform(0, pic.Height);
                        cv.ScaleTransform(1, -1);

                        cv.SmoothingMode = SmoothingMode.HighQuality;

                        CBox cb = new CBox(pic.Width, pic.Height, bbox);

                        cv.Clear(Color.White);

                        foreach (IEater eat in al) {
                            if (eat is Line) {
                                Line t = (Line)eat;
                                cv.DrawLine(
                                    new Pen(t.color),
                                    (float)cb.X(t.x0),
                                    (float)cb.Y(t.y0),
                                    (float)cb.X(t.x1),
                                    (float)cb.Y(t.y1)
                                    );
                            }
                            else if (eat is Circle) {
                                Circle t = (Circle)eat;
                                cv.DrawEllipse(
                                    Pens.Black,
                                    RectangleF.FromLTRB(
                                        (float)cb.X(t.x - t.r),
                                        (float)cb.Y(t.y - t.r),
                                        (float)cb.X(t.x + t.r),
                                        (float)cb.Y(t.y + t.r)
                                    )
                                    );
                            }
                        }

            #if false
                        cv.FillRectangle(
                            new LinearGradientBrush(new Point(0, 0), new Point(pic.Width, pic.Height), Color.Black, Color.Gray),
                            new RectangleF(PointF.Empty, pic.Size)
                            );
                        cv.DrawString(
                            "A DXF thumbnail",
                            new Font(FontFamily.GenericSerif, 8),
                            Brushes.WhiteSmoke,
                            new RectangleF(PointF.Empty, pic.Size)
                            );
            #endif
                    }
                    pic.Save(args[1], System.Drawing.Imaging.ImageFormat.Bmp);
                }
            }
        }