EAGLE Central Forums
Where the EAGLE community meets. Sponsored by Stratford Digital.

Home » CadSoft Support Forums » eagle.userchat.ger » euro.scr
euro.scr [message #155067] Tue, 22 April 2014 10:24 Go to next message
ulli[1]
Messages: 26
Registered: March 2008
Junior Member
hallo...
bin neu in dem metier...
ich hätte gern ein *.scr ähnlich dem euro.scr - diese sollte aber bei aufruf eine eingabemaske öffnen - wo man die maße des zu
erstellenden boards eintragen kann. nachdem dies geschehen - erscheint im programmfenster das gewünschte maßhaltige board.
geht das?
gruß ulli
Re: euro.scr [message #155068 is a reply to message #155067] Tue, 22 April 2014 12:16 Go to previous messageGo to next message
Lorenz
Messages: 645
Registered: December 2006
Senior Member
Ulli wrote:
>bin neu in dem metier...
>ich hätte gern ein *.scr ähnlich dem euro.scr - diese sollte aber bei aufruf eine eingabemaske öffnen - wo man die maße des zu
>erstellenden boards eintragen kann. nachdem dies geschehen - erscheint im programmfenster das gewünschte maßhaltige board.
>geht das?

Ja 8-)


Um einen Dialog / eine Eingabemaske zu realisieren brauchts ein ULP
wie das folgende (quick and dirty)


===== start of ULP
if (!board)
dlgMessageBox("to be run from board editor");

else {
int ret;
real w = 160, h = 100.0;

// define and run dialog
//
ret = dlgDialog("Input board dimension") {
dlgHBoxLayout {
dlgVBoxLayout {
dlgLabel("Width [mm]");
dlgLabel("Height [mm]");
}
dlgVBoxLayout {
dlgRealEdit(w, 0.0, 160.0);
dlgRealEdit(h, 0.0, 100.0);
}
}
dlgPushButton("Abort") dlgReject();
dlgPushButton("Create outline") dlgAccept();
};

// create and execute command string
if (ret) {
string s;

// next command formated into 3 line to avoid problems
// caused by with line wraping in the eMail client
//
sprintf(s, "layer 20; wire 0 (0 0) (0 %.2fmm)"
" (%.2fmm %.2fmm) (%.2fmm 0) (0 0);",
h, w, h, w);
exit(s);
}
}
===== end of ULP
--

Lorenz
Re: euro.scr [message #155072 is a reply to message #155068] Tue, 22 April 2014 13:20 Go to previous message
rk
Messages: 386
Registered: February 2005
Senior Member
Da ich mich nicht so gerne auf eine bestimmte Grid-Einheit festlege,
würde ich es ein ganz klein wenig anders machen. ;-)

#require 6.0000

real convert_unit(real Distance, int nUnitFrom, int nUnitTo)
{
int u;

switch(nUnitFrom)
{
case GRID_UNIT_MIC:
u = mic2u(Distance);
break;
case GRID_UNIT_MM:
u = mm2u(Distance);
break;
case GRID_UNIT_MIL:
u = mil2u(Distance);
break;
case GRID_UNIT_INCH:
u = inch2u(Distance);
break;
}

switch(nUnitTo)
{
case GRID_UNIT_MIC:
Distance = u2mic(u);
break;
case GRID_UNIT_MM:
Distance = u2mm(u);
break;
case GRID_UNIT_MIL:
Distance = u2mil(u);
break;
case GRID_UNIT_INCH:
Distance = u2inch(u);
break;
}

return Distance;
}

if(board) board(B)
{
string unit[] = { "mic", "mm", "mil", "inch" };
int curr_unit = B.grid.unit;
int prev_unit = curr_unit;
real width = convert_unit(160.0, GRID_UNIT_MM, curr_unit);
real height = convert_unit(100.0, GRID_UNIT_MM, curr_unit);

dlgDialog(filename(argv[0]))
{
dlgVBoxLayout
{
dlgGridLayout
{
dlgCell(0, 1) dlgRealEdit(width, 0, INT_MAX);
dlgCell(0, 0) dlgLabel("Width");
dlgCell(1, 1) dlgRealEdit(height, 0, INT_MAX);
dlgCell(1, 0) dlgLabel("Height");
dlgCell(2, 1) dlgComboBox(unit, curr_unit)
{
width = convert_unit(width, prev_unit, curr_unit);
height = convert_unit(height, prev_unit, curr_unit);
prev_unit = curr_unit;
}
dlgCell(2, 0) dlgLabel("Unit");
}

dlgStretch(1);

dlgHBoxLayout
{
dlgStretch(1);

dlgPushButton("+OK")
{
string cmd;
sprintf(cmd, "layer dimension; set wire_bend 0; grid
%s; wire 0 (0 0)(%f %f)(0 0); grid %s;", unit[curr_unit], width, height,
unit[B.grid.unit]);
exit(cmd);
}

dlgPushButton("-Cancel") dlgReject();
}
}
};
}
else
{
dlgMessageBox("This ULP requires a board context.");
}
Previous Topic: Bei einem Package aus einer Bibliothek nur Linien einer bestimmten Breite auswählen
Next Topic: FPC Stecker
Goto Forum:
  


Current Time: Mon Jul 24 16:43:40 GMT 2017