Ändern Sie Breiten- und Längengrad im Graph Builder dynamisch mit dem ComboBox-Pulldown-MenüHinweis: Daten und Skript unten hochgeladen …
Ich habe das folgende Skript entwickelt, das zunächst einen weiten Bereich darstellt und eine zurückgelegte Route anzeigt. Ein modales Fenster öffnet sich, in dem der Benutzer einen Code für einen bestimmten Ort eingeben kann – in diesem Beispiel eine 1 oder 2. Mit dieser Information zoomt das Diagramm auf diesen Ort. Das funktioniert zwar gut, ist aber nicht ganz das, was ich brauche. Vor allem verschwindet das Dialogfeld, sobald die Auswahl getroffen und das Skript beendet ist. Zweitens habe ich versucht, dies mit einem ComboBox-Pulldown-Menü zum Laufen zu bringen. Das Menü selbst funktioniert zwar, aber aus irgendeinem Grund gelingt mir die Auswahl, eine Änderung im Diagramm vorzunehmen, nicht.
Folgendes habe ich mit dem modalen Textfeld ...
Names Default To Here( 1 );
dt = Data Table( "Test Data" );
gb = Graph Builder(
Graph Spacing( 10 ),
Spacing Borders( 1 ),
Variables( X( :Longitude ), Y( :Latitude ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "Longitude", ScaleBox, {Min( -104 ), Max( -98.47 )} ),
Dispatch( {}, "Latitude", ScaleBox, {Min( 29.21 ), Max( 33.30 )} ),
Dispatch( {}, "Graph Builder", FrameBox,
{Background Map( Images( "Street Map Service", "Mapbox Satellite", "" ) )}
)
)
);
// Build the modal input window
New Window( "Pick a spot",
Modal,
H List Box(
V List Box( Text Box( "Location Number:" ), ),
V List Box( box = Number Edit Box( "Enter location number..." ), )
),
Button Box( "OK",
// Script to run when "OK" is clicked
locNum = box << Get;
Print( "Location Number: " || Char( locNum ) );
),
Button Box( "Cancel",
// Script to run when "Cancel" is clicked
Throw()
)
);
If(
locNum == 1,
minLat = 30.99;
maxLat = 31.06;
minLong = -101.21;
maxLong = -101.11;
run = "1|1";,
locNum == 2,
minLat = 31.34;
maxLat = 31.41;
minLong = -101.81;
maxLong = -101.71;
run = "2|1";
);
gb << Dispatch( {}, "Longitude", ScaleBox, {Min( minLong ), Max( maxLong )} );
gb << Dispatch( {}, "Latitude", ScaleBox, {Min( minLat ), Max( maxLat )} );
Die ursprüngliche Karte sieht so aus ...

Und die vergrößerte Ansicht sieht so aus ...

Meine Dilemmas sind also 1) wie bekomme ich die ComboBox dazu, damit zu arbeiten, und 2) wie kann ich verhindern, dass das Skript abgeschlossen wird, damit der Benutzer weiterhin verschiedene Elemente aus dem Pulldown-Menü auswählen kann.
Ich habe das Gefühl, dass dies etwas mit dem Befehl „Funktion festlegen“ zu tun hat, aber meine zahlreichen Versuche, dies zum Laufen zu bringen, waren erfolglos.
Für jede diesbezügliche Anleitung wäre ich sehr dankbar.
Danke.
Automatisierung und SkriptingBetreff: Breiten- und Längengrad im Graph Builder dynamisch mit dem ComboBox-Pulldown-Menü ändernIch würde für so etwas kein modales Fenster verwenden
Names Default To Here(1);
dt = Data Table("Test Data");
gb = dt << Graph Builder(
Graph Spacing(10),
Spacing Borders(1),
Variables(X(:Longitude), Y(:Latitude)),
Elements(Points(X, Y, Legend(3))),
SendToReport(
Dispatch({}, "Longitude", ScaleBox, {Min(-104), Max(-98.47)}),
Dispatch({}, "Latitude", ScaleBox, {Min(29.21), Max(33.30)}),
Dispatch({}, "Graph Builder", FrameBox,
{Background Map(Images("Street Map Service", "Mapbox Satellite", ""))}
)
)
);
wait(0);
cb_expr = Expr(
locNum = cb_option << get;
show(locNum);
If(
locNum == 1,
minLat = 30.99;
maxLat = 31.06;
minLong = -101.21;
maxLong = -101.11;
run = "1|1";,
locNum == 2,
minLat = 31.34;
maxLat = 31.41;
minLong = -101.81;
maxLong = -101.71;
run = "2|1";
);
gb << Dispatch({}, "Longitude", ScaleBox, {Min(minLong), Max(maxLong)});
gb << Dispatch({}, "Latitude", ScaleBox, {Min(minLat), Max(maxLat)});
);
// Build the modal input window
nw = New Window("Pick a spot",
Lineup Box(N Col(2),
Text Box("Location Number:"),
cb_option = Combo Box({"1", "2"},
cb_expr
),
),
Button Box("OK",
cb_expr; // not necessary if you wish to run when combo box is changed
Print("Location Number: " || Char(locNum));
),
Button Box("Cancel",
// Script to run when "Cancel" is clicked
Throw()
)
);
Sie können Ihre Optionen auch in ein assoziatives Array verschieben, um später das Hinzufügen weiterer Optionen zu erleichtern.
Betreff: Breiten- und Längengrad im Graph Builder dynamisch mit dem ComboBox-Pulldown-Menü ändernDanke, @jthi . Das ist perfekt.
Die Idee besteht also darin, die ComboBox-Aktionen in einen Eval()-Block einzuschließen und den Block dann als Skript auszuführen, wenn ComboBox ausgeführt wird. Ich glaube, ich interpretiere das richtig.
Betreff: Breiten- und Längengrad im Graph Builder dynamisch mit dem ComboBox-Pulldown-Menü ändernSie können den Ausdruck innerhalb der Combobox verschieben, ABER es ist im Allgemeinen viel einfacher zu ändern, wenn Sie ihn trennen, insbesondere wenn Sie dieselbe Aktion an mehreren Stellen verwenden
Mehr anzeigen...
Names Default To Here(1);
dt = Data Table("Test Data");
gb = dt << Graph Builder(
Graph Spacing(10),
Spacing Borders(1),
Variables(X(:Longitude), Y(:Latitude)),
Elements(Points(X, Y, Legend(3))),
SendToReport(
Dispatch({}, "Longitude", ScaleBox, {Min(-104), Max(-98.47)}),
Dispatch({}, "Latitude", ScaleBox, {Min(29.21), Max(33.30)}),
Dispatch({}, "Graph Builder", FrameBox,
{Background Map(Images("Street Map Service", "Mapbox Satellite", ""))}
)
)
);
wait(0);
// Build the modal input window
nw = New Window("Pick a spot",
Lineup Box(N Col(2),
Text Box("Location Number:"),
cb_option = Combo Box({"1", "2"},
locNum = cb_option << get;
show(locNum);
If(
locNum == 1,
minLat = 30.99;
maxLat = 31.06;
minLong = -101.21;
maxLong = -101.11;
run = "1|1";,
locNum == 2,
minLat = 31.34;
maxLat = 31.41;
minLong = -101.81;
maxLong = -101.71;
run = "2|1";
);
gb << Dispatch({}, "Longitude", ScaleBox, {Min(minLong), Max(maxLong)});
gb << Dispatch({}, "Latitude", ScaleBox, {Min(minLat), Max(maxLat)});
),
),
Button Box("OK",
locNum = cb_option << get;
show(locNum);
If(
locNum == 1,
minLat = 30.99;
maxLat = 31.06;
minLong = -101.21;
maxLong = -101.11;
run = "1|1";,
locNum == 2,
minLat = 31.34;
maxLat = 31.41;
minLong = -101.81;
maxLong = -101.71;
run = "2|1";
);
gb << Dispatch({}, "Longitude", ScaleBox, {Min(minLong), Max(maxLong)});
gb << Dispatch({}, "Latitude", ScaleBox, {Min(minLat), Max(maxLat)});
Print("Location Number: " || Char(locNum));
),
Button Box("Cancel",
// Script to run when "Cancel" is clicked
Throw()
)
);
Sie können auch << Set Function anstelle von < verwenden. Argument, das Sie verwenden können, Kombinationsfeld )
Names Default To Here(1);
aa_options = Associative Array();
aa_options[1] = [
"minLat" => 30.99,
"maxLat" => 31.06,
"minLong" => -101.21,
"maxLong" => -101.11,
"run" => "1|1"
];
aa_options[2] = [
"minLat" => 31.34,
"maxLat" => 31.41,
"minLong" => -101.81,
"maxLong" => -101.71,
"run" => "2|1"
];
update_graph = Function({cb_ref, idx}, {Default Local},
s = aa_options[idx];
show(s);
gb << Dispatch({}, "Longitude", ScaleBox, {Min(s["minLong"]), Max(s["maxLong"])});
gb << Dispatch({}, "Latitude", ScaleBox, {Min(s["minLat"]), Max(s["maxLat"])});
);
dt = Data Table("Test Data");
gb = dt << Graph Builder(
Graph Spacing(10),
Spacing Borders(1),
Variables(X(:Longitude), Y(:Latitude)),
Elements(Points(X, Y, Legend(3))),
SendToReport(
Dispatch({}, "Longitude", ScaleBox, {Min(-104), Max(-98.47)}),
Dispatch({}, "Latitude", ScaleBox, {Min(29.21), Max(33.30)}),
Dispatch({}, "Graph Builder", FrameBox,
{Background Map(Images("Street Map Service", "Mapbox Satellite", ""))}
)
)
);
wait(0);
options = Transform Each({item}, aa_options << get keys, Char(item)); // combo box requires strings
nw = New Window("Pick a spot",
Lineup Box(N Col(2),
Text Box("Location Number:"),
cb_option = Combo Box(options,
<< Set Function(Function({this, idx},
update_graph(this, idx);
))
)
),
Button Box("Cancel",
<< Set Function(function({this},
this << close window;
))
)
);