Hinzufügen einer Grafik zu einem Diagrammfeld mithilfe einer for-SchleifeHallo,
Ich versuche, mithilfe einer for-Schleife Grafiken (Rechtecke) zu einem Diagrammfeld hinzuzufügen. Das erwartete Ergebnis ist ein Kreuz aus 31 Rechtecken. Ich habe ein funktionierendes Skript, in dem ich den Code Zeile für Zeile geschrieben habe, ihn aber gerne kürzer und skalierbarer machen würde.
Das folgende Skript wird ausgeführt, aber nur das letzte Rechteck wird im Diagrammfeld angezeigt.
Wenn ich das Skript mit 2 Zeilen von „schreibe“ Grafikskript hinzufügen " (am Ende des Skripts auskommentiert) Anstelle der for-Schleife werden zwei Rechtecke hinzugefügt. Ich hätte erwartet, dass eine for-Schleife dasselbe tun würde. Wie kann ich das hinbekommen?
Names default to here(1);
//dt that holds the parameters for the rectangles
dt_loc = open (momo_dir || "rectangle_locations.csv" );
//create a graphic box
base_box = graph Box(
Frame Size( 400, 400 ),
XName(""), XScale(19,81), yScale(19,91), SuppressAxes, Pen Color( 1 );
);
//define the frame box in which the rectangles will e displayed
framebox = base_box[frame box( 1 )];
//ran a for loop for all 31 rectangles to be added to the Base_box
For( f = 1, f <= N Rows(dt_loc), f++,
//f=1;
//location/sizes of each box is defined here based on a csv file
rec_left = dt_loc:left[f];
rec_top = dt_loc:top[f];
rec_right = dt_loc:right[f];
rec_bottom = dt_loc:bottom[f];
//add the graphic script to the base_box for each row (aka rectangle) in the table
framebox << Add Graphics Script(Rect(rec_left, rec_top, rec_right, rec_bottom, fill = 0););
); //end f for loop
try(close(dt_loc, no save));
//Running the following 2 lines will add 2 rectangles
//framebox << Add Graphics Script(Rect(40,75,50,70, fill = 0););
//framebox << Add Graphics Script(Rect(40,70,50,65, fill = 0););
cross_rep = New window ("Cross", vlistbox(base_box));Automatisierung und SkripterstellungVersuchsplanungMassenanpassungBetreff: Hinzufügen einer Grafik zu einem Diagrammfeld mithilfe einer for-SchleifeEine weitere Frage/Kommentar.
Die Variable dt_loc wird nicht an das Diagrammfeld übergeben. Ich habe zwei Optionen gefunden, um es zum Laufen zu bringen:
- Öffnen Sie die dt_loc-Tabelle im Diagrammfeld (was funktioniert, wenn ich die Tabelle nur in diesem Teil des Skripts verwende).
- dt_loc zu einer globalen Variablen machen (::dt_loc)
Gibt es eine andere Möglichkeit, die Variable dt_loc im Diagrammfeld verfügbar zu machen?
Danke
Ole
Betreff: Hinzufügen einer Grafik zu einem Diagrammfeld mithilfe einer for-SchleifeIch stimme zu. Das zweite Drehbuch ist wirklich prägnant und auf den Punkt gebracht. Ich habe auch die for-Schleife im Diagrammfeld ausprobiert, aber es muss ein Fehler im Skript aufgetreten sein, der die Funktion verhindert hat.
Vielen Dank.
Ole
Betreff: Hinzufügen einer Grafik zu einem Diagrammfeld mithilfe einer for-SchleifePerfekt. Das hat funktioniert. Vielen Dank.
Ole
Betreff: Hinzufügen einer Grafik zu einem Diagrammfeld mithilfe einer for-SchleifeDas Grafikskript wird später ausgeführt, wenn das Diagramm aktualisiert werden muss (Zoom usw.). Sie haben in einem Fall Variablen angegeben und im anderen Fall fest codierte Zahlen. Sie können die Variablen auf verschiedene Arten in Zahlen umwandeln. Die Art und Weise, wie ich das normalerweise mache, sieht ungefähr so aus:
eval(evalexpr(
framebox << Add Graphics Script(Rect(expr(rec_left), expr(rec_top), expr(rec_right), expr(rec_bottom), fill = 0););
));
das die Variablen mit expr(...) umschließt, evalexpr(...) verwendet, um expr(...) durch den tatsächlichen Wert zu ersetzen, und eval(...) verwendet, um den von evalexpr(...) zurückgegebenen Ausdruck auszuwerten ). Wahrscheinlich werden andere Leute ihre bevorzugten Wege zeigen. Gefällt mir @txnelson 2. Antwort.
Betreff: Hinzufügen einer Grafik zu einem Diagrammfeld mithilfe einer for-SchleifeSie haben das Skript viel komplexer gemacht, als es sein müsste.Nachfolgend finden Sie zwei Überarbeitungen Ihres Skripts.Die erste besteht darin, Ihren Flow zu übernehmen und ihn einfach in ein funktionierendes Modell umzuwandeln.Die zweite besteht darin, es sehr prägnant (klein) zu gestalten, wie Sie es auch gewünscht haben.
Names Default To Here( 1 );
//dt that holds the parameters for the rectangles
dt_loc = Open( momo_dir || "rectangle_locations.csv" );
//create a graphic box
base_box = Graph Box(
Frame Size( 400, 400 ),
XName( "" ),
X Scale( 19, 81 ),
Y Scale( 19, 91 ),
SuppressAxes,
Pen Color( 1 );
//ran a for loop for all 31 rectangles to be added to the Base_box
For( f = 1, f <= N Rows( dt_loc ), f++,
// location/sizes of each box is defined here based on a csv file
rec_left = dt_loc:left[f];
rec_top = dt_loc:top[f];
rec_right = dt_loc:right[f];
rec_bottom = dt_loc:bottom[f];
// Draw the rectangle
Rect( rec_left, rec_top, rec_right, rec_bottom, fill = 0 );
);
);
Try( Close( dt_loc, no save ) );
cross_rep = New Window( "Cross", V List Box( base_box ) );
Names Default To Here( 1 );
//dt that holds the parameters for the rectangles
dt_loc = Open( momo_dir || "rectangle_locations.csv" );
cross_rep = New Window( "Cross",
//create a graphic box
base_box = Graph Box(
Frame Size( 400, 400 ),
XName( "" ),
X Scale( 19, 81 ),
Y Scale( 19, 91 ),
SuppressAxes,
Pen Color( 1 );
//ran a for loop for all 31 rectangles to be added to the Base_box
For( f = 1, f <= N Rows( dt_loc ), f++,
// location/sizes of each box is defined here based on a csv file
Rect( dt_loc:left[f], dt_loc:top[f], dt_loc:right[f], dt_loc:bottom[f] );
);
)
);
Try( Close( dt_loc, no save ) );