g_graph

Erzeugen und Schließen

g_create

g_create erzeugt eine UniPlot-Metadatei mit Vektor-Grafiken im Speicher.

Die Grafik wird bei g_close in einem Zeichenobjekt oder Datensatz gespeichert (hObject) und zusammen mit diesem ausgegeben.

ctx = g_create(hObject)
def _g_helper_new_text_doc(ssTitle, _rangeX, _rangeY)
{
   if (nargsin() == 1) {
      rangeX = [0,3,1]; rangeY = [0,3,1];
   } else {
      rangeX = _rangeX; rangeY = _rangeY;
   }
   hDoc = DocCreate();
   hPage = PageCreate();
   hLayer = LayerCreate();
   LayerSetAxisMinMaxDelta(hLayer, "x", rangeX);
   LayerSetAxisMinMaxDelta(hLayer, "y", rangeY);
   LayerSetAxisTitle(hLayer, "x", "");
   LayerSetAxisTitle(hLayer, "y", "");
   PageAddLayer(hPage, hLayer)
   DocAddPage(hDoc, hPage);
   PageSetTitle(hPage, ssTitle+";0.6");
   hText = TBCreate()
   rv = OBJGetPosSize(hLayer)
   OBJSetPosSize(hText, [rv[1], rv[2], 1, 1])
   TBSetText(hText, "");
   LayerAddObjects(hLayer, hText);
   return hText;
}

def test_g_create()
{
   hText = _g_helper_new_text_doc("g_graph_1");

   ctx = g_create(hText);
   g_set_transformation(ctx, "WC");

   g_set_line_width(ctx, 50);
   g_set_source_rgb(ctx, [127, 0,255,0])

   g_move_to(ctx, 0.5, 0.5);
   g_line_to(ctx, 2.5, 2.5);

   g_close(ctx);
}
../../_images/g_graph_1.png

g_close

g_close beendet die Erzeugung der UniPlot-Metadatei und kopiert die Bits in das bei g_create angegebenen Zeichenobjekts oder Datensatzes.

r = g_close(ctx)

g_set_transformation

g_set_transformation setzt die Transformation für die verwendeten Koordinaten in Weltkoordinaten oder Zentimeter-Koordinaten (ssType gleich „WC“ oder CM“).

r = g_set_transformation(ctx, ssType)

Linien und Fächen

g_move_to

g_move_to setzt den Zeichenstift an die angegebene Position.

r = g_move_to(ctx, x, y)

g_line_to

g_line_to fügt dem Pfad eine Linie von der aktuellen Position zum Punkt (x, y) zu.

r = g_line_to(ctx, x, y)

g_polyline

g_polyline fügt dem Pfad Linien hinzu.

r = g_polyline(ctx, rvX, rvY)
def test_g_polyline()
{
    hText = _g_helper_new_text_doc("g_polyline", [0,2*PI, 2*PI/10], [-1,1,0.5]);

    ctx = g_create(hText);
    g_set_transformation(ctx, "WC");

    n = 1000;
    x = linspace(0, 2*PI, n);
    y = sin(x);

    g_set_line_width(ctx, 2);
    g_set_source_rgb(ctx, [255, 0,0,0]);
    g_polyline(ctx, x, y);
    g_stroke_preserve(ctx)

    p = g_pattern_create_linear(0, -1.1, 0, 1.1);
    g_pattern_add_color_stop_rgb(p, 0, [200, 0,0,0]);
    g_pattern_add_color_stop_rgb(p, 1, [255, 255,255,255]);
    g_set_source(ctx, p);
    g_fill(ctx);

    g_close(ctx);
}
../../_images/g_polyline.png

g_ellipse

g_ellipse gibt einen Ellipsenbogen aus.

r = g_ellipse(ctx, rsX1, rsY1, rsX2, rsY2, rsXS, rsYS, rsXE, rsYE)
rect: rsX1, rsY1, rsX2, rsY2
start point: rsXS, rsYS
end point: rsXE, rsYE

g_arc

g_arc gibt einen Kreisbogen aus.

r = g_arc(ctx, rsX, rsY, rsWidth, rsHeight, rsStartAngle, rsSweepAngle)
def test_g_arc()
{
   hText = _g_helper_new_text_doc("g_4", [0,200,50], [0,200,50]);

   ctx = g_create(hText);
   g_set_transformation(ctx, "WC");

   xc = 128.0;
   yc = 128.0;
   radius = 100.0;
   angle1 = 180.0;
   angle2 = 135.0;

   g_set_line_cap(ctx, PS_ENDCAP_FLAT)
   g_set_line_join(ctx, PS_JOIN_MITER)
   g_set_line_width (ctx, 50.0);
   g_new_path(ctx)
   g_arc(ctx, xc-radius, yc-radius, 2*radius, 2*radius, angle1, angle2);
   g_stroke (ctx);

   /* draw helping lines */
   g_set_source_rgb (ctx, [0.6*255, 1.0*255, 0.2*255, 0.2*255]);
   g_set_line_width (ctx, 16.0);
   g_set_line_cap(ctx, PS_ENDCAP_FLAT)
   g_new_path(ctx)
   g_arc(ctx, xc-10/2, yc-10/2, 10.0, 10, 0, 360); // 2*M_PI);
   g_fill (ctx);

   g_arc(ctx, xc-radius, yc-radius, 2*radius, 2*radius, angle1, 0.01);
   g_line_to (ctx, xc, yc);
   g_stroke (ctx);

   g_arc(ctx, xc-radius, yc-radius, 2*radius, 2*radius, angle1+angle2, 0.011);
   g_line_to (ctx, xc, yc);
   g_stroke (ctx);

   g_close(ctx);
}
../../_images/g_arc.png

Pfade

g_new_path

g_new_path löscht den aktuellen Pfad und erzeugt einen neuen Pfad. Dies Funktion wird auch automatisch nach g_fill und g_stroke aufgerufen.

r = g_new_path(ctx)

g_close_path

g_close_path schließt den Pfad, d. h. fügt dem Pfad eine Linie vom aktuellen Punkt zum Anfangspunkt zu.

r = g_close_path(ctx)

g_stroke

g_stroke zieht eine Linie entlang des Pfades. Anschließend wird g_new_path aufgerufen.

r = g_stroke(ctx)

Siehe auch g_stroke_preserve, g_new_path, g_close_path

g_stroke_preserve

g_stroke_preserve zieht eine Linie entlang des Pfades. Der Pfad bleibt erhalten.

r = g_stroke_preserve(ctx)

Siehe auch g_stroke, g_new_path, g_close_path

g_fill

g_fill füllt den Pfad. Anschließend wird g_new_path aufgerufen.

r = g_fill(ctx)

Siehe auch g_fill_preserve, g_stroke, g_new_path, g_close_path

g_fill_preserve

g_fill_preserve füllt den Pfad. Der Pfad bleibt erhalten.

r = g_fill_preserve(ctx)

Siehe auch g_fill, g_stroke, g_new_path, g_close_path

Linien und Farben

g_set_source_rgb

g_set_source_rgb setzt die Farbe und Transparenz für Linienausgaben oder Flächen.

r = g_set_source_rgb(ctx, rvColor)

rvColor ist ein Vektor mit 3 [R, G, B] oder 4 [A, R, G, B] Zahlenwerten im Bereich 0 bis 255. [A, R, G, B]: A ist der Alpha-Wert, 0, vollständig transparent, 255 ist Opaque, RGB: Rot-, Grün-, Blau-Anteil.

g_pattern_create_linear

g_pattern_create_linear erzeugt einen linearen Farbverlauf entlang der Linie (x0,y0) nach (x1,y1).

Vor der Verwendung sollten dem Farbverlauf einige Farbstufen mit g_pattern_add_color_stop_rgb zugefügt werden.

pattern = g_pattern_create_linear(x0, y0, x1, y1)

g_pattern_add_color_stop_rgb

g_pattern_add_color_stop_rgb fügt dem Farbverlauf Farbstufen zu. offset ist zwischen 0.0 und 1.0. Siehe Beispiel.

r = g_pattern_add_color_stop_rgb(pattern, offset, rvARGB)
def test_g_polyline_color()
{
    hText = _g_helper_new_text_doc("g_polyline_color", [0,2*PI, 2*PI/10], [-1,1,0.5]);

    ctx = g_create(hText);
    g_set_transformation(ctx, "WC");

    n = 1000;
    x = linspace(0, 2*PI, n);
    y = sin(x);

    g_set_line_width(ctx, 20);
    g_polyline(ctx, x, y);

    p = g_pattern_create_linear(0, -1.1, 0, 1.1);
    g_pattern_add_color_stop_rgb(p, 1, [200, 255,0,0]);
    g_pattern_add_color_stop_rgb(p, 0.5, [200, 0,255,255]);
    g_pattern_add_color_stop_rgb(p, 0, [255, 0,0,255]);
    g_set_source(ctx, p);
    g_stroke(ctx);

    g_close(ctx);
}
../../_images/g_polyline_color.png

g_pattern_destroy

g_pattern_destroy löscht den Farbverlauf.

r = g_pattern_destroy(pattern)

g_set_source

g_set_source setzt den mit g_pattern_create_linear erzeugten Farbverlauf für die Ausgabe.

r = g_set_source(ctx, pattern)
def test_g_pattern()
{
    hText = _g_helper_new_text_doc("g_pattern");

    ctx = g_create(hText);
    g_set_transformation(ctx, "WC");

    p = g_pattern_create_linear(0.5, 2, 2, 0.5);
    g_pattern_add_color_stop_rgb(p, 0, [200, 0,0,0]);
    g_pattern_add_color_stop_rgb(p, 1, [255, 255,255,255]);

    g_new_path(ctx);
    g_polyline(ctx, [0.5,2.5,1.5], [0.5, 1.5, 2.5]);
    g_close_path(ctx);

    g_set_line_width(ctx, 20);
    g_set_source_rgb(ctx, [0, 0,255,0])
    g_stroke_preserve(ctx);

    g_set_source(ctx, p);
    g_fill(ctx);

    g_close(ctx);
}
../../_images/g_pattern.png

g_set_line_width

g_set_line_width setzt die Dicke von Linien in 0.1mm-Schritten.

r = g_set_line_width(ctx, width)

g_set_line_style

g_set_line_style setzt den Linienstil.

r = g_set_line_style(ctx, style)
PS_SOLID           0
PS_DASH            1
PS_DOT             2
PS_DASHDOT         3
PS_DASHDOTDOT      4
PS_NULL            5

g_set_line_cap

g_set_line_cap legt fest wie die Endpunkte eines Pfades ausgegeben werden.

r = g_set_line_cap(ctx, linecap)
PS_ENDCAP_ROUND     0x00000000
PS_ENDCAP_SQUARE    0x00000100
PS_ENDCAP_FLAT      0x00000200

g_set_line_join

g_set_line_join legt fest wie die Enden von zwei Linien zusammengefügt werden.

r = g_set_line_join(ctx, linejoin)
PS_JOIN_ROUND       0x00000000
PS_JOIN_BEVEL       0x00001000
PS_JOIN_MITER       0x00002000

Marker

g_set_marker

g_set_marker legt das Aussehen von Markern fest.

oMarker = [. "edge-color" = "black", "edge-width" = 1, "fill-color" = "red",
             size = 0.2, style = "circle"];
r = g_set_marker(ctx, oMarker)

g_marker

g_marker gibt Marker an den Positionen rvX[i], rvY[i] aus.

r = g_marker(ctx, rvX, rvY)

Texte

g_text

g_text gibt einen Text aus.

r = g_text(ctx, ssText, rvRect, nAttrib)
G_TEXT_CLIP       1
G_TEXT_WORDWRAP   2
G_TEXT_SHRINK     4

g_set_font_handle

g_set_font_handle setzt den Font.

r = g_set_font_handle(ctx, hfont)

g_set_font

g_set_font setzt den Font.

oFont = [. "face-name" = "Arial", size = 12, weight = 400, "pitch-and-family" = 49,
        underline = 0, italic = 0, "strike-out" = 0, angle = 0, color = "black"];
r = g_set_font(ctx, oFont)

History

Version Beschreibung
R2017 Neu.

id-1761312