📄 eagle4-1.ulp
字号:
}
}
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 + -