Ejemplo n.º 1
0
            // 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();
 */
            }
Ejemplo n.º 2
0
            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);
            }