Może ktoś kiedyś używał biblioteki ChartDirector.
Mam problem. Chcę zrobić aplikację okienkową w GTK+. Na razie testuję możliwości tej biblioteki.

Napisałem sobie prosty programik, który tworzy wykres, rysuje sinus(x), zapisuje na dysk, tworzy drugą linię dla cosinus(x), zapisuje na dysk. Jednak w obydwu plikach narysowany jest tylko sinus(x). Oczywiście, gdy tworzenie obydwu linii wrzucę przed zapisywanie, ładnie się obydwie linie narysują.
Czy trzeba za każdym razem tworzyć nowy obiekt wykresu?

kod:

#include "chartdir.h"
#include <cstring>
#include <iostream>
#include <cmath>


void createSinusData(double *data) ;
void createCosinusData(double *data) ;

int main(int argc, char *argv[])
{
    double sindata[37] ;
	createSinusData(sindata) ;
    double cosdata[37] ;
	createCosinusData(cosdata) ;
   
	const char *labels[37] =
	{
		"-540°", "-510°", "-480°", "-450°", "-420°", "-390°", 
		"-360°", "-330°", "-300°", "-270°", "-240°", "-210°", 
		"-180°", "-150°", "-120°", "-90°",  "-60°",  "-30°",
		"0°",
		"30°",   "60°",   "90°",   "120°",  "150°",  "180°",
		"210°",  "240°",  "270°",  "300°",  "330°",  "360°",
		"390°",  "420°",  "450°",  "480°",  "510°",  "540°",
	};

    XYChart *c = new XYChart(750, 300);
    c->setBackground(0xEEEEEE) ;

    c->setPlotArea(30, 70, 700, 200,
		0xFFFFFF, 0xF8F8F8, -1, 0xC0C0C0, 0xC0c0c0);

	//first layer: sin(x)
    LineLayer *layer0 = c->addLineLayer(
		DoubleArray(sindata, (int)(sizeof(sindata) / sizeof(sindata[0]))),
		0xFF8000,
		"sinus(x)"
		);
    layer0->setLineWidth(3) ;

    c->xAxis()->setLabels(StringArray(labels, (int)(sizeof(labels) / sizeof(labels[0]
        ))));
    c->xAxis()->setWidth(2) ;
    c->yAxis()->setWidth(2) ;

    c->xAxis()->setLabelStep(3);
    
    TextBox *title = c->addTitle("Trigonometric Functions", "ariali.ttf", 15);
    
    LegendBox *legendBox = c->addLegend(c->getWidth() / 2, title->getHeight(), false,
        "arialbi.ttf", 10);
    legendBox->setBackground(0xFFFFFF, 0x000000);
    legendBox->setAlignment(Chart::TopCenter);
    legendBox->setLineStyleKey();
    
	//output
    c->enableVectorOutput() ;
    const char fileNameSVG1[] = "simplepie1.svg" ;
    const char fileNameSVG2[] = "simplepie2.svg" ;
    c->makeChart(fileNameSVG1);
    
    
    // second layer  
	LineLayer *layer1 = c->addLineLayer(                                  
		DoubleArray(cosdata, (int)(sizeof(cosdata) / sizeof(cosdata[0]))), 
		0x00FF00,                                                        
		"cosinus(x)"                                                    
		);                                                                 
    layer1->setLineWidth(3) ;                                        
                                                                        
    c->makeChart(fileNameSVG2); 
    
    delete c;    
    
    return 0;
}





void createSinusData(double *data) 
{
	for(int i=-18; i<=18; ++i)
	{
		int degrees = i*30 ;
		double radians = degrees*M_PI/180.0 ;
		double sinus = sin(radians) ;
		data[i+18]=sinus ;
	}
}

void createCosinusData(double *data) 
{
	for(int i=-18; i<=18; ++i)
	{
		int degrees = i*30 ;
		double radians = degrees*M_PI/180.0 ;
		double cosinus = cos(radians) ;
		data[i+18]=cosinus ;
	}
}

http://www.chartdir.com/forum/download_thread.php?site=chartdir&bn=chartdir_support&thread=1319878081&new_thread=1

jest:
plik1//rafalrutkowski.netai.net/sinus.svg
plik2//rafalrutkowski.netai.net/sinus.svg

powinno być:
plik1//rafalrutkowski.netai.net/sinus.svg
plik2//rafalrutkowski.netai.net/cosinus.svg

z góry dzięki za wszelkie rady