File: mountsmd.ulp

package info (click to toggle)
eagle 4.16-5
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 36,508 kB
  • sloc: sh: 82; makefile: 32
file content (92 lines) | stat: -rw-r--r-- 2,410 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#usage "<b>Data generation for mounting machines</b>\n"
       "<p>"
       "Generates files for smds on the top and bottom layers "
       "wich can be used with mounting machines. "
       "The x and y coordinates (units: mm) of the SMD elements are calculated "
       "as mean of maximum and mimimum value of the smds origin points. "
       "The calculated value does not necessarily fit with the origin "
       "point of the part in the layout."
       "<p>"
       "The syntax of the output data looks like this:"
       "<p>"
       "<tt>name x-coord y-coord rotation value package</tt>"
       "<p>"
       "<author>Author: support@cadsoft.de</author>"

// THIS PROGRAM IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED

if (board) board(B) {

  // Get filename
  string fileName = dlgFileSave("Save File", filesetext(B.name, ".mnt"), "*.mnt");
  if (fileName == "") exit(0);

  output(fileName) {

   B.elements(E) {

     int wasSmd,
         xmax =-2147483648,
         xmin = 2147483647,
         ymax = xmax,
         ymin = xmin;

      wasSmd = 0;

        E.package.contacts(C) {
          if (C.smd && C.smd.layer == 1) {
           wasSmd = 1;

            if (C.x > xmax) xmax = C.x;
            if (C.y > ymax) ymax = C.y;
            if (C.x < xmin) xmin = C.x;
            if (C.y < ymin) ymin = C.y;
          }
         }

       if (wasSmd)
         printf("%s %5.2f %5.2f %3.0f %s %s\n",
         E.name, u2mm((xmin + xmax)/2), u2mm((ymin + ymax)/2),
         E.angle, E.value, E.package.name);
   }
 }

  // Get filename
  fileName = dlgFileSave("Save File", filesetext(B.name, ".mnb"), "*.mnb");
  if (fileName == "") exit(0);

  output(fileName) {

   B.elements(E) {

     int wasSmd,
         xmax =-2147483648,
         xmin = 2147483647,
         ymax = xmax,
         ymin = xmin;

      wasSmd = 0;

        E.package.contacts(C) {
          if (C.smd && C.smd.layer == 16) {
           wasSmd = 1;

            if (C.x > xmax) xmax = C.x;
            if (C.y > ymax) ymax = C.y;
            if (C.x < xmin) xmin = C.x;
            if (C.y < ymin) ymin = C.y;
          }
         }

       if (wasSmd)
         printf("%s %5.2f %5.2f %3.0f %s %s\n",
         E.name, u2mm((xmin + xmax)/2), u2mm((ymin + ymax)/2),
         E.angle, E.value, E.package.name);
   }
 }
}

else {
   dlgMessageBox("\n    Start this ULP in a Board    \n");
   exit (0);
}