void AspRegion::display(spAspCell_t cell, spAspTrace_t trace, spAspDataInfo_t dataInfo) { set_transparency_level(transparency); int roiColor,thick; setRoiColor(roiColor,thick); /* // this replace sCoord[0].y with trace data float *traceData = trace->getFirstDataPtr(); if(!traceData) return; int maxpts = trace->getTotalpts(); if(maxpts<1) return; int p1 = trace->val2dpt(sCoord[0].x); sCoord[0].y = (*(traceData+p1)); */ double cali = cell->getCali(VERT); double yoff = (trace->vp)*cali*(dataInfo->getVoff()); pCoord[0].x=cell->val2pix(HORIZ,sCoord[0].x); pCoord[0].y=cell->val2pix(VERT,sCoord[0].y) - yoff; //Winfoprintf("region display %d %d %f %f %f %f",p1,maxpts,sCoord[0].x,sCoord[0].y,pCoord[0].x,pCoord[0].y); if(selected == HANDLE_SELECTED) AspUtil::drawMark((int)pCoord[0].x,(int)pCoord[0].y,ACTIVE_COLOR,thick); else AspUtil::drawMark((int)pCoord[0].x,(int)pCoord[0].y,roiColor,thick); return; set_spectrum_width(1); set_line_width(1); set_transparency_level(0); }
void AspInteg::display(spAspCell_t cell, spAspTrace_t trace, spAspDataInfo_t dataInfo, int integFlag, double is, double off) { set_transparency_level(transparency); disFlag = integFlag; float *traceData = trace->getFirstDataPtr(); if(!traceData) return; int maxpts = trace->getTotalpts(); if(maxpts<1) return; absValue = trace->getInteg(sCoord[0].x,sCoord[1].x); double x1=pCoord[0].x=cell->val2pix(HORIZ,sCoord[0].x); double x2=pCoord[1].x=cell->val2pix(HORIZ,sCoord[1].x); // get integ data if(m_data) delete[] m_data; int p1 = trace->val2dpt(sCoord[0].x); int p2 = trace->val2dpt(sCoord[1].x); m_datapts = p2-p1+1; m_data = new float[m_datapts]; float sum = 0; int k=0; for(int i=p1;i<=p2;i++) { //sum += (*(traceData+i) - *(traceData+p1)); sum += (*(traceData+i)); (*(m_data+k)) = sum; k++; } double vcali = cell->getCali(VERT); m_scale = is/(double)maxpts; m_yoff = off*vcali; double vscale = dataInfo->getVscale(); if(vscale == 0) vscale = 1.0; double scale = m_scale*vscale*vcali; // add vp double yoff = m_yoff + (dataInfo->getVpos())*vcali; double y1=pCoord[0].y=cell->val2pix(VERT,(*(m_data))*m_scale) - m_yoff; double y2=pCoord[1].y=cell->val2pix(VERT,(*(m_data+m_datapts-1))*m_scale) - m_yoff; //AspUtil::drawMark((int)x1,(int)y1,ACTIVE_COLOR); //AspUtil::drawMark((int)x2,(int)y2,ACTIVE_COLOR); // check x1, x2 boundary double px,pw,py,ph,px2; cell->getPixCell(px,py,pw,ph); px2=px+pw; if(x1 < px && x2 < px) return; if(x1 > px2 && x2 > px2) return; if(x1 < px) x1=px; if(x2 > px2) x2=px2; int roiColor; if(selected == ROI_SELECTED) roiColor=ACTIVE_COLOR; else roiColor = INT_COLOR; char thickName[64]; int thickness; // used by functions int thick=0; // use thickness set by functions string value; if(integFlag & SHOW_INTEG) { getOptName(INTEG_LINE,thickName); //AspUtil::getDisplayOption(string(thickName)+"Thickness",value); //thickness = atoi(value.c_str()); //set_spectrum_width(thickness); //set_line_width(thickness); set_spectrum_thickness(thickName,thickName,1.0); set_line_thickness(thickName); cell->drawPolyline(m_data,m_datapts,1,x1,py,x2-x1,ph,roiColor,scale,yoff); int i = selectedHandle-1; if(i>=0 && i < npts) { AspUtil::drawMark((int)pCoord[i].x,(int)pCoord[i].y,ACTIVE_COLOR,thick); } } labelX=labelY=labelW=labelH=0; if((integFlag & SHOW_LABEL)) { if(integFlag & SHOW_VERT_LABEL) rotate = 1; else rotate=0; string labelStr; getLabel(dataInfo,labelStr,labelW,labelH); labelX=(int)(labelLoc.x+(x1+x2)/2) - labelW/2; labelY=(int)(labelLoc.y+(y1+y2)/2) - labelH; if(labelY<(py+labelH)) labelY = (int)py+labelH; char fontName[64]; if(LABEL_SELECTED) { int labelColor; setFont(labelColor); AspUtil::drawString((char *)labelStr.c_str(), labelX,labelY, labelColor, "", rotate); } else { getOptName(INTEG_LABEL,fontName); AspUtil::drawString((char *)labelStr.c_str(), labelX, labelY, -1, fontName,rotate); } labelY -= labelH; } if(selected == ROI_SELECTED) roiColor=ACTIVE_COLOR; else roiColor = INTEG_MARK_COLOR; getOptName(INTEG_MARK,thickName); AspUtil::getDisplayOption(string(thickName)+"Thickness",value); thickness = atoi(value.c_str()); if(thickness < 1) thickness=1; //set_spectrum_width(thickness); //set_line_width(thickness); set_spectrum_thickness(thickName,thickName,1.0); set_line_thickness(thickName); if((integFlag & SHOW_VALUE) && (integFlag & SHOW_VERT_VALUE)) { string labelStr; int cwd, cht, ascent, descent; getValue(dataInfo,labelStr,cht,cwd); // overwrite cht, cwd with fixed length char str[MAXSTR]; sprintf(str,"%.2f",100.00); GraphicsWin::getTextExtents(str, 14, &ascent, &descent, &cht); cwd = ascent + descent; double y = py + ph - cht - 5*thickness; Dpoint_t p1,p2; p1.x=x1; p2.x=x2; p1.y=p2.y=y; AspUtil::drawLine(p1,p2,roiColor,thick); p1.x=p2.x=x1; p2.y=y-5*thickness; AspUtil::drawLine(p1,p2,roiColor,thick); p1.x=p2.x=x2; p2.y=y-5*thickness; AspUtil::drawLine(p1,p2,roiColor,thick); p1.x=p2.x=0.5*(x1+x2); p2.y=y+5*thickness; AspUtil::drawLine(p1,p2,roiColor,thick); char fontName[64]; getOptName(INTEG_NUM,fontName); y = py + ph - cwd/2; AspUtil::drawString((char *)labelStr.c_str(), (int)p1.x-cwd/2, (int)y, -1, fontName,1); } else if(integFlag & SHOW_VALUE) { string labelStr; int cwd, cht; getValue(dataInfo,labelStr,cwd,cht); double y = py + ph - cht - 15*thickness; Dpoint_t p1,p2; p1.x=x1; p2.x=x2; p1.y=p2.y=y; AspUtil::drawLine(p1,p2,roiColor,thick); p1.x=p2.x=x1; p2.y=y-5*thickness; AspUtil::drawLine(p1,p2,roiColor,thick); p1.x=p2.x=x2; p2.y=y-5*thickness; AspUtil::drawLine(p1,p2,roiColor,thick); p1.x=p2.x=0.5*(x1+x2); p2.y=y+5*thickness; AspUtil::drawLine(p1,p2,roiColor,thick); char fontName[64]; getOptName(INTEG_NUM,fontName); y = py + ph - cht/2; AspUtil::drawString((char *)labelStr.c_str(), (int)p1.x-cwd/2, (int)y, -1, fontName,0); } getOptName(SPEC_LINE_MIN,thickName); set_spectrum_width(1); set_line_width(1); set_transparency_level(0); }