Esempio n. 1
0
        public gr_text(gr_text src)
        {
            this.layer = src.layer;

            this.Value             = src.Value;
            this.Position          = new Position();
            this.Position.At       = src.Position.At;
            this.Position.Rotation = src.Position.Rotation;

            this.effects                = new TextEffects();
            this.effects.font           = new FontAttributes();
            this.effects.font.Size      = src.effects.font.Size;
            this.effects.font.thickness = src.effects.font.thickness;
            this.effects.font.italic    = src.effects.font.italic;
            this.effects.vert_align     = src.effects.vert_align;
            this.effects.horiz_align    = src.effects.horiz_align;
            this.effects.mirror         = src.effects.mirror;
        }
Esempio n. 2
0
        public static gr_text Parse(SExpression root_node)
        {
            gr_text   result = new gr_text();
            SNodeBase node;

            node         = root_node.Items[0];
            result.Value = (node as SNodeAtom).Value;

            // at
            node = root_node.Items[1];
            SExpression sub = node as SExpression;

            if (sub.Name == "at")
            {
                result.Position = Position.Parse(sub);
            }

            // TODO:

            return(result);
        }
Esempio n. 3
0
        public void Render(Canvas canvas)
        {
            canvas.color_background = Color.Black;

            // units in mm?
            canvas.Min          = new PointF(0, 0);
            canvas.Max          = new PointF(297, 210);
            canvas.grid_spacing = 10;

            canvas.Ydir = 1; // +ve Y is down the page

            canvas.Initialise();

            foreach (graphic_base node in this.Drawings)
            {
                if (node is gr_line)
                {
                    gr_line gr_line = node as gr_line;

                    Point sp1 = canvas.ToScreen(gr_line.start);
                    Point sp2 = canvas.ToScreen(gr_line.end);

                    Pen pen = new Pen(GetColorFromLayer(gr_line.layer));
                    canvas.g.DrawLine(pen, sp1, sp2);
                }
                else if (node is gr_text)
                {
                    gr_text text = node as gr_text;

                    Point sp1  = canvas.ToScreen(text.Position.At);
                    Font  font = new Font("Arial", 10, FontStyle.Regular, GraphicsUnit.Pixel);

                    canvas.g.DrawString(text.Value, font, Brushes.White, sp1);
                }
            }
        }
Esempio n. 4
0
        public bool LoadFromFile(string filename)
        {
            bool result = false;

            RootNode.LoadFromFile(filename);

            UnParsed = new List <SExpression>();

            if (RootNode.Name == "kicad_pcb")
            {
                SNodeBase pcb_node = RootNode;

                SExpression pcb_items = (pcb_node as SExpression);

                foreach (SExpression node in pcb_items.Items)
                {
                    string name = node.Name;

                    if (name == "gr_line")
                    {
                        //
                        gr_line g = gr_line.Parse(node);
                        if (Drawings == null)
                        {
                            Drawings = new List <graphic_base>();
                        }
                        Drawings.Add(g);
                    }
                    else if (name == "gr_text")
                    {
                        //
                        gr_text g = gr_text.Parse(node);
                        if (Drawings == null)
                        {
                            Drawings = new List <graphic_base>();
                        }
                        Drawings.Add(g);
                    }
                    else if (name == "gr_arc")
                    {
                        gr_arc g = gr_arc.Parse(node);
                        if (Drawings == null)
                        {
                            Drawings = new List <graphic_base>();
                        }
                        Drawings.Add(g);
                    }
                    else if (name == "gr_circle")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else if (name == "module")
                    {
                        Module module = Module.Parse(node);
                        if (Modules == null)
                        {
                            Modules = new List <Module>();
                        }
                        Modules.Add(module);
                    }
                    else if (name == "version")
                    {
                        FileVersion = node.GetString();
                    }
                    else if (name == "host")
                    {
                        Host_Name    = (node.Items[0] as SNodeAtom).Value;
                        Host_Version = (node.Items[1] as SNodeAtom).Value;
                    }
                    else if (name == "general")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else if (name == "page")
                    {
                        Page = node.GetString();
                    }
                    else if (name == "title_block")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else if (name == "layers")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else if (name == "setup")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else if (name == "net")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else if (name == "net_class")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else if (name == "dimension")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else if (name == "segment")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else if (name == "via")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else if (name == "zone")
                    {
                        Trace("LoadPcb: todo: {0}", name);
                    }
                    else
                    {
                        Trace("LoadPcb: unrecognised: {0}", name);
                    }
                }
            }

            return(result);
        }
Esempio n. 5
0
        /*
         * (dimension
         *      81.28
         *      (width 0.3)
         *      (layer Dwgs.User)
         *      (gr_text "81.280 mm"
         *          (at 39.37 -77.55)
         *          (layer Dwgs.User)
         *          (effects (font (size 1.5 1.5) (thickness 0.3)))
         *      )
         *      (feature1 (pts (xy 80.01 -74.93) (xy 80.01 -78.9)))
         *      (feature2 (pts (xy -1.27 -74.93) (xy -1.27 -78.9)))
         *      (crossbar (pts (xy -1.27 -76.2) (xy 80.01 -76.2)))
         *      (arrow1a  (pts (xy 80.01 -76.2) (xy 78.883496 -75.613579)))
         *      (arrow1b  (pts (xy 80.01 -76.2) (xy 78.883496 -76.786421)))
         *      (arrow2a  (pts (xy -1.27 -76.2) (xy -0.143496 -75.613579)))
         *      (arrow2b  (pts (xy -1.27 -76.2) (xy -0.143496 -76.786421)))
         * )
         */

        public Dimension(string layer, float width, PointF start, PointF end,
                         float text_size, float text_width,
                         bool is_mm, int precision, bool show_units)
        {
            this.layer  = layer;
            this.width  = width;
            this.Start  = start;
            this.End    = end;
            this.length = PointFExt.DistanceBetweenPoints(start, end);

            float  height         = -2 * text_size;
            SizeF  arrow_head     = new SizeF(1f, 0.2f);
            PointF normalised_end = new PointF(start.X + length, start.Y);
            double angle          = MathUtil.RadToDeg(Math.Atan2(end.Y - start.Y, end.X - start.X));

            // create the dimension line assuming angle = 0

            Features = new List <DimensionFeature>();
            Features.Add(new DimensionFeature(DimensionFeature.Crossbar,
                                              new PointF(start.X, start.Y + height / 2),
                                              new PointF(normalised_end.X, start.Y + height / 2)
                                              ));

            Features.Add(new DimensionFeature(DimensionFeature.Feature1,
                                              new PointF(start.X, start.Y),
                                              new PointF(start.X, start.Y + height)
                                              ));

            Features.Add(new DimensionFeature(DimensionFeature.Feature2,
                                              new PointF(normalised_end.X, start.Y),
                                              new PointF(normalised_end.X, start.Y + height)
                                              ));

            Features.Add(new DimensionFeature(DimensionFeature.Arrow1a,
                                              new PointF(start.X, start.Y + height / 2),
                                              new PointF(start.X + arrow_head.Width, start.Y + height / 2 + arrow_head.Height)
                                              ));
            Features.Add(new DimensionFeature(DimensionFeature.Arrow1b,
                                              new PointF(start.X, start.Y + height / 2),
                                              new PointF(start.X + arrow_head.Width, start.Y + height / 2 - arrow_head.Height)
                                              ));

            Features.Add(new DimensionFeature(DimensionFeature.Arrow2a,
                                              new PointF(normalised_end.X, start.Y + height / 2),
                                              new PointF(normalised_end.X - arrow_head.Width, start.Y + height / 2 + arrow_head.Height)
                                              ));

            Features.Add(new DimensionFeature(DimensionFeature.Arrow2b,
                                              new PointF(normalised_end.X, start.Y + height / 2),
                                              new PointF(normalised_end.X - arrow_head.Width, start.Y + height / 2 - arrow_head.Height)
                                              ));

            string text;

            if (is_mm)
            {
                text = length.ToString("f" + precision);
                if (show_units)
                {
                    text += "mm";
                }
            }
            else
            {
                text = (length / 25.4).ToString("f" + precision);
                if (show_units)
                {
                    text += "in";
                }
            }

            caption = new gr_text(text, new PointF(start.X + length / 2, start.Y + height / 2 - text_size / 2 - text_size * 0.1f), layer, new SizeF(text_size, text_size), text_width, 0);

            // rotate about start point
            RotateBy((float)angle);
        }