コード例 #1
0
void MainWindow::colorMapMouseMove(QMouseEvent *event)
{
	if (QCPColorMap *map = qobject_cast<QCPColorMap*>(mCustomPlot->plottable(0)))
	{
		double keyCoord = map->keyAxis()->pixelToCoord(map->keyAxis()->orientation()==Qt::Horizontal ? event->pos().x() : event->pos().y());
		double valueCoord = map->valueAxis()->pixelToCoord(map->valueAxis()->orientation()==Qt::Horizontal ? event->pos().x() : event->pos().y());
		int ik, iv;
		map->data()->coordToCell(keyCoord, valueCoord, &ik, &iv);
		map->data()->fill(0);
		map->data()->setCell(ik, iv, 1);
		map->rescaleDataRange(true);

		double ck, cv;
		map->data()->cellToCoord(ik, iv, &ck, &cv);
		if (mCustomPlot->itemCount() == 0)
		{
			QCPItemTracer *t = new QCPItemTracer(mCustomPlot);
			mCustomPlot->addItem(t);
			t->position->setType(QCPItemPosition::ptPlotCoords);
			t->position->setCoords(ck, cv);
			t->position->setAxes(map->keyAxis(), map->valueAxis());
			t->setClipToAxisRect(false);
			t->setStyle(QCPItemTracer::tsCircle);
			t->setPen(QPen(Qt::red));
		} else if (QCPItemTracer *t = qobject_cast<QCPItemTracer*>(mCustomPlot->item(0)))
			t->position->setCoords(ck, cv);

		mCustomPlot->replot();
	}
}
コード例 #2
0
ファイル: mainwindow.cpp プロジェクト: pabigot/qcustomplot
void MainWindow::genItemTracer()
{
  resetPlot();
  customPlot->addGraph();
  QVector<double> x(50), y(50);
  for (int i=0; i<50; ++i)
  {
    x[i] = -0.4+1.8*i/49.0;
    y[i] = qSin(x[i]*M_PI*0.9)*0.4+0.4;
  }
  customPlot->graph()->setData(x, y);
  customPlot->graph()->setPen(QPen(Qt::red));
  QCPItemTracer *tracer = new QCPItemTracer(customPlot);
  customPlot->addItem(tracer);
  tracer->setStyle(QCPItemTracer::tsCrosshair);
  tracer->setGraph(customPlot->graph());
  tracer->setGraphKey(0.8);
  labelItemAnchors(tracer, 8, true, false);
  customPlot->savePng(dir.filePath("QCPItemTracer.png"), 230, 160);
}
コード例 #3
0
ファイル: plot.cpp プロジェクト: iocenter/ResOpt
//-----------------------------------------------------------------------------------------------
// reruns the selected case
//-----------------------------------------------------------------------------------------------
void Plot::rerunSelectedCase()
{
    if(!p_mainwindow->isRunning() && m_custom_plot.selectedItems().size() == 1)
    {
        // finding the case corresponding to the selected tracer
        QCPItemTracer *tracer = dynamic_cast<QCPItemTracer*>(m_custom_plot.selectedItems().at(0));

        if(tracer != 0)
        {
            int case_no = tracer->graphKey() - 1;

            // checknig that the case_no is within vector bounds
            if(case_no < m_cases.size() && case_no >= 0)
            {
                p_mainwindow->runCase(m_cases.at(case_no));
                p_btn_rerun->setDisabled(true);

            }

        }
    }
}
コード例 #4
0
ファイル: plot.cpp プロジェクト: iocenter/ResOpt
//-----------------------------------------------------------------------------------------------
// Plots the case
//-----------------------------------------------------------------------------------------------
void Plot::addToPlot(Case *c, bool replot)
{
    m_plotted_cases.push_back(c);


    // finding what to plot
    double value;

    double max_real_var = c->numberOfRealVariables();
    double max_int_var = max_real_var + c->numberOfIntegerVariables();
    double max_bin_var = max_int_var + c->numberOfBinaryVariables();

    int index = p_series->itemData(p_series->currentIndex()).toInt();

    if(index == 0) value = c->objectiveValue(); // objective
    else if(index <= max_real_var)      // real variable
    {
        value = c->realVariableValue(index-1);
    }
    else if(index <= max_int_var)       // int variable
    {
        value = c->integerVariableValue(index - max_real_var -1);
    }
    else if(index <= max_bin_var)       // bin variable
    {
        value = c->binaryVariableValue(index - max_int_var -1);
    }

    else        // constraint
    {
        value = c->constraintValue(index - max_bin_var -1);
    }



    // adding to plot

    m_custom_plot.graph(0)->addData(m_plotted_cases.size(), value);

    // adding point to graph 1 if infeasible
    if(!p_mainwindow->runner()->isFeasible(c)) m_custom_plot.graph(1)->addData(m_plotted_cases.size(), value);

    // x axis range
    if(m_cases.size() >= 5) m_custom_plot.xAxis->setRange(m_plotted_cases.size() - p_sld_xaxis->value(), m_plotted_cases.size() + 1);

    // y axis range
    if(m_plotted_cases.size() == 1)
    {
        m_min = value*0.9;
        m_max = value*1.1;
    }
    else
    {
        if(value < m_min) m_min = value;
        if(value > m_max) m_max = value;
    }

    double padding = (m_max - m_min)*0.1;

    m_custom_plot.yAxis->setRange(m_min - padding, m_max + padding);


    // adding tracer
    QCPItemTracer *tracer = new QCPItemTracer(&m_custom_plot);
    tracer->setGraph(m_custom_plot.graph(0));
    tracer->setGraphKey(m_plotted_cases.size());
    tracer->setStyle(QCPItemTracer::tsPlus);
    tracer->setSize(20);
    QPen pen(Qt::blue);
    pen.setWidth(0);
    pen.setStyle(Qt::NoPen);
    tracer->setPen(pen);

    QPen pen_sel(Qt::green);
    pen_sel.setWidth(1);
    tracer->setSelectedPen(pen_sel);
    tracer->setSelectable(true);

    m_custom_plot.addItem(tracer);

    // updating the slider max
    p_sld_xaxis->setMaximum(m_plotted_cases.size());
    if(!m_user_changed_slider) p_sld_xaxis->setValue(m_plotted_cases.size());
    else
    {
        if(m_plotted_cases.size() > 5) m_custom_plot.xAxis->setRange(m_plotted_cases.size() - p_sld_xaxis->value(), m_plotted_cases.size() + 1);

        // checking if the x-axis tick step must change
        if(p_sld_xaxis->value() > 10)
        {
            int tick = p_sld_xaxis->value() / 10;
            m_custom_plot.xAxis->setTickStep(tick);
        }


        if(replot) m_custom_plot.replot();
    }



   // m_custom_plot.replot();

}
コード例 #5
0
void MainWindow::setupItemTracerTest(QCustomPlot *customPlot)
{
	QCPItemTracer *tracer1 = new QCPItemTracer(customPlot);
	customPlot->addItem(tracer1);
	tracer1->position->setCoords(1, 3);
	tracer1->setStyle(QCPItemTracer::tsCircle);
	tracer1->setSize(20);

	QCPItemTracer *tracer2 = new QCPItemTracer(customPlot);
	customPlot->addItem(tracer2);
	tracer2->position->setCoords(2, 2.5);
	tracer2->setStyle(QCPItemTracer::tsCrosshair);

	QCPItemTracer *tracer3 = new QCPItemTracer(customPlot);
	customPlot->addItem(tracer3);
	tracer3->position->setCoords(3, 2);
	tracer3->setStyle(QCPItemTracer::tsPlus);
	tracer3->setSize(20);

	QCPItemTracer *tracer4 = new QCPItemTracer(customPlot);
	customPlot->addItem(tracer4);
	tracer4->position->setCoords(4, 1.5);
	tracer4->setStyle(QCPItemTracer::tsSquare);
	tracer4->setSize(20);

	QCPGraph *graph = customPlot->addGraph();
	int n = 20;
	QVector<double> x(n), y(n);
	for (int i=0; i<n; ++i)
	{
		x[i] = 0.5+i/(double)n*4;
		y[i] = qSin(x[i])+1.5;
	}
	graph->setData(x, y);

	QCPItemTracer *graphTracer = new QCPItemTracer(customPlot);
	customPlot->addItem(graphTracer);
	graphTracer->setGraph(graph);
	graphTracer->setGraphKey(2.3);
	graphTracer->setStyle(QCPItemTracer::tsNone);
	graphTracer->setInterpolating(true);
	tracerTestTracer = graphTracer;
	connect(customPlot, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(tracerTestMouseMove(QMouseEvent*)));
	graphTracer->setStyle(QCPItemTracer::tsSquare);

	QCPItemText *text = new QCPItemText(customPlot);
	customPlot->addItem(text);
	text->setText("Tracer");
	text->setPositionAlignment(Qt::AlignBottom|Qt::AlignHCenter);
	text->position->setType(QCPItemPosition::ptAxisRectRatio);
	text->position->setCoords(0.5, 0.05);
	text->setPen(QPen());

	QCPItemCurve *curve = new QCPItemCurve(customPlot);
	customPlot->addItem(curve);
	curve->start->setParentAnchor(text->bottom);
	curve->startDir->setParentAnchor(curve->start);
	curve->startDir->setCoords(0, 100);
	curve->end->setParentAnchor(tracerTestTracer->position);
	curve->end->setCoords(0, -5);
	curve->endDir->setParentAnchor(curve->end);
	curve->endDir->setCoords(0, -100);
	curve->setHead(QCPLineEnding::esSpikeArrow);
}