// region inside component // presently this is not allowed (V5.1.2) public override string ToString(double x, double y, double ModuleRotation) { // not allowed so just add to board Regions list to be output later RegionsL.Add(this); return(""); /* * StringBuilder ret = new StringBuilder(""); * * double clearance = GetRuleValue("Clearance", "PolygonClearance"); * if (Layer.Substring(0, 2) == "In") * { * // this is an inner layer so use plane clearance * clearance = GetRuleValue("PlaneClearance", "PlaneClearance"); * } * * string connectstyle = ""; // TODO get connect style from rules * ret.Append($" (zone (net {Net_no}) (net_name {Net_name}) (layer {Layer}) (tstamp 0) (hatch edge 0.508)"); * ret.Append($" (priority 100)\n"); * ret.Append($" (connect_pads {connectstyle} (clearance {clearance}))\n"); // TODO sort out these numbers properly * ret.Append($" (min_thickness 0.2)\n"); * if (Keepout) * ret.Append("(keepout(copperpour not_allowed))\n"); * else if (PolygonCutout) * ret.Append("(keepout (tracks not_allowed) (vias allowed) (copperpour not_allowed))"); * string fill = (Layer == "Edge.Cuts") ? "no" : "yes"; * ret.Append($" (fill {fill} (arc_segments 16) (thermal_gap 0.2) (thermal_bridge_width 0.3))\n"); * var i = -1; * ret.Append(" (polygon (pts\n "); * foreach (var Point in Points) * { * i++; * if ((i % 5) == 0) * ret.Append("\n "); * ret.Append(Point.ToString()); * } * ret.Append("\n )\n )\n )\n"); * * ret.Append($" (zone (net {Net_no}) (net_name {Net_name}) (layer {Layer}) (tstamp 0) (hatch edge 0.508)"); * ret.Append($" (priority 100)\n"); * ret.Append($" (connect_pads {connectstyle} (clearance {clearance}))\n"); // TODO sort out these numbers properly * ret.Append($" (min_thickness 0.2)\n"); * ret.Append(" (fill yes (arc_segments 16) (thermal_gap 0.2) (thermal_bridge_width 0.3))\n"); * * var i = 0; * ret.Append(" (fp_poly (pts\n "); * foreach (var Point in Points) * { * i++; * if ((i % 5) == 0) * ret.Append("\n "); * ret.Append(Point.ToString(x, y, ModuleRotation)); * } * // ret += "\n )\n )\n )\n"; * ret.Append($" ) ( layer {Brd.GetLayer(Layer)}) (width 0)\n )\n"); * * return ret.ToString(); */ }
public override bool ProcessLine(byte[] record) { Layers Layer; Int16 Component; bool InComponent; base.ProcessLine(); using (MemoryStream ms = new MemoryStream(record)) { // Use the memory stream in a binary reader. using (BinaryReader br = new BinaryReader(ms)) { try { ms.Seek(0, SeekOrigin.Begin); Layer = (Layers)br.ReadByte(); ms.Seek(1, SeekOrigin.Begin); short Flags = (short)br.ReadInt16(); ms.Seek(3, SeekOrigin.Begin); int net = (int)br.ReadInt16() + 1; ms.Seek(7, SeekOrigin.Begin); Component = br.ReadInt16(); InComponent = Component != -1; ms.Seek(0x12, SeekOrigin.Begin); int strlen = br.ReadInt32(); ms.Seek(0x16, SeekOrigin.Begin); byte[] bytes = br.ReadBytes(strlen); string str = ConvertToString(bytes); ms.Seek(0x16 + strlen, SeekOrigin.Begin); Int32 DataLen = br.ReadInt32(); string l = Brd.GetLayer((Layers)Layer); Region r = new Region(l, net, Flags, str); if (r.SubPolyIndex > 0) { // Rejected region return(true); } while (DataLen-- > 0) { double X = Math.Round(ToMM(br.ReadDouble()) - originX, Precision); double Y = Math.Round(ToMM(br.ReadDouble()) - originY, Precision); r.AddPoint(X, Y); } if (!InComponent) { RegionsL.Add(r); } else { if (!r.Keepout && !r.PolygonCutout) { ModulesL[Component].Regions.Add(r); } else { // until keepouts are allowed in components // just add as a board region RegionsL.Add(r); } } } catch (Exception Ex) { CheckThreadAbort(Ex); } } } return(true); }