void SpectrumWidget::paintBands( QPainter* p ) { if ( m_type == AbsorptionSpectrum ) { for ( double va = startValue; va <= endValue ; va += 0.1 ) { int x = xPos( va ); p->setPen( linecolor( va ) ); p->drawLine( x,0,x, m_realHeight ); } p->setPen( Qt::black ); } int i = 0; int x = 0; int temp = 0; for ( QValueList<Spectrum::band>::Iterator it = m_spectrum->bandlist()->begin(); it != m_spectrum->bandlist()->end(); ++it ) { if ( ( *it ).wavelength < startValue || ( *it ).wavelength > endValue ) continue; x = xPos( ( *it ).wavelength ); temp = 0; switch ( m_type ) { case EmissionSpectrum: p->setPen( linecolor( ( *it ).wavelength ) ); p->drawLine( x,0,x, m_realHeight-1 ); p->setPen( Qt::black ); // p->drawLine( x,m_realHeight,x, m_realHeight ); break; case AbsorptionSpectrum: p->setPen( Qt::black ); p->drawLine( x,0,x, m_realHeight-1 ); break; } i++; } }
int CLineObj::exportPovrayFile(FILE *fp, const double *matrix) { int i; const char *objname = this->GetObjectName(); Vector3f linecolor(0, 1, 0), nodecolor(1, 0, 0); if (m_pDrawParms){ linecolor = m_pDrawParms->m_cHLineColor; nodecolor = m_pDrawParms->m_cVertexColor; } fprintf(fp, "union {\n"); //output vertices; for (i=0; i<m_nVertexCount; i++){ double v[3]; char nodename[256]; TransformVertex3dToVertex3d(m_pVertex[i], matrix, v); getUniqueNodeName(objname, i, nodename); fprintf(fp, "#declare %s = <%lg, %lg, %lg>;\n", nodename, v[0], v[1], v[2]); } fprintf(fp, "union {\n"); Vector2i* pLine = (Vector2i*)m_pPolygon; for (i=0; i<m_nPolygonCount; i++){ const Vector2i t = pLine[i]; char node1[256], node2[256]; getUniqueNodeName(objname, t.x, node1); getUniqueNodeName(objname, t.y, node2); fprintf(fp, "cylinder{%s, %s, RL}\n", node1, node2); } fprintf(fp, "pigment{ color rgb<%f, %f, %f> }\n", linecolor.x, linecolor.y, linecolor.z); fprintf(fp, "}\n"); fprintf(fp, "union {\n"); for (i=0; i<m_nVertexCount; i++){ char nodename[256]; getUniqueNodeName(objname, i, nodename); fprintf(fp, "sphere {%s, RR}\n", nodename); } fprintf(fp, "pigment{ color rgb<%f, %f, %f> }\n", nodecolor.x, nodecolor.y, nodecolor.z); fprintf(fp, "}\n"); fprintf(fp, "}\n"); return 1; }
void ProgressUI::paintEvent(QPaintEvent *e) { THWidgetBase::paintEvent(e); QPainter p(this); QPainterPath path; int w = this->width(); int h = this->height(); p.setRenderHint(QPainter::HighQualityAntialiasing, true); path.addRoundedRect(QRect(5, 5, w - 10, h - 10), 3, 3); QColor color(Qt::transparent); QPoint p1(5, 5); QPoint p2(w - 10, h - 10); QLinearGradient linecolor(p1, p2); linecolor.setColorAt(0, color); linecolor.setColorAt(1, color); linecolor.setColorAt(gradient - 0.15 <= 0 ? 0 : gradient - 0.15, color); linecolor.setColorAt(gradient >= 1 ? 1 : gradient, QColor(230, 230, 230, 50)); linecolor.setColorAt(gradient + 0.15 >= 1 ? 1 : gradient + 0.15, color); p.setPen(Qt::transparent); p.fillPath(path, QBrush(linecolor)); }
void SelfMenu::paintEvent(QPaintEvent *e) { QPainter painter(this); // painte QPainterPath path; float h = this->height(); float w = this->width(); path.setFillRule(Qt::WindingFill); path.addRoundedRect(QRect(0, 0, w, h), 3, 3); painter.setRenderHint(QPainter::Antialiasing, true); // LinearGradient QLinearGradient liner(QPoint(0, 0), QPoint(w, h)); // 132, 216, 209 ю╤ // 47, 107, 117 д╛хо // load data ConfigureData *conf = ConfigureData::getInstance(); c1 = conf->getColorIni("color1"); c2 = conf->getColorIni("color2"); liner.setColorAt(0, c1); liner.setColorAt(1, c2); painter.fillPath(path, QBrush(liner)); painter.setPen(Qt::transparent); painter.drawPath(path); // draw some lines QList<QPoint> line1; QList<QPoint> line2; { // calc start, final point float k = h / w; int b[7]; int x1[7], x2[7]; b[0] = h /3; b[1] = h /2; b[2] = 2 * h / 3; b[3] = 4 * h / 3; b[4] = 3 * h / 2; b[5] = 5 * h / 3; b[6] = h; x1[0] = w / 6; x2[0] = w / 4; x1[1] = w / 4; x2[1] = 2 * w / 5; x1[2] = w / 4; x2[2] = 4 * w / 7; x1[3] = w / 2; x2[3] = 5 * w / 6; x1[4] = 2 * w / 3; x2[4] = 5 * w / 6; x1[5] = 3 * w / 4; x2[5] = 4 * w / 5; x1[6] = w / 4; x2[6] = 3 * w / 4; for (int i = 0; i < 7; i++) { line1 << QPoint(x1[i], - k * x1[i] + b[i]); line2 << QPoint(x2[i], - k * x2[i] + b[i]); } } for (int i = 0; i < 7; i++) { QPoint p1 = line1.at(i); QPoint p2 = line2.at(i); QLinearGradient linecolor(p1, p2); linecolor.setColorAt(0, QColor(220, 220, 220, 50)); linecolor.setColorAt(0.45, QColor(220, 220, 220, 150)); linecolor.setColorAt(0.55, QColor(220, 220, 220, 150)); linecolor.setColorAt(1, QColor(220, 220, 220, 50)); painter.setPen(QPen(QBrush(linecolor), 1)); painter.drawLine(p1, p2); } return QMenu::paintEvent(e); }
/* region<int> getDiffer( trackDocument * doc, int areaIndex, int start, int end, int time ) { boundaryArea & area = doc->areas[areaIndex]; boundaryCurve & curve = area.divisions.first(); boundaryCurveIndex index; index.curve = 0; index.size = curve.points.size; index.start = start; index.end = end; static array2<bool> flag; flag.allocate( doc->width, doc->height ); region<int> result; if ( ! time ) return result; area.update( time - 1 ); area.update( time ); region<int> prevShape, nowShape; { list< point2<int> > segments; bool checkStart = true; for ( boundaryCurveIndex::iterator iti( index ); iti; ++iti ) { curve.segment( segments, iti(), time - 1 ); } memset( flag.data, 0, sizeof( bool ) * flag.size ); for ( list< point2<int> >::iterator itp( segments ); itp; ++itp ) { flag( clamp( 0, itp->x, doc->width - 1 ), clamp( 0, itp->y, doc->height - 1 ) ) = true; } prevShape.set( flag, 0, 0 ); } { list< point2<int> > segments; bool checkStart = true; for ( boundaryCurveIndex::iterator iti( index ); iti; ++iti ) { curve.segment( segments, iti(), time ); } memset( flag.data, 0, sizeof( bool ) * flag.size ); for ( list< point2<int> >::iterator itp( segments ); itp; ++itp ) { flag( clamp( 0, itp->x, doc->width - 1 ), clamp( 0, itp->y, doc->height - 1 ) ) = true; } nowShape.set( flag, 0, 0 ); } region<int> round; round = nowShape | prevShape; { region<int> line; point2<int> p1 = curve.points[start]( time - 1 ); point2<int> p2 = curve.points[start]( time ); line.line( p1.x, p1.y, p2.x, p2.y ); round |= line; } { region<int> line; point2<int> p1 = curve.points[end]( time - 1 ); point2<int> p2 = curve.points[end]( time ); line.line( p1.x, p1.y, p2.x, p2.y ); round |= line; } round.fill( result ); return result; } */ void stateDocument::paint() { trackDocument * doc = trackDocument::get(); trackView * view = trackView::get(); if ( ! doc ) return; if ( ! view ) return; static image viewImage;//画面表示用画像 viewImage.topdown = false; double maxValue = doc->maxValues[doc->currentViewImageIndex]; double windowLevel = windowLevelBar->get(); double windowSize = windowSizeBar->get(); decimal rate = 255.0 / windowSize; decimal offset = windowLevel - windowSize / 2; imageInterface< pixelLuminance<int16> > * img = & doc->originalImages[doc->currentViewImageIndex]; switch ( view->mode & trackView::baseImageMask ) { case trackView::original: break; case trackView::vertEdge: img = & doc->verticalEdgeImages[doc->currentViewImageIndex]; break; case trackView::horzEdge: img = & doc->horizontalEdgeImages[doc->currentViewImageIndex]; break; default: offset = 0; rate = 0; break; } viewImage.create( img->width, img->height ); pixel p( 0, 0, 0, 255 ); if ( rate ) { for ( int y = 0; y < img->height; ++y ) { for ( int x = 0; x < img->width; ++x ) { p.r = p.g = p.b = static_cast<int8>( clamp<decimal>( 0, ( img->getInternal( x, y ).y - offset ) * rate, 255.0 ) ); viewImage.setInternal( x, y, p ); } } } else { for ( int y = 0; y < img->height; ++y ) { for ( int x = 0; x < img->width; ++x ) { viewImage.setInternal( x, y, p ); } } } //波の表示用の色 pixel colorV( 0, 0, 255, 255 ); pixel colorH( 0, 255, 0, 255 ); pixel colorA( 255, 255, 0, 255 ); pixel colorD( 255, 0, 255, 255 ); //論文投稿用の表示 if ( false && ( ( view->mode & trackView::baseImageMask ) == trackView::none ) ) { p.r = p.g = p.b = 0; for ( int y = 0; y < img->height; ++y ) { for ( int x = 0; x < img->width; ++x ) { viewImage.setInternal( x, y, p ); } } for ( int t = 0; t < doc->sizeTime(); ++t ) { pixel c; if ( view->mode & trackView::vertical ) { for ( array< list<link> >::iterator ita( doc->verticalLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { c.r = c.g = c.b = clamp<int>( 0, it->reliability * 255, 255 ); int x = it->cx * doc->wave[t] + it->bx; int y = it->cy * doc->wave[t] + it->by; viewImage.set( x, y, blendMax( viewImage.get( x, y ), c ) ); } } } if ( view->mode & trackView::horizontal ) { for ( array< list<link> >::iterator ita( doc->horizontalLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { c.r = c.g = c.b = clamp<int>( 0, it->reliability * 255, 255 ); int x = it->cx * doc->wave[t] + it->bx; int y = it->cy * doc->wave[t] + it->by; viewImage.set( x, y, blendMax( viewImage.get( x, y ), c ) ); } } } if ( view->mode & trackView::ascent ) { for ( array< list<link> >::iterator ita( doc->ascentLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { c.r = c.g = c.b = clamp<int>( 0, it->reliability * 255, 255 ); int x = it->cx * doc->wave[t] + it->bx; int y = it->cy * doc->wave[t] + it->by; viewImage.set( x, y, blendMax( viewImage.get( x, y ), c ) ); } } } if ( view->mode & trackView::descent ) { for ( array< list<link> >::iterator ita( doc->descentLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { c.r = c.g = c.b = clamp<int>( 0, it->reliability * 255, 255 ); int x = it->cx * doc->wave[t] + it->bx; int y = it->cy * doc->wave[t] + it->by; viewImage.set( x, y, blendMax( viewImage.get( x, y ), c ) ); } } } } } else if ( view->mode != trackView::original ) { /* if ( view->mode & trackView::vertical ) { checkMaximum<double> mx; for ( array< list<link> >::iterator ita( doc->verticalLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { mx( it->intensity ); } } for ( array< list<link> >::iterator ita( doc->verticalLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { pixel c = colorV; c.a = clamp<int>( 0, c.a * it->intensity / mx(), 255 ); int x = it->cx * doc->wave[doc->currentViewImageIndex] + it->bx; int y = it->cy * doc->wave[doc->currentViewImageIndex] + it->by; viewImage.set( x, y, blend( viewImage.get( x, y ), c ) ); } } } if ( view->mode & trackView::horizontal ) { checkMaximum<double> mx; for ( array< list<link> >::iterator ita( doc->horizontalLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { mx( it->intensity ); } } for ( array< list<link> >::iterator ita( doc->horizontalLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { pixel c = colorH; c.a = clamp<int>( 0, c.a * it->intensity / mx(), 255 ); int x = it->cx * doc->wave[doc->currentViewImageIndex] + it->bx; int y = it->cy * doc->wave[doc->currentViewImageIndex] + it->by; viewImage.set( x, y, blend( viewImage.get( x, y ), c ) ); } } } if ( view->mode & trackView::ascent ) { checkMaximum<double> mx; for ( array< list<link> >::iterator ita( doc->ascentLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { mx( it->intensity ); } } for ( array< list<link> >::iterator ita( doc->ascentLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { pixel c = colorA; c.a = clamp<int>( 0, c.a * it->intensity / mx(), 255 ); int x = it->cx * doc->wave[doc->currentViewImageIndex] + it->bx; int y = it->cy * doc->wave[doc->currentViewImageIndex] + it->by; viewImage.set( x, y, blend( viewImage.get( x, y ), c ) ); } } } if ( view->mode & trackView::descent ) { checkMaximum<double> mx; for ( array< list<link> >::iterator ita( doc->descentLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { mx( it->intensity ); } } for ( array< list<link> >::iterator ita( doc->descentLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { pixel c = colorD; c.a = clamp<int>( 0, c.a * it->intensity / mx(), 255 ); int x = it->cx * doc->wave[doc->currentViewImageIndex] + it->bx; int y = it->cy * doc->wave[doc->currentViewImageIndex] + it->by; viewImage.set( x, y, blend( viewImage.get( x, y ), c ) ); } } } */ if ( view->mode & trackView::vertical ) { for ( array< list<link> >::iterator ita( doc->verticalLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { pixel c = colorV; c.a = clamp<int>( 0, c.a * it->reliability, 255 ); int x = it->cx * doc->wave[doc->currentViewImageIndex] + it->bx; int y = it->cy * doc->wave[doc->currentViewImageIndex] + it->by; viewImage.set( x, y, blend( viewImage.get( x, y ), c ) ); } } } if ( view->mode & trackView::horizontal ) { for ( array< list<link> >::iterator ita( doc->horizontalLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { pixel c = colorH; c.a = clamp<int>( 0, c.a * it->reliability, 255 ); int x = it->cx * doc->wave[doc->currentViewImageIndex] + it->bx; int y = it->cy * doc->wave[doc->currentViewImageIndex] + it->by; viewImage.set( x, y, blend( viewImage.get( x, y ), c ) ); } } } if ( view->mode & trackView::ascent ) { for ( array< list<link> >::iterator ita( doc->ascentLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { pixel c = colorA; c.a = clamp<int>( 0, c.a * it->reliability, 255 ); int x = it->cx * doc->wave[doc->currentViewImageIndex] + it->bx; int y = it->cy * doc->wave[doc->currentViewImageIndex] + it->by; viewImage.set( x, y, blend( viewImage.get( x, y ), c ) ); } } } if ( view->mode & trackView::descent ) { for ( array< list<link> >::iterator ita( doc->descentLinks ); ita; ++ita ) { for ( list<link>::iterator it( ita() ); it; ++it ) { pixel c = colorD; c.a = clamp<int>( 0, c.a * it->reliability, 255 ); int x = it->cx * doc->wave[doc->currentViewImageIndex] + it->bx; int y = it->cy * doc->wave[doc->currentViewImageIndex] + it->by; viewImage.set( x, y, blend( viewImage.get( x, y ), c ) ); } } } } /* for ( int i = 0; i < 4; ++i ) { for ( array2<flicker>::iterator it( doc->flickers[i] ); it; ++it ) { if ( it->value < 0.25 ) continue; pixel c( 0, 255, 0, 255 ); c.a = clamp<int>( 0, c.a * it->value, 128 ); const point2<int> & pos = it->lnk.position( doc->currentViewImageIndex, doc->wave ); int x = pos.x, y = pos.y; viewImage.set( x, y, blend( viewImage.get( x, y ), c ) ); } } */ for ( list< boundaryArea >::iterator it( doc->areas ); it; ++it ) { it->update( doc->currentViewImageIndex ); } list< point2<int> > points; pixel linecolor( 255, 255, 0, 128 ); pixel pointcolor( 0, 255, 0, 255 ); pixel itnitialpointcolor( 0, 0, 255, 255 ); pixel editedpointcolor( 255, 0, 0, 255 ); /* for ( list< boundaryArea >::iterator it( doc->areas ); it; ++it ) { boundaryArea & area = it(); if ( ! area.enable ) continue; pixel areacolor( 0, 0, 0, 64 ); for ( list< boundaryPart >::iterator ita( area.parts ); ita; ++ita ) { areacolor.r = rand() % 256; areacolor.g = rand() % 256; areacolor.b = rand() % 256; areacolor.a = 128; boundaryPart & part = ita(); for ( region<int>::iterator itp( part.shapes[doc->currentViewImageIndex] ); itp; ++itp ) { int x = itp->x; int y = itp->y; viewImage.set( x, y, blend( viewImage.get( x, y ), areacolor ) ); } } } */ for ( list< boundaryArea >::iterator it( doc->areas ); it; ++it ) { //曲線の表示 if ( doc->show_curve ) { for ( list< point2<int> >::iterator itp( it->boundaryCurves[doc->currentViewImageIndex] ); itp; ++itp ) { const point2<int> & p = itp(); int x = p.x; int y = p.y; viewImage.set( x, y, blend( viewImage.get( x, y ), linecolor ) ); } } //制御点の表示 for ( list<boundaryPoint*>::iterator itc( it->controlPoints ); itc; ++itc ) { boundaryPoint & bp = *itc(); const point2<int> & p = bp( doc->currentViewImageIndex ); pixel c; switch ( bp.type( doc->currentViewImageIndex ) ) { case boundaryPointFrame::typeInitial: c = itnitialpointcolor; break; case boundaryPointFrame::typeEdited: c = editedpointcolor; break; case boundaryPointFrame::typeInterpolated: c = pointcolor; break; default: c = pointcolor; break; } for ( int y = p.y - 1; y <= p.y + 1; ++y ) { for ( int x = p.x - 1; x <= p.x + 1; ++x ) { viewImage.set( x, y, blend( viewImage.get( x, y ), c ) ); } } } } paint( viewImage ); }