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