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

📄 eagle4-1.ulp

📁 use this script, you can make ealge file to protel file
💻 ULP
📖 第 1 页 / 共 3 页
字号:
  }
}

void LoopBoardWire2TargetText(UL_BOARD B)
{
  B.wires(W) {
    BoardElementWire2TargetText(W, 0, 0);
  }
}

void LoopBoardSignal2TargetText(UL_BOARD B)
{
  int SignalNr=1;
  B.signals(S) {
    // Signal
    BoardSignal2TargetText(S, SignalNr);
    // Linie
    S.wires(W) {
      BoardElementWire2TargetText(W, 0, SignalNr);
    }
    S.polygons(P) {
      P.wires(W) {
        BoardElementWire2TargetText(W, 0, SignalNr);
      }
    }
    // Punkt (Durchkontaktierung)
    S.vias(V) {
      BoardVia2TargetText(V, SignalNr);
    }
    // neue SignalNr vergeben
    SignalNr++;
  }
}

void LoopBoardRectangle2TargetText(UL_BOARD B)
{
  B.rectangles(R) {
    BoardElementRectangle2TargetText(R, 0, 0);
  }
} 

void LoopBoardText2TargetText(UL_BOARD B)
{
  B.texts(T) {
    //BoardText2TargetText(T, TextFunktion(T.layer), 0);
    BoardText2TargetText(T, 0, 0);
  }
}

void LoopBoardCircle2TargetText(UL_BOARD B)
{
  B.circles(C) {
    BoardCircle2TargetText(C, 0);
  }
}

void LoopBoardHole2TargetText(UL_BOARD B)
{
  B.holes(H) {
    BoardHole2TargetText(H, 0);
  }
}

void LoopBoard2TargetText(UL_BOARD B)
{
  LoopBoardLayer2TargetText(B);
  LoopBoardSignal2TargetText(B);
  LoopBoardElement2TargetText(B);
  LoopBoardRectangle2TargetText(B);
  LoopBoardPolygon2TargetText(B);
  LoopBoardWire2TargetText(B); /*also arcs*/
  LoopBoardText2TargetText(B);
  LoopBoardCircle2TargetText(B);
  LoopBoardHole2TargetText(B);
}

//Schematic-Objekte in TargetText umsetzen____________________________________

void SchematicSheetNet2TargetText(UL_NET N, 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",N.name);
  printf("\t%s","");
  printf("\t%s","");
  printf("\t%s","");
  printf("\n");
}

void SchematicSheetRectangle2TargetText(UL_SHEET S, UL_RECTANGLE R, int BauteilNr, int SymbolNr)
{
  real x0,y0;

  printf("Rechteck");
  printf("\t%d", S.number + 100);
  printf("\t%d",BauteilNr);
  printf("\t%d",0);
  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",SymbolNr);
  printf("\n");
} 

void SchematicSheetArc2TargetText(UL_SHEET S, UL_ARC A, int SignalNr, int BauteilNr, int SymbolNr)
{
  printf("Torus");
  printf("\t%d", S.number + 100); 
  printf("\t%d",BauteilNr);
  printf("\t%d",SignalNr);
  printf("\t%d",0);
  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",SymbolNr);
  printf("\n");
}

void SchematicSheetWire2TargetText(UL_SHEET S, UL_WIRE W, int SignalNr, int BauteilNr, int SymbolNr)
{
  int LinienBreite;

  if (W.arc)
    SchematicSheetArc2TargetText(S, W.arc, SignalNr, BauteilNr, SymbolNr);
  else {
    if (SignalNr != 0 && SignalNr != 65502) {
      LinienBreite = 300;
    }
    else if (SignalNr == 65502) {
      LinienBreite = 1000; //BUS
    }
    else
      LinienBreite=int(u2mic(W.width));
    printf("Linie");
    printf("\t%d", S.number + 100);
    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", LinienBreite);
    printf("\t%d", 0);
    printf("\t%d", 0);
    printf("\t%d", 1);
    printf("\t%d\n", SymbolNr);
  }
}

void SchematicSheetCircle2TargetText(UL_SHEET S, UL_CIRCLE C, int BauteilNr, int SymbolNr)
{
  printf("Torus");
  printf("\t%d", S.number + 100); 
  printf("\t%d",BauteilNr);
  printf("\t%d",0);
  printf("\t%d",0);
  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",SymbolNr);
  printf("\n");
}

void SchematicSheetText2TargetText(UL_SHEET S, UL_TEXT T, int BauteilNr, int SymbolNr, real SymbolWinkel, int AnschlussNr)
{
  printf("Text");
  printf("\t%d", S.number + 100); 
  printf("\t%d", BauteilNr);
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",int(u2mic(GetLeftX(T, SymbolWinkel))));
  printf("\t%d",int(u2mic(GetLeftY(T, SymbolWinkel))));
  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",0); //	Gespiegelt nicht moeglich in Schaltplan
  printf("\t%d",TextFunktion(T.layer));
  printf("\t%d",AnschlussNr); //	AnschlussNummer , Word
  printf("\t%s","TARGET"); //	SchriftArtName, "" = Vektorschrift , string[80]
  printf("\t%f", SymbolWinkel); //	T.angle, Richtung, single
  printf("\t%d",SymbolNr); //	SymbolNr, Word
  printf("\n");
} 

void SchematicBus2TargetText(UL_SHEET S, UL_BUS B)
{
  printf("Signal");
  printf("\t%d",0);
  printf("\t%d",0);
  printf("\t%d",65502); //Es gibt nur einen BUS in Target!
  printf("\t%d",0); // unsichtbar
  printf("\t%d",0); // # x
  printf("\t%d",0); // # y
  printf("\t%s","$$BUS");
  printf("\t%s","");
  printf("\t%s","");
  printf("\t%s","");
  printf("\n");
  B.segments(seg) {
    seg.wires(W) {
      SchematicSheetWire2TargetText(S, W, 65502, 0, 0);
    }
  }
}

void SchematicInstance2TargetText(UL_SHEET S, UL_INSTANCE I, int BauteilNr, int SymbolNr)
{
  int SignalNr;

  //Symbol
  printf("Symbol");
  printf("\t%d", S.number + 100);
  printf("\t%d", BauteilNr);
  printf("\t%d", 0);
  printf("\t%d", 0);
  printf("\t%d", int(u2mic(I.x)));
  printf("\t%d", int(u2mic(I.y)));
  printf("\t%s", I.name);
  printf("\t%s", GetSuffix(I.name));
  printf("\t%d", SymbolNr);
  printf("\t%d", EinfuegeModus(I.gate.addlevel));
  printf("\t%d", I.gate.swaplevel);
  printf("\n");
  //SymbolLinien; Arcs are also wires!
  if (I.gate) I.gate.symbol.wires(W) {
    SchematicSheetWire2TargetText(S, W, 0, BauteilNr, SymbolNr);
  }
  //SymbolToruse
  if (I.gate) I.gate.symbol.circles(C) {
    SchematicSheetCircle2TargetText(S, C, BauteilNr, SymbolNr);
  }
  //SymbolTexte
  I.texts(T) {
    SchematicSheetText2TargetText(S, T, BauteilNr, SymbolNr, GetTextWinkel(T.angle) /* GetTextWinkel(I.angle) */, 0);
  }
  if (I.gate) I.gate.symbol.texts(T) {
    SchematicSheetText2TargetText(S, T, BauteilNr, SymbolNr, GetTextWinkel(T.angle) /* GetTextWinkel(I.angle) */, 0);
  }
  //SymbolRectangles
  if (I.gate) I.gate.symbol.rectangles(R) {
    SchematicSheetRectangle2TargetText(S, R, BauteilNr, SymbolNr);
  }
  //SymbolPolygone
  if (I.gate) I.gate.symbol.polygons(P) {
    P.wires(W) {
      SchematicSheetWire2TargetText(S, W, 0, BauteilNr, SymbolNr);
    }
  }
  //Anschluss
  int PinNummer;
  int DefaultPinNr=1;
  if (I.gate) I.gate.symbol.pins(PIN) {
    PinNummer=GetPinNr(PIN);
    //Widerstaende, Dioden, ... haben normalerweise keine Pins.
    //Die AnschlussNummern werden fuer Target daher einfach hochgezaehlt.
    if (PinNummer == 0) {
      PinNummer = DefaultPinNr;
      DefaultPinNr++;
    }
    //SignalNr bestimmen
    SignalNr=0;
    S.nets(N) {
      N.segments(SEG) {
        SEG.pinrefs(PINREF) {
          if (PINREF.instance.name == I.name  && PINREF.pin.name == PIN.name) {
            SignalNr=GetSignalNr(N.name);
          }
        }
      }
    }
    //Anschluss
    printf("Anschluss");
    printf("\t%d", S.number + 100);
    printf("\t%d", BauteilNr);
    printf("\t%d", SignalNr);
    printf("\t%d",0 /* PIN.visible */);
    printf("\t%d",int(u2mic(PIN.x)));
    printf("\t%d",int(u2mic(PIN.y)));
    printf("\t%d",AnschlussLaenge(PIN.length));
    printf("\t%d",AnschlussFunktion(PIN.direction));
    printf("\t%d",PIN.swaplevel);
    printf("\t%d",InverterPunkt(PIN.function));
    printf("\t%d",Taktpfeil(PIN.function));
    printf("\t%d",1); //PinNummer anzeigen
    printf("\t%d",0);
    printf("\t%d",PinNummer);
    printf("\t%f",PIN.angle);
    printf("\t%d",SymbolNr);
    printf("\n");
    //AnschlussNamen
    PIN.texts(T) {
      if (PIN.name == T.value && !IstZahl(T.value)) {
        SchematicSheetText2TargetText(S, T, BauteilNr, SymbolNr, GetTextWinkel(I.angle), PinNummer);
      }
    }
  }
}

void SchematicPart2TargetText(UL_SHEET S, UL_PART P, int BauteilNr, int REFNr)
{
  //Bauteil (bei nur Schaltplan)
  if (!project.board) {
    printf("Bauteil");
    printf("\t%d",S.number + 100);
    printf("\t%d",BauteilNr);
    printf("\t%d",0);
    printf("\t%d",0);
    printf("\t%d",int(u2mic(P.device.area.x1)));
    printf("\t%d",int(u2mic(P.device.area.y1)));
    printf("\t%s","#");
    printf("\t%s",P.value);
    printf("\t%s",GetPraefix(P.name)); // Praefix
    printf("\t%s",P.name);
    printf("\t%s","#");
    printf("\t%s","#");
    printf("\t%s","#");
    printf("\t%s",GetOrdnungsNr(P.name));
    printf("\t%d",50);
    printf("\n");
  }
  //Bauteil (Bauteil in Schaltplan aber nicht in Platine,z.B. Referenzsymbole)
  if (project.board && !BauteilInPlatine(P.name)) {
    printf("Bauteil");
    printf("\t%d",S.number + 100);
    printf("\t%d",BauteilNr);
    printf("\t%d",0);
    printf("\t%d",0);
    printf("\t%d",int(u2mic(P.device.area.x1)));
    printf("\t%d",int(u2mic(P.device.area.y1)));
    printf("\t%s","#");
    printf("\t%s",GetPraefix(P.name));//Value
    printf("\t%s","REF"); // Praefix
    printf("\t%s",P.name);
    printf("\t%s","#");
    printf("\t%s","#");
    printf("\t%s","#");
    printf("\t%d",REFNr);
    printf("\t%d",50);
    printf("\n");
  }
  //Symbol
  int SymbolNr=1;
  P.instances(I) {
    SchematicInstance2TargetText(S, I, BauteilNr, SymbolNr);
    SymbolNr++;
  }  
}

void SchematicJunction2TargetText(UL_SHEET S, UL_NET N, UL_JUNCTION j) 
{
  printf("Scheibe");
  printf("\t%d", S.number + 100); 
  printf("\t%d",0);
  printf("\t%d",GetSignalNr(N.name));
  printf("\t%d",0);
  printf("\t%d",int(u2mic(j.x)));
  printf("\t%d",int(u2mic(j.y)));
  printf("\t%d",int(u2mic(j.diameter)/2));
  printf("\t%d",0);
  printf("\n");
}

//SchematicLoops______________________________________________________________

void LoopSchematicSheet2TargetText(UL_SCHEMATIC Sch, UL_SHEET S)
{
  // Rechtecke
  S.rectangles(R) {
    SchematicSheetRectangle2TargetText(S, R, 0, 0);
   }
  // Linien
  S.wires(W) {
    SchematicSheetWire2TargetText(S, W, 0, 0, 0);
  }
  S.polygons(P) {
    P.wires(W) {
      SchematicSheetWire2TargetText(S, W, 0, 0, 0);
    }
  }
  S.texts(T) {
    SchematicSheetText2TargetText(S, T, 0, 0, T.angle, 0);
  }
  //Verbindungen und Knoten
  S.nets(N) {
    N.segments(Seg) {
      //Verbindungen(Linie)
      Seg.wires(W) {
        SchematicSheetWire2TargetText(S, W, GetSignalNr(N.name), 0, 0);
      }
      //Knoten(Scheibe)
      Seg.junctions(j) {
        SchematicJunction2TargetText(S, N, j);
      }
    }
  }
  //Busse
  S.busses(B) {
    SchematicBus2TargetText(S, B);
  }
  //Bauteile(Referenzsymbole) und Symbole
  int REFNr=1;
  int BauteilNr;
  S.parts(P) {
    BauteilNr=GetBauteilNr(P.name);
    SchematicPart2TargetText(S, P, BauteilNr, REFNr);
    REFNr++;
  } 
}

void LoopSchematic2TargetText(UL_SCHEMATIC Sch)
{
  //Signale(bei nur Schaltplan)
  if (!project.board) {
    int SignalNr=1;
    Sch.nets(N) {
      SchematicSheetNet2TargetText(N, SignalNr);
      SignalNr++;
    }
  }
  Sch.sheets(S) {
    LoopSchematicSheet2TargetText(Sch, S);
  }
}

//HauptProgramm (Main)________________________________________________________

//DateiName.sch / DateiName.brd ----> DateiName.txt 
//DateiName der Textdatei soll dem DateiNamen des Eaglefiles entsprechen.

string TextDateiName = "";

if (board)
  board(B) TextDateiName = B.name;
else if (schematic)
  schematic(S) TextDateiName = S.name;

//TextDatei erstellen

if (TextDateiName) {
  output(filesetext(TextDateiName, ".TXT")) {
    //EagleVorlage , globale Variablen setzen
    SetEagleVorlage();
    //Kommentar ---> TargetText
    TargetText_Kommentar("Mit TARGET.ULP V1.0 konvertierte EAGLE-Datei");
    //BEGIN ---> TargetText
    TargetText_BEGIN();
    //Project ---> TargetText
    //Board ---> TargetText (Platine)
    if (board || schematic && project.board && BoardUndSchematic ) {
      project.board(B) {
        LoopBoard2TargetText(B);
      }
    }
    //Schematic ---> TargetText (Schaltplan)
    if (schematic || board && project.schematic && BoardUndSchematic ) {
      project.schematic(Sch) {
        LoopSchematic2TargetText(Sch);
      }
    }
    //END ---> TargetText
    TargetText_END();
  }
}

⌨️ 快捷键说明

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