⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unidat-fiducials.ulp

📁 老外的PCB设计软件,是免费的.可以上网更新.
💻 ULP
📖 第 1 页 / 共 3 页
字号:
         print_pad_shape(viatype(V), 0, 0);
         printf("%%ENDGRAFITEM\n");
         }
      }
    }
  }
//////////////////////////////////////////////////////
void shape(UL_BOARD B) { // what if mirrored?
  sx = 0;
  printf ("\n%%%%SHAPE\n");
  B.elements(E) {
    if (E.package.library != _MARKER_) {
      new = 1;                    // padstacktype not generated yet
      for (i = 0; shapename[i]; i++) {
          if (shapename[i] == E.package.name)
             new = 0;             // shapename exists
          }
      if (new) {
         shapename[sx] = E.package.name;
         sx++;
         printf ("SHAPE=%s\n", E.package.name);
         printf ("%%SHAPEOUTLINE\n");
         printf ("%%GRAFITEM\n");
         rx = u2u(E.x); ry = u2u(E.y); // origin for rot function
           E.package.wires(W) {
             if (W.curve) {
               if (W.arc.layer == LAYER_TPLACE || W.arc.layer == LAYER_BPLACE) {
                    x1 = u2u(W.arc.xc)-rx; y1 = u2u(W.arc.yc)-ry;
                    rot(E.angle, x1, y1); // new coord x,y
                    printf("A %g,%g,%g,%.1f,%.1f\n",
                           x, y, u2u(W.arc.radius),u2ang(W.arc.angle1 - E.angle),u2ang(W.arc.angle2 - W.arc.angle1));
               }
             }
             else {
               if (W.layer == LAYER_TPLACE || W.layer == LAYER_BPLACE) {
                  x1 = u2u(W.x1)-rx; y1 = u2u(W.y1)-ry; x2 = u2u(W.x2)-rx; y2 = u2u(W.y2)-ry;
                  rot(E.angle, x1, y1); x1 = x; y1 = y;
                  rot(E.angle, x2, y2); x2 = x; y2 = y;
                  printf("L (%g,%g) (%g,%g)\n", x1, y1, x2, y2);
               }
             }
           }
           E.package.circles(C) {
             if (C.layer == LAYER_TPLACE || C.layer == LAYER_BPLACE) {
                x1 = u2u(C.x)-rx; y1 = u2u(C.y)-ry;
                rot(E.angle, x1, y1);
                printf("C %g,%g,%g\n", x, y, u2u(C.radius));
               }
             }
           printf ("%%ENDGRAFITEM\n");
           printf ("%%PACKAGEDIMENSION\n");
           printf ("%%PINLIST\n");
           pad_is_numeric = 1;
           E.package.contacts(C) { // test if name numeric
             padname = C.name;
             for (i = 0; padname[i]; ++i) {
                 if (!isdigit(padname[i])) {
                    pad_is_numeric = 0;
                    }
                 }
             }
           padcount = 1;
           E.package.contacts(C) {
             if (pad_is_numeric) {
                printf("%s|", C.name);                             // PADNR
                }
             else {
                printf("%d|", padcount);
                padcount++;
                }
             x1 = u2u(C.x)-rx; y1 = u2u(C.y)-ry;
             rot(E.angle, x1, y1); // get x,y
             printf("%g|%g|", x, y);                               // REL. POSITION OF PADS
             if (C.pad) {
                printf("%s|", padtype(C));                         // PADTYPE TOP
                printf("%.1f|", u2ang(E.angle));                   // PAD ORIENTATION TOP
                printf("%s|", padtype(C));                         // PADTYPE BOTTOM
                printf("%.1f", u2ang(E.angle));                    // PAD ORIENTATION BOTTOM
                }
             if (C.smd) {
                if (C.smd.layer == LAYER_TOP) {
                   printf("%s|", padtype(C));                      // PADTYPE TOP
                   printf("%.1f|", u2ang(E.angle));                // PAD ORIENTATION TOP
                   printf("|");                                    // BOTTOM empty
                   }
                else {
                   printf("||");                                   // TOP empty
                   printf("%s|", padtype(C));                      // PADTYPE BOTTOM
                   printf("%.1f", u2ang(E.angle));                 // PAD ORIENTATION BOTTOM
                   }
                }
             printf("\n");
           }
         }
      }
    }
  }
//////////////////////////////////////////////////////
void via(UL_BOARD B) {
  int i;
  printf("\n%%%%VIA\n");
  B.signals(S) {
    S.vias(V) {
      i++;
      printf("VIA%d|%s|%g|%g|1|16|%s|0|%s|0|Y|Y\n",
             i, S.name, u2u(V.x), u2u(V.y), viatype(V), viatype(V));
      }
    }
  }
//////////////////////////////////////////////////////
void track(UL_BOARD B) {
  printf("\n%%%%TRACK\n");
  B.signals(S) {
    printf("NET=%s\n", S.name);
    printf("%%GRAFITEM\n");
    S.wires(W) {
      printf("N %d\n", W.layer);
      printf("W %g\n", u2u(W.width));
      printf("FC 0,0,0,0\n");
      printf("L (%g,%g) (%g,%g)\n", u2u(W.x1), u2u(W.y1), u2u(W.x2), u2u(W.y2));
      }
    S.polygons(POL) {
      POL.contours(W) {
        printf("N %d\n", W.layer);
        printf("W %g\n", u2u(W.width));
        printf("FC 0,0,0,0\n");
        printf("L (%g,%g) (%g,%g)\n", u2u(W.x1), u2u(W.y1), u2u(W.x2), u2u(W.y2));
        }
      POL.fillings(W) {
        printf("N %d\n", W.layer);
        printf("W %g\n", u2u(W.width));
        printf("FC 0,0,0,0\n");
        printf("L (%g,%g) (%g,%g)\n", u2u(W.x1), u2u(W.y1), u2u(W.x2), u2u(W.y2));
        }
      }

    printf("%%ENDGRAFITEM\n");
    }
  }
//////////////////////////////////////////////////////
void create_pcboard_section(UL_BOARD B) {
//  printf ("\n%%%%%%PCBOARDIdentifier\n");
  outline(B);
//panelstructure();
  fiducials(B);
  component(B);
  other_drillings(B);
  component_pin(B);
//subcomponent();
//testpad();
  pad(B);
  shape(B);
  via(B);
  track(B);
//summary();
  }
//////////////////////////////////////////////////////

//main
// *** Board coord. ***
if (board) board(B) {
   reffile = filesetext(B.name, ".ref");
   output(reffile, "wt") {
     Header(B.name);
     printf("%sCOMPONENT\n", proz);

     // *** collect all pads ***
   B.elements(E) {
     if (E.package.library != _MARKER_) {
       E.package.contacts(C) {
         if (C.pad) {
            padx[PadPoints] = C.pad.x;
            pady[PadPoints] = C.pad.y;
            padd[PadPoints] = E.name;
            padn[PadPoints] = C.name;
            padnn[PadPoints] = "*nc*";      // *** default not connected ***
            PadPoints++;
            }
         }
       }
     }

     B.signals(S) {
         // *** if pad connected to net ***
       S.contactrefs(C) {
         for (int pad = 0; pad < PadPoints; pad++) {
             if (padx[pad] == C.contact.x && pady[pad] == C.contact.y) {
                padnn[pad] = S.name;       // *** connectad to net-name ***
                                           // default *nc* = not connected
                break;
                }
             }
         }
       }

     // **** Sheet coord. ****
     if (project.schematic) {
        sheetload = 1;
        project.schematic(S) {

       // *** collect all Pins ***
       S.sheets(SH) {
         SH.parts(PA) {                           // *** IC1   ***

           int gate = 0;
           PA.device.gates(G) {
             gate++;
             }
           int dir = 5;                           // Dirction PWR
           int Pinn = 0;                          // Pin counter for Gate
           PA.instances(IN) {                     // *** IC1A  ***
             IN.gate.symbol.pins(P) {

               if (P.contact) {
                  if (P.direction != 5) {         // only PWR-Pins in Gate ?
                     dir = P.direction;
                     }
                  pc[PinPoints] = P.contact.name;        // PAD name von Connect/Pad
                  px[PinPoints] = P.x;
                  py[PinPoints] = P.y;
                  ps[PinPoints] = IN.sheet;              // SHEET#
                  pa[PinPoints] = PA.name;               // PART name
                  pg[PinPoints] = IN.name;               // Part+GATE name
                  pn[PinPoints] = P.name;                // PIN name
                  PinPoints++;
                  Pinn ++;
                  }
               else {
                  gate = 0;        // Reset Gate counter - Supply Symbol has no Gates
                  // pc[PinPoints] = " no pac.";             // kein Pad-Name nur Symbol!!
                  }
               }
             }
           if (PinPoints > 0) {
             switch (gate) {
               case 2 : if (dir == 5) {
                           // Gate-Name wird angezeigt
                           break;
                           }
                         if (dir != 5) {
                           pg[PinPoints -1] = pa[PinPoints - 1];  // Gatename wird nicht angezeigt
                           break;
                           }
               case 1 :  for (int gp = 0; gp < Pinn; gp++) {
                            pg[PinPoints - gp -1] = "";               // clear all Pin-Gate-name
                            }

               case 0 :  // printf("no Gates (Supply?) =%d\n", gate);

               }
             }
           }
         }
       }

     // *** print all Pad ccord.
     for (int pad = 0; pad < PadPoints; pad++) {
        for (int p = 0; p < PinPoints; p++) {
          if (padd[pad] == pa[p] && padn[pad] == pc[p]) {
             pads[pad] = ps[p];                        // copy Sheet# to Pad
             pnn[p] = padnn[pad];                      // Signal name to Pin
             }
          }
        printf("%s|%s|%s|sheet%d|", padd[pad], padn[pad], padnn[pad], pads[pad]);
        printf("%.3f,%.3f|mm|\n", u2mm(padx[pad]), u2mm(pady[pad]));
        }

     // ***  %PINS ***
     printf("%sPINS\n", proz);

     // *** print all Pin sheet/coord. ***
     for (int pin = 0; pin < PinPoints; pin++) {
        printf("%s|%s|%s|%s|%s|sheet%d|%.2f,%.2f|mm|\n",
        pa[pin], pg[pin], pnn[pin], pc[pin], pn[pin], ps[pin], u2mm(px[pin]), u2mm(py[pin]));
        }
     }
   else {
     dlgMessageBox("Please load Schematic first! No data generated!", "OK");
     exit (-1);
     }
   }
 }

 if (board) board(B) {
    jobname = filename(B.name);
    jobname = strsub(jobname, 0, strlen(jobname) - 4);
    unifile = filesetext(B.name, ".uni");
    output(unifile, "wt") {
       create_info();
       create_pcboard_section(B);
       }
    test();
    exit (0);
    }

 else {
  dlgMessageBox("<qt>Start <b>" + ULPversion + "</b> from a <b>Board</b></qt>", "OK");
  exit (-2);
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -