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

📄 eagle4-1.ulp

📁 use this script, you can make ealge file to protel file
💻 ULP
📖 第 1 页 / 共 3 页
字号:
      }
    }
  }
  if (!gefunden && project.schematic) project.schematic(sch) {
    sch.sheets(S) {
      S.parts(P) {
        P.instances(I) {
          if (I.name == SymbolName) {
            AnschlussNr=0;
            I.gate.symbol.pins(pi) {
              if (!gefunden) AnschlussNr++;
              if (pi.name == AnschlussName && !gefunden) gefunden=TRUE;
            }
          }
        }
      }
    }
  }
  if (gefunden) return AnschlussNr;
  else return 0;
}
*/

//EagleVorlage________________________________________________________________

void SetEagleVorlage(void)
{
  // NurPlatine
  if (project.schematic) NurPlatine=FALSE;
  else NurPlatine=TRUE;
  // TargetEbeneFarben
  TargetEbeneFarbe[0]=TARGET_DROT;
  TargetEbeneFarbe[1]=TARGET_SCHWARZ;
  TargetEbeneFarbe[2]=TARGET_DROT;
  TargetEbeneFarbe[3]=TARGET_BRAUN;
  TargetEbeneFarbe[4]=TARGET_DGRUEN;
  TargetEbeneFarbe[5]=TARGET_HGRAU;
  TargetEbeneFarbe[6]=TARGET_DMAGENTA;
  TargetEbeneFarbe[7]=TARGET_DCYAN;
  TargetEbeneFarbe[8]=TARGET_DGRUEN;
  TargetEbeneFarbe[9]=TARGET_SCHWARZ;
  TargetEbeneFarbe[10]=TARGET_DGRUEN;
  TargetEbeneFarbe[11]=TARGET_BRAUN;
  TargetEbeneFarbe[12]=TARGET_SCHWARZ;
  TargetEbeneFarbe[13]=TARGET_BRAUN;
  TargetEbeneFarbe[14]=TARGET_DBLAU;
  TargetEbeneFarbe[15]=TARGET_SCHWARZ;
  TargetEbeneFarbe[16]=TARGET_DBLAU;
  TargetEbeneFarbe[17]=TARGET_BRAUN;
  TargetEbeneFarbe[18]=TARGET_DGRUEN;
  TargetEbeneFarbe[19]=TARGET_HGRAU;
  TargetEbeneFarbe[20]=TARGET_DMAGENTA;
  TargetEbeneFarbe[21]=TARGET_SCHWARZ;
  TargetEbeneFarbe[22]=TARGET_DGRAU;
  TargetEbeneFarbe[23]=TARGET_HROT;
  TargetEbeneFarbe[24]=TARGET_BRAUN;
  TargetEbeneFarbe[25]=TARGET_BRAUN;
  TargetEbeneFarbe[26]=TARGET_SCHWARZ;
  TargetEbeneFarbe[27]=TARGET_DGRUEN;
  // TargetEbeneBezug
  TargetEbeneBezug[0]=2;
  TargetEbeneBezug[1]=2;
  TargetEbeneBezug[2]=2;
  TargetEbeneBezug[3]=2;
  TargetEbeneBezug[4]=2;
  TargetEbeneBezug[5]=2;
  TargetEbeneBezug[6]=2;
  TargetEbeneBezug[7]=2;
  TargetEbeneBezug[8]=10;
  TargetEbeneBezug[9]=10;
  TargetEbeneBezug[10]=10;
  TargetEbeneBezug[11]=13;
  TargetEbeneBezug[12]=13;
  TargetEbeneBezug[13]=13;
  TargetEbeneBezug[14]=16;
  TargetEbeneBezug[15]=16;
  TargetEbeneBezug[16]=16;
  TargetEbeneBezug[17]=16;
  TargetEbeneBezug[18]=16;
  TargetEbeneBezug[19]=16;
  TargetEbeneBezug[20]=16;
  TargetEbeneBezug[21]=16;
  TargetEbeneBezug[22]=255;
  TargetEbeneBezug[23]=255;
  TargetEbeneBezug[24]=255;
  TargetEbeneBezug[25]=255;
  TargetEbeneBezug[26]=255;
  TargetEbeneBezug[27]=255;
  // TargetEbeneFunktion
  TargetEbeneFunktion[0]=TARGET_EF_FLAECHEUNTEN;
  TargetEbeneFunktion[1]=TARGET_EF_LOESCHUNTEN;
  TargetEbeneFunktion[2]=TARGET_EF_KUPFERUNTEN;
  TargetEbeneFunktion[3]=TARGET_EF_GOLDUNTEN;
  TargetEbeneFunktion[4]=TARGET_EF_LOETSTOPUNTEN;
  TargetEbeneFunktion[5]=TARGET_EF_LOETPASTEUNTEN;
  TargetEbeneFunktion[6]=TARGET_EF_KLEBERUNTEN;
  TargetEbeneFunktion[7]=TARGET_EF_BESTUECKUNGUNTEN;
  TargetEbeneFunktion[8]=TARGET_EF_FLAECHEINNEN;
  TargetEbeneFunktion[9]=TARGET_EF_LOESCHINNEN;
  TargetEbeneFunktion[10]=TARGET_EF_KUPFERINNEN;
  TargetEbeneFunktion[11]=TARGET_EF_FLAECHEINNEN;
  TargetEbeneFunktion[12]=TARGET_EF_LOESCHINNEN;
  TargetEbeneFunktion[13]=TARGET_EF_KUPFERINNEN;
  TargetEbeneFunktion[14]=TARGET_EF_FLAECHEOBEN;
  TargetEbeneFunktion[15]=TARGET_EF_LOESCHOBEN;
  TargetEbeneFunktion[16]=TARGET_EF_KUPFEROBEN;
  TargetEbeneFunktion[17]=TARGET_EF_GOLDOBEN;
  TargetEbeneFunktion[18]=TARGET_EF_LOETSTOPOBEN;
  TargetEbeneFunktion[19]=TARGET_EF_LOETPASTEOBEN;
  TargetEbeneFunktion[20]=TARGET_EF_KLEBEROBEN;
  TargetEbeneFunktion[21]=TARGET_EF_BESTUECKUNGOBEN;
  TargetEbeneFunktion[22]=TARGET_EF_BEMASSUNG;
  TargetEbeneFunktion[23]=TARGET_EF_UMRISS;
  TargetEbeneFunktion[24]=TARGET_EF_BOHRLOECHER;
  TargetEbeneFunktion[25]=TARGET_EF_FRAESEN;
  TargetEbeneFunktion[26]=TARGET_EF_LOETPUNKTNUMMERN;
  TargetEbeneFunktion[27]=TARGET_EF_LUFTLINIE;
}

//TargetText: BEGIN, END, (Kommentar)_________________________________________

void TargetText_BEGIN(void)
{
  if (NurPlatine) printf("BEGIN\t%d\n", 1);
  else printf("BEGIN\t%d\n", 0);
  printf("Ebene");
  printf("\t%d", 24); // BohrlochEbene
  printf("\t%d", TEFunktion(24));
  printf("\t%d", TEBezug(24));
  printf("\t%d", TEFarbe(24));
  printf("\t%d\n", 1);
}

void TargetText_END(void)
{
  printf("END\n");
}

void TargetText_Kommentar(string s)
{
  printf("{%s}\n", s);
}

//BoardObjekte in TargetText umsetzen_________________________________________

void BoardArc2TargetText(UL_ARC A, int BauteilNr, int SignalNr)
{
  printf("Torus");
  printf("\t%d", EL2TL(A.layer)); 
  printf("\t%d",BauteilNr);
  printf("\t%d",SignalNr);
  printf("\t%d",0);//ist sichtbar
  printf("\t%d",int(u2mic(A.xc)));
  printf("\t%d",int(u2mic(A.yc)));
  printf("\t%d",int(u2mic(A.radius)));
  printf("\t%d",int(u2mic(A.width)));
  printf("\t%d",0);
  printf("\t%f",A.angle1);
  printf("\t%f",A.angle2);
  printf("\t%d",0);
  printf("\n");
}

void BoardCircle2TargetText(UL_CIRCLE C, int BauteilNr)
{
  printf("Torus");
  printf("\t%d", EL2TL(C.layer)); 
  printf("\t%d",BauteilNr);
  printf("\t%d",0);
  printf("\t%d",0);//ist sichtbar
  printf("\t%d",int(u2mic(C.x)));
  printf("\t%d",int(u2mic(C.y)));
  printf("\t%d",int(u2mic(C.radius)));
  printf("\t%d",int(u2mic(C.width)));
  printf("\t%d",0);
  printf("\t%f",0.0);
  printf("\t%f",360.0);
  printf("\t%d",0);
  printf("\n");
}

void BoardHole2TargetText(UL_HOLE H, int BauteilNr)
{
  printf("Punkt");
  printf("\t%d", 100); 
  printf("\t%d",BauteilNr);
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",int(u2mic(H.x)));
  printf("\t%d",int(u2mic(H.y)));
  printf("\t%d",PunktForm(PAD_SHAPE_ROUND));
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",int(u2mic(H.drill)));
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\n");
}

void BoardElementWire2TargetText(UL_WIRE W, int BauteilNr, int SignalNr)
{
  if (W.arc)
    BoardArc2TargetText(W.arc, BauteilNr, SignalNr);
  else {
    printf("Linie");
    printf("\t%d", EL2TL(W.layer));
    printf("\t%d", BauteilNr);
    printf("\t%d", SignalNr);
    printf("\t%d", 0);
    printf("\t%d", int(u2mic(W.x1)));
    printf("\t%d", int(u2mic(W.y1)));
    printf("\t%d", int(u2mic(W.x2)));
    printf("\t%d", int(u2mic(W.y2)));
    printf("\t%d", int(u2mic(W.width)));
    printf("\t%d", 0);
    printf("\t%d", 0);
    printf("\t%d", 1);//abgerundet
    printf("\t%d\n", 0);
  }
}

void BoardElementRectangle2TargetText(UL_RECTANGLE R, int BauteilNr, int SignalNr)
{
  real x0,y0;

  printf("Rechteck");
  printf("\t%d", EL2TL(R.layer));
  printf("\t%d",BauteilNr);
  printf("\t%d",SignalNr);
  printf("\t%d",0);
  //rotate
  x0=(R.x2+R.x1)/2;
  y0=(R.y2+R.y1)/2;
  rotate(x0,y0,R.x1,R.y1,R.angle);
  printf("\t%d",int(u2mic(rx)));
  printf("\t%d",int(u2mic(ry)));
  //rotate end
  printf("\t%d",int(u2mic(R.x2-R.x1)));
  printf("\t%d",int(u2mic(R.y2-R.y1)));
  printf("\t%f",R.angle);
  printf("\t%d",0);
  printf("\n");
}

void BoardElementContact2TargetText(UL_CONTACT C, int BauteilNr, int SignalNr, int AnschlussNr)
{
  int MyLayer;
  int MyDiameterLayer;

  // Punkt
  printf("Punkt");
  if (C.pad) 
    MyLayer=100;
  else
    MyLayer=EL2TL(C.smd.layer); 
  printf("\t%d", MyLayer);
  printf("\t%d",BauteilNr);
  printf("\t%d",SignalNr);
  printf("\t%d",0);
  printf("\t%d",int(u2mic(C.x)));
  printf("\t%d",int(u2mic(C.y)));
  if (C.pad) {
    printf("\t%d",PunktForm(C.pad.shape[LAYER_PADS]));
    if (C.pad.diameter[LAYER_PADS]==auto)
      MyDiameterLayer=LAYER_BOTTOM;
    else
      MyDiameterLayer=LAYER_PADS;
    /*
     The pad shapes ANNULUS, THERMAL and OFFSET are not exactly converted!!!
     
     For LONG and OFFSET:
      elongation=e/d*100
      d = hoehe
      e = breite-d
    */
    switch (C.pad.shape[LAYER_PADS]) {
      case PAD_SHAPE_SQUARE:
      case PAD_SHAPE_ROUND:
      case PAD_SHAPE_OCTAGON:
      case PAD_SHAPE_THERMAL:
      case PAD_SHAPE_OFFSET:
        printf("\t%d",int(u2mic(C.pad.diameter[MyDiameterLayer])));
        printf("\t%d",int(u2mic(C.pad.diameter[MyDiameterLayer])));
        break;
      case PAD_SHAPE_LONG:
        printf("\t%d",int(u2mic(C.pad.diameter[MyDiameterLayer])*(100+u2mic(C.pad.elongation))/100));
        printf("\t%d",int(u2mic(C.pad.diameter[MyDiameterLayer])));
        break;
      case PAD_SHAPE_ANNULUS:
        printf("\t%d",int(u2mic(C.pad.drill))*1.01);
        printf("\t%d",int(u2mic(C.pad.drill))*1.01);
        break;
    }
  }
  else {
    printf("\t%d",PunktForm(PAD_SHAPE_SQUARE));
    printf("\t%d",int(u2mic(C.smd.dx)));
    printf("\t%d",int(u2mic(C.smd.dy)));
  }
  printf("\t%d",0);
  if (C.pad) printf("\t%d",int(u2mic(C.pad.drill)));
  else printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",AnschlussNr);
  if (C.pad) printf("\t%f",C.pad.angle);
  else printf("\t%f",C.smd.angle);
  printf("\t%d",0);
  printf("\n");
}

void BoardText2TargetText(UL_TEXT T, int BauteilNr, int AnschlussNr)
{
  printf("Text");
  printf("\t%d", EL2TL(T.layer)); 
  printf("\t%d", BauteilNr);
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",int(u2mic(T.x)));
  printf("\t%d",int(u2mic(T.y)));
  printf("\t%s",T.value); //	Inhalt
  printf("\t%d",int(u2mic(T.size))); //	Hoehe
  printf("\t%d",int(u2mic(T.size)*0.7)); //	Breite
  printf("\t%d",8); //	Staerke , % der Breite. Fett ab 11% , 0..100
  printf("\t%d",0); //	Starr/dynamisch , Boolean
  printf("\t%d",T.mirror); //	Gespiegelt
  printf("\t%d",TextFunktion(T.layer));
  printf("\t%d",AnschlussNr); //	AnschlussNummer , Word
  printf("\t%s","TARGET"); //	SchriftArtName, "" = Vektorschrift , string[80]
  printf("\t%f",T.angle); //	Richtung, single
  printf("\t%d",0); //	SymbolNr, Word
  printf("\n");
} 

void BoardElement2TargetText(UL_ELEMENT E, int BauteilNr)
{
  int Ebene;
  if (E.mirror) Ebene=EL2TL(LAYER_BPLACE);
  else Ebene=EL2TL(LAYER_TPLACE);
  //Bauteil
  printf("Bauteil");
  printf("\t%d",Ebene);
  printf("\t%d",BauteilNr);
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",int(u2mic(E.x)));
  printf("\t%d",int(u2mic(E.y)));
  printf("\t%s","#");
  printf("\t%s",E.value);
  printf("\t%s",GetPraefix(E.name)); // Praefix
  printf("\t%s",E.name);
  printf("\t%s","#");
  printf("\t%s","#");
  printf("\t%s","#");
  printf("\t%s",GetOrdnungsNr(E.name));
  printf("\t%d",50);
  printf("\n");
  //Gehaeuse
  printf("Gehaeuse");
  printf("\t%d",Ebene);
  printf("\t%d",BauteilNr);
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",int(u2mic(E.x)));
  printf("\t%d",int(u2mic(E.y)));
  printf("\t%s",E.name);
  printf("\t%s","");
  printf("\t%d",50);
  printf("\t%d",E.mirror);
  printf("\t%f",E.angle);
  printf("\n");
}

void BoardLayer2TargetText(UL_LAYER L)
{
  if (EL2TL(L.number)<100 && L.used==1) {
    printf("Ebene");
    printf("\t%d", EL2TL(L.number));
    printf("\t%d", TEFunktion(EL2TL(L.number)));
    printf("\t%d", TEBezug(EL2TL(L.number)));
    printf("\t%d", TEFarbe(EL2TL(L.number)));
    printf("\t%d\n", L.visible);
  }
}

void BoardSignal2TargetText(UL_SIGNAL S, int SignalNr)
{
  printf("Signal");
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",SignalNr);
  printf("\t%d",0); // unsichtbar
  printf("\t%d",0); // # x
  printf("\t%d",0); // # y
  printf("\t%s",S.name);
  printf("\t%s","");
  printf("\t%s","");
  printf("\t%s","");
  printf("\n");
}

void BoardVia2TargetText(UL_VIA V, int SignalNr)
{
  int MyDiameterLayer;

  printf("Punkt");
  printf("\t%d", 100); 
  printf("\t%d",0);
  printf("\t%d",SignalNr);
  printf("\t%d",0);
  printf("\t%d",int(u2mic(V.x)));
  printf("\t%d",int(u2mic(V.y)));
  printf("\t%d",PunktForm(V.shape[LAYER_VIAS]));
  if (V.diameter[LAYER_VIAS]==auto)
    MyDiameterLayer=LAYER_BOTTOM;
  else
    MyDiameterLayer=LAYER_VIAS;
  printf("\t%d",int(u2mic(V.diameter[MyDiameterLayer])));
  printf("\t%d",int(u2mic(V.diameter[MyDiameterLayer])));
  printf("\t%d",0);
  printf("\t%d",int(u2mic(V.drill)));
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\n");
}

//BoardLoops__________________________________________________________________

void LoopBoardElement2TargetText(UL_BOARD B)
{
  int BauteilNr=1;
  int AnschlussNr;
  B.elements(E) {
    AnschlussNr=1;
    // Bauteil und Gehaeuse
    BoardElement2TargetText(E, BauteilNr);
    // Linie; Arcs are also wires!
    E.package.wires(W) {
      BoardElementWire2TargetText(W, BauteilNr, 0);
    }
    E.package.polygons(P) {
      P.wires(W) {
        BoardElementWire2TargetText(W, BauteilNr, 0);
      }
    }
    // Punkt und Anschluss
    E.package.contacts(C) {
      BoardElementContact2TargetText(C, BauteilNr, GetSignalNr(C.signal), AnschlussNr);
      AnschlussNr++;
    }
    E.package.circles(C) {
      BoardCircle2TargetText(C, BauteilNr);
    }
    E.package.holes(H) {
      BoardHole2TargetText(H, BauteilNr);
    }
    // Rechteck 
    E.package.rectangles(R) {
      BoardElementRectangle2TargetText(R, BauteilNr, 0);
    }
    // Text
    E.texts(T) {
      BoardText2TargetText(T, BauteilNr, 0);
    }
    E.package.texts(T) {
      BoardText2TargetText(T, BauteilNr, 0);
    }
    // BauteilNr+1
    BauteilNr++;
  }
}

void LoopBoardLayer2TargetText(UL_BOARD B)
{
  B.layers(L) {
    BoardLayer2TargetText(L);
  }
}

void LoopBoardPolygon2TargetText(UL_BOARD B)
{
  B.polygons(P) {
    P.wires(W) {
      BoardElementWire2TargetText(W, 0, 0);
    }

⌨️ 快捷键说明

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