Spectrogram* Spectrogram::copy(Graph *g) { Spectrogram *new_s = new Spectrogram(g, matrix()); new_s->setDisplayMode(QwtPlotSpectrogram::ImageMode, testDisplayMode(QwtPlotSpectrogram::ImageMode)); new_s->setDisplayMode(QwtPlotSpectrogram::ContourMode, testDisplayMode(QwtPlotSpectrogram::ContourMode)); new_s->setCustomColorMap(color_map); new_s->setAxis(xAxis(), yAxis()); new_s->setDefaultContourPen(defaultContourPen()); new_s->color_map_policy = color_map_policy; new_s->d_show_labels = d_show_labels; new_s->d_labels_angle = d_labels_angle; new_s->d_labels_color = d_labels_color; new_s->d_white_out_labels = d_white_out_labels; new_s->d_labels_font = d_labels_font; new_s->d_labels_x_offset = d_labels_x_offset; new_s->d_labels_y_offset = d_labels_y_offset; new_s->setContourLevels(contourLevels()); if (defaultContourPen().style() == Qt::NoPen && !d_color_map_pen) new_s->setContourPenList(d_pen_list); else new_s->d_color_map_pen = d_color_map_pen; QList <PlotMarker *> lst = new_s->labelsList(); int count = lst.size(); for(int i = 0; i < count; i++){ PlotMarker *m = lst[i]; PlotMarker *mrk = d_labels_list[i]; if (m && mrk) m->setLabelOffset(mrk->xLabelOffset(), mrk->yLabelOffset()); } return new_s; }
QString Spectrogram::saveToString() { QString s = "<spectrogram>\n"; s += "\t<matrix>" + QString(d_matrix->objectName()) + "</matrix>\n"; if (color_map_policy != Custom) s += "\t<ColorPolicy>" + QString::number(color_map_policy) + "</ColorPolicy>\n"; else { s += "\t<ColorMap>\n"; s += "\t\t<Mode>" + QString::number(color_map.mode()) + "</Mode>\n"; s += "\t\t<MinColor>" + color_map.color1().name() + "</MinColor>\n"; s += "\t\t<MaxColor>" + color_map.color2().name() + "</MaxColor>\n"; QwtArray <double> colors = color_map.colorStops(); int stops = (int)colors.size(); s += "\t\t<ColorStops>" + QString::number(stops - 2) + "</ColorStops>\n"; for (int i = 1; i < stops - 1; i++) { s += "\t\t<Stop>" + QString::number(colors[i]) + "\t"; s += QColor(color_map.rgb(QwtDoubleInterval(0,1), colors[i])).name(); s += "</Stop>\n"; } s += "\t</ColorMap>\n"; } s += "\t<Image>"+QString::number(testDisplayMode(QwtPlotSpectrogram::ImageMode))+"</Image>\n"; bool contourLines = testDisplayMode(QwtPlotSpectrogram::ContourMode); s += "\t<ContourLines>"+QString::number(contourLines)+"</ContourLines>\n"; if (contourLines) { s += "\t\t<Levels>"+QString::number(levels())+"</Levels>\n"; bool defaultPen = defaultContourPen().style() != Qt::NoPen; s += "\t\t<DefaultPen>"+QString::number(defaultPen)+"</DefaultPen>\n"; if (defaultPen) { s += "\t\t\t<PenColor>"+defaultContourPen().color().name()+"</PenColor>\n"; s += "\t\t\t<PenWidth>"+QString::number(defaultContourPen().widthF())+"</PenWidth>\n"; s += "\t\t\t<PenStyle>"+QString::number(defaultContourPen().style() - 1)+"</PenStyle>\n"; } } QwtScaleWidget *colorAxis = plot()->axisWidget(color_axis); if (colorAxis && colorAxis->isColorBarEnabled()) { s += "\t<ColorBar>\n\t\t<axis>" + QString::number(color_axis) + "</axis>\n"; s += "\t\t<width>" + QString::number(colorAxis->colorBarWidth()) + "</width>\n"; s += "\t</ColorBar>\n"; } s += "\t<Visible>"+ QString::number(isVisible()) + "</Visible>\n"; return s+"</spectrogram>\n"; }
/*! Paint the contour lines \param painter Painter \param xMap Maps x-values into pixel coordinates. \param yMap Maps y-values into pixel coordinates. \param contourLines Contour lines \sa renderContourLines(), defaultContourPen(), contourPen() */ void QwtPlotSpectrogram::drawContourLines( QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QwtRasterData::ContourLines &contourLines ) const { if ( d_data->data == NULL ) return; const int numLevels = d_data->contourLevels.size(); for ( int l = 0; l < numLevels; l++ ) { const double level = d_data->contourLevels[l]; QPen pen = defaultContourPen(); if ( pen.style() == Qt::NoPen ) pen = contourPen( level ); if ( pen.style() == Qt::NoPen ) continue; painter->setPen( pen ); const QPolygonF &lines = contourLines[level]; for ( int i = 0; i < lines.size(); i += 2 ) { const QPointF p1( xMap.transform( lines[i].x() ), yMap.transform( lines[i].y() ) ); const QPointF p2( xMap.transform( lines[i+1].x() ), yMap.transform( lines[i+1].y() ) ); QwtPainter::drawLine( painter, p1, p2 ); } } }
void Spectrogram::drawContourLines (QPainter *p, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QwtRasterData::ContourLines &contourLines) const { //QwtPlotSpectrogram::drawContourLines(p, xMap, yMap, contourLines); QwtValueList levels = contourLevels(); const int numLevels = (int)levels.size(); for (int l = 0; l < numLevels; l++){ const double level = levels[l]; QPen pen = defaultContourPen(); if ( pen.style() == Qt::NoPen ) pen = contourPen(level); if ( pen.style() == Qt::NoPen ) continue; p->setPen(QwtPainter::scaledPen(pen)); const QPolygonF &lines = contourLines[level]; for ( int i = 0; i < (int)lines.size(); i += 2 ){ const QPointF p1( xMap.xTransform(lines[i].x()), yMap.transform(lines[i].y()) ); const QPointF p2( xMap.xTransform(lines[i + 1].x()), yMap.transform(lines[i + 1].y()) ); p->drawLine(p1, p2); } } if (d_show_labels) updateLabels(p, xMap, yMap, contourLines); }
Spectrogram* Spectrogram::copy() { Spectrogram *new_s = new Spectrogram(matrix()); new_s->setDisplayMode(QwtPlotSpectrogram::ImageMode, testDisplayMode(QwtPlotSpectrogram::ImageMode)); new_s->setDisplayMode(QwtPlotSpectrogram::ContourMode, testDisplayMode(QwtPlotSpectrogram::ContourMode)); new_s->setColorMap (colorMap()); new_s->setAxis(xAxis(), yAxis()); new_s->setDefaultContourPen(defaultContourPen()); new_s->setLevelsNumber(levels()); new_s->color_map_policy = color_map_policy; return new_s; }
QString Spectrogram::saveToString() { QString s = "<spectrogram>\n"; s += "\t<matrix>" + QString(d_matrix->objectName()) + "</matrix>\n"; s += "\t<useMatrixFormula>" + QString::number(d_use_matrix_formula) + "</useMatrixFormula>\n"; s += "\t<xAxis>" + QString::number(xAxis()) + "</xAxis>\n"; s += "\t<yAxis>" + QString::number(yAxis()) + "</yAxis>\n"; if (color_map_policy != Custom) s += "\t<ColorPolicy>" + QString::number(color_map_policy) + "</ColorPolicy>\n"; else s += ColorMapEditor::saveToXmlString(color_map); s += "\t<Image>"+QString::number(testDisplayMode(QwtPlotSpectrogram::ImageMode))+"</Image>\n"; bool contourLines = testDisplayMode(QwtPlotSpectrogram::ContourMode); s += "\t<ContourLines>"+QString::number(contourLines)+"</ContourLines>\n"; if (contourLines){ QwtValueList levels = contourLevels(); s += "\t\t<Levels>" + QString::number(levels.size()) + "</Levels>\n"; for (int i = 0; i < levels.size(); i++) s += "\t\t<z>" + QString::number(levels[i]) + "</z>\n"; bool defaultPen = defaultContourPen().style() != Qt::NoPen; s += "\t\t<DefaultPen>" + QString::number(defaultPen) + "</DefaultPen>\n"; if (defaultPen){ s += "\t\t\t<PenColor>" + defaultContourPen().color().name() + "</PenColor>\n"; s += "\t\t\t<PenWidth>" + QString::number(defaultContourPen().widthF()) + "</PenWidth>\n"; s += "\t\t\t<PenStyle>" + QString::number(defaultContourPen().style() - 1) + "</PenStyle>\n"; } else if (!d_color_map_pen && !d_pen_list.isEmpty()){ s += "\t\t<PenList>\n"; for (int i = 0; i < d_pen_list.size(); i++){ QPen pen = d_pen_list[i]; s += "\t\t\t<pen>" + pen.color().name () + "," + QString::number(pen.widthF()) + ","; s += QString::number(PenStyleBox::styleIndex(pen.style())) + "</pen>\n"; } s += "\t\t</PenList>\n"; } if (d_show_labels){ s += "\t\t<Labels>\n"; s += "\t\t\t<Color>" + d_labels_color.name() + "</Color>\n"; s += "\t\t\t<WhiteOut>" + QString::number(d_white_out_labels) +"</WhiteOut>\n"; s += "\t\t\t<Angle>" + QString::number(d_labels_angle) + "</Angle>\n"; s += "\t\t\t<xOffset>" + QString::number(d_labels_x_offset) + "</xOffset>\n"; s += "\t\t\t<yOffset>" + QString::number(d_labels_y_offset) + "</yOffset>\n"; s += "\t\t\t<Font>" + d_labels_font.toString() + "</Font>\n"; foreach(PlotMarker *m, d_labels_list){ if (m->xLabelOffset() != 0.0 || m->xLabelOffset() != 0.0){ s += "\t\t\t<offset>" + QString::number(m->index()) + ","; s += QString::number(m->xLabelOffset()) + ","; s += QString::number(m->yLabelOffset()) + "</offset>\n"; } } s += "\t\t</Labels>\n"; } } QwtScaleWidget *colorAxis = d_graph->axisWidget(color_axis); if (colorAxis && colorAxis->isColorBarEnabled()){ s += "\t<ColorBar>\n\t\t<axis>" + QString::number(color_axis) + "</axis>\n"; s += "\t\t<width>" + QString::number(colorAxis->colorBarWidth()) + "</width>\n"; s += "\t</ColorBar>\n"; } s += "\t<Visible>"+ QString::number(isVisible()) + "</Visible>\n"; return s+"</spectrogram>\n"; }