X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FpPlotter%2FpPlotterLayer.cxx;h=6951ccef5c2d9c081a3a392f0aac41ab34f0a510;hb=f9901e756bb82bd333310b47607875331616bb29;hp=a1a04ef1ad2d68ba42378344aac53dc7faab5687;hpb=c5feadbb145eecf6d73f793535b7e23eb18db2cb;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/pPlotterLayer.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/pPlotterLayer.cxx index a1a04ef..6951cce 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/pPlotterLayer.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/pPlotterLayer.cxx @@ -1,3 +1,28 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + //---------------------------------------------------------------------------- // Class definition include //---------------------------------------------------------------------------- @@ -32,16 +57,21 @@ pPlotterLayer:: pPlotterLayer(wxString name , int flags ) { SetName(name); m_flags = flags; +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 points.DeleteContents(TRUE); - offsetX=0; - offsetY=0; +#else + // ... +#endif + offsetX = 0; + offsetY = 0; } /* Draw the line from (x1,y1) to (x2,y2) only passing by the positive points in the line */ -void pPlotterLayer::draw(wxDC & dc,mpWindow & w,double x1,double y1,double x2,double y2) +void pPlotterLayer::draw(wxDC & dc,mpWindow & w,double x1,double y1,double x2,double y2, int orgy) { //intercepts @@ -49,23 +79,24 @@ void pPlotterLayer::draw(wxDC & dc,mpWindow & w,double x1,double y1,double x2,d float x0=-y1/m+x1; float y0=-m*x1+y1; + double sizedc = dc.GetSize().GetHeight()-orgy; //analyzing the curve if(x1<=0 && x2>=0) { if(y2>=0 && y1>=0) - dc.DrawLine(0,y0, x2,y2); + dc.DrawLine(0,GetYTranslated(sizedc,y0), x2,GetYTranslated(sizedc,y2)); else if(y2<=0 && y1>=0) { if(y0>=0 && x0>=0) - dc.DrawLine(0,y0,x0,0 ); + dc.DrawLine(0,GetYTranslated(sizedc,y0),x0,GetYTranslated(sizedc,0) ); } else if(y2>=0 && y1<=0) { if(y0>=0) - dc.DrawLine(0,y0,x2,y2 ); + dc.DrawLine(0,GetYTranslated(sizedc,y0),x2,GetYTranslated(sizedc,y2) ); } } @@ -73,11 +104,11 @@ void pPlotterLayer::draw(wxDC & dc,mpWindow & w,double x1,double y1,double x2,d if(x1>=0 && x2>=0) { if(y1>=0 && y2>=0 ) - dc.DrawLine(x1,y1, x2,y2); + dc.DrawLine(x1,GetYTranslated(sizedc,y1), x2,GetYTranslated(sizedc,y2)); else if(y1>=0 && y2<=0) - dc.DrawLine(x1,y1,x0,0 ); + dc.DrawLine(x1,GetYTranslated(sizedc,y1),x0,GetYTranslated(sizedc,0) ); else if(y1<=0 && y2>=0) - dc.DrawLine(x0,0,x2,y2); + dc.DrawLine(x0,GetYTranslated(sizedc,0),x2,GetYTranslated(sizedc,y2)); } @@ -87,13 +118,13 @@ void pPlotterLayer::draw(wxDC & dc,mpWindow & w,double x1,double y1,double x2,d * Draw the function with th spline points * */ -void pPlotterLayer::drawSplineCurve(wxDC & dc,mpWindow & w) +void pPlotterLayer::drawSplineCurve(wxDC & dc,mpWindow & w, int orgy) { std::vector vx=getXSpline(); std::vector vy=getYSpline(); wxPoint* ppoints; - int counter=0,minX,maxX,minY,maxY; + int /*counter=0,*/ minX,maxX,minY,maxY; // JPRx /* This is the offset of every point scale to the window pixel @@ -139,7 +170,7 @@ void pPlotterLayer::drawSplineCurve(wxDC & dc,mpWindow & w) if(type!=2) - draw(dc,w,cxi,cyi,cxj,cyj); + draw(dc,w,cxi,cyi,cxj,cyj,orgy); else if(type==2) { if(!initializePolygon(ppoints,cxi,cyi,cxj,cyj) && ((cxi<=0 && cxj>=0)||(cxi>=0 && cxj>=0))) @@ -174,6 +205,10 @@ void pPlotterLayer::drawSplineCurve(wxDC & dc,mpWindow & w) dc.SetBrush(wxBrush( wxColour(239,238,242) ,wxSOLID )); dc.SetPen(wxPen( wxColour(0,0,0) ,1,wxSOLID )); //dc.DrawPolygon(vx.size()+2,ppoints,0,0); + for(int i = 0; i <= j + 1; i++){ + int sizedc = dc.GetSize().GetHeight()-orgy; + ppoints[i].y = GetYTranslated(sizedc, ppoints[i].y); + } dc.DrawPolygon(j+2,ppoints,0,0); } @@ -182,7 +217,7 @@ void pPlotterLayer::drawSplineCurve(wxDC & dc,mpWindow & w) /* it define the first point of the polygon for be drawing - returs true if the first and second point of the polygon are setted + returns true if the first and second point of the polygon are set */ bool pPlotterLayer::initializePolygon(wxPoint* points,double x1, double y1,double x2, double y2) { @@ -196,7 +231,7 @@ bool pPlotterLayer::initializePolygon(wxPoint* points,double x1, double y1,doubl if(points[0].x<=0&& points[1].x<=0 && points[0].y<=0&& points[1].y<=0) { - int offsetpx=getOffsetPixelsXv(); + //int offsetpx=getOffsetPixelsXv(); //JPRx //analyzing the curve @@ -276,35 +311,33 @@ bool pPlotterLayer::initializePolygon(wxPoint* points,double x1, double y1,doubl } else return setted; + return setted; } /** -* Draw le lines between the points of the function +* Draw the lines between the points of the function */ -void pPlotterLayer::drawFunction(wxDC & dc,mpWindow & w) +void pPlotterLayer::drawFunction(wxDC & dc,mpWindow & w, int orgy) { - - int scrwX,scrwY,offsetpx,offsetpy,maxX,minX,maxY,minY; - wxPoint* ppoints=NULL; + wxPoint* ppoints = NULL; /* This is the offset of every point scale to the window pixel */ - offsetpx=getOffsetPixelsXv(); - offsetpy=getOffsetPixelsYv(); - - + offsetpx = getOffsetPixelsXv(); + offsetpy = getOffsetPixelsYv(); Rewind(); - - dc.GetSize(&scrwX, &scrwY); - //Lines between the points - + int sizedc = dc.GetSize().GetHeight()-orgy; +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 GetPoints(points); - +#else + //... +#endif // type of plotter int type=getmType(); /***********/ @@ -313,30 +346,38 @@ void pPlotterLayer::drawFunction(wxDC & dc,mpWindow & w) /***********/ //traslation - int xTraslation=getXTraslation(); + //int xTraslation=getXTraslation(); //JPRx +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 wxNode* node= points.GetFirst(); - int i=1;//points.GetCount()+1; +#else + wxNode* node= GetPointsPtr()->GetFirst(); +#endif + // int i=1;//points.GetCount()+1; //JPRx int j=2; /* Fill it if it is an histogram */ wxPoint point; - pFunctionPoint* pointk; + // pFunctionPoint* pointk; //JPRx if(type==2) { /* Fill the function if it represented an histogram */ - ppoints=(wxPoint*)malloc(sizeof(int)*2*(points.GetCount()+2)); +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 + ppoints = (wxPoint*)malloc(sizeof(int)*2*(points.GetCount()+2)); +#else + ppoints = (wxPoint*)malloc(sizeof(int)*2*(GetPointsPtr()->GetCount()+2)); +#endif //initialize points - point.x=-5000; - point.y=-5000; - ppoints[0]=point; - ppoints[1]=point; - + point.x = -5000; + point.y = GetYTranslated(sizedc,-5000); + ppoints[0] = point; + ppoints[1] = point; } - while (node!=NULL && node->GetNext()!=NULL) { pFunctionPoint* pointi=(pFunctionPoint*)node->GetData(); @@ -348,36 +389,32 @@ void pPlotterLayer::drawFunction(wxDC & dc,mpWindow & w) int pyi=(pointi->getRealY()-minY)-offsetY; int pxj=(pointj->getRealX()-minX)-offsetX; int pyj=(pointj->getRealY()-minY)-offsetY; - - int cxi=pxi* scaleX + offsetpx; //+ xTraslation; int cxj=pxj* scaleX + offsetpx; //+ xTraslation; int cyi=pyi* scaleY+ offsetpy ; int cyj=pyj* scaleY+ offsetpy ; //dc.DrawLine(pxi* scaleX + offsetpx,pyi* scaleY+ offsetpy, pxj* scaleX + offsetpx,pyj* scaleY+ offsetpy ); if(type!=2) - draw(dc,w,pxi* scaleX + offsetpx,pyi* scaleY+ offsetpy, pxj* scaleX + offsetpx,pyj* scaleY+ offsetpy ); - //dc.DrawLine(pxi* scaleX + offsetpx,pyi* scaleY+ offsetpy, pxj* scaleX + offsetpx,pyj* scaleY+ offsetpy ); - else if(type==2) { + draw(dc,w,pxi* scaleX + offsetpx,pyi* scaleY+ offsetpy, pxj* scaleX + offsetpx,pyj* scaleY+ offsetpy,orgy ); + //dc.DrawLine(pxi* scaleX + offsetpx,pyi* scaleY+ offsetpy, pxj* scaleX + offsetpx,pyj* scaleY+ offsetpy ); + } else if(type==2) { if(!initializePolygon(ppoints,cxi,cyi,cxj,cyj) && ((cxi<=0 && cxj>=0)||(cxi>=0 && cxj>=0))) { point.x=cxj; - point.y=cyj; + point.y=GetYTranslated(sizedc,cyj); ppoints[j]=point; j++; - } - } - + } // if + } // if type node=node->GetNext(); - } if(type==2) { //point.x=vx.at(size-1)* scaleX + offsetpx; point.x=ppoints[j-1].x; - point.y=0; + point.y=GetYTranslated(sizedc,0); //ppoints[vx.size()]=point; ppoints[j]=point; /* @@ -387,7 +424,7 @@ void pPlotterLayer::drawFunction(wxDC & dc,mpWindow & w) //settings for fill //point.x=vx.at(0)*scaleX + offsetpx; point.x=ppoints[0].x; - point.y=0; + point.y=GetYTranslated(sizedc,0); //ppoints[vx.size()+1]=point; ppoints[j+1]=point; @@ -395,21 +432,20 @@ void pPlotterLayer::drawFunction(wxDC & dc,mpWindow & w) dc.SetPen(wxPen( wxColour(0,0,0) ,1,wxSOLID )); //dc.DrawPolygon(vx.size()+2,ppoints,0,0); dc.DrawPolygon(j+2,ppoints,0,0); - - } - + } // if type } /** * Draw the points of the function */ -void pPlotterLayer::drawPoints(wxDC & dc,mpWindow & w) +void pPlotterLayer::drawPoints(wxDC & dc,mpWindow & w, int orgy) { Rewind(); double x, y; int minX,maxX,minY,maxY; + double sizedc = dc.GetSize().GetHeight()-orgy; /* This is the offset of every point scale to the window @@ -418,7 +454,7 @@ void pPlotterLayer::drawPoints(wxDC & dc,mpWindow & w) int offsetpx=getOffsetPixelsXv(); int offsetpy=getOffsetPixelsYv(); //traslation - int xTraslation=getXTraslation(); +// int xTraslation=getXTraslation(); //EED /*wxPen mypen(*wxBLACK, 5, wxSOLID); dc.SetPen(mypen);*/ /***********/ @@ -435,13 +471,13 @@ void pPlotterLayer::drawPoints(wxDC & dc,mpWindow & w) dc.SetBrush(wxBrush( wxColour(255,0,0),wxSOLID )); //dc.SetPen(wxPen(wxColour(0,0,0),1,wxSOLID) ); points[0].x=((x-minX-offsetX)*scaleX + offsetpx-MOVE); - points[0].y=((y-minY-offsetY)*scaleY+ offsetpy-MOVE); + points[0].y=GetYTranslated(sizedc,((y-minY-offsetY)*scaleY+ offsetpy-MOVE)); points[1].x=((x-minX-offsetX)*scaleX+ offsetpx+MOVE); - points[1].y=((y-minY-offsetY)*scaleY+ offsetpy-MOVE); + points[1].y=GetYTranslated(sizedc,((y-minY-offsetY)*scaleY+ offsetpy-MOVE)); points[2].x=((x-minX-offsetX)*scaleX+ offsetpx+MOVE); - points[2].y=((y-minY-offsetY)*scaleY+ offsetpy+MOVE); + points[2].y=GetYTranslated(sizedc,((y-minY-offsetY)*scaleY+ offsetpy+MOVE)); points[3].x=((x-minX-offsetX)*scaleX+ offsetpx-MOVE); - points[3].y=((y-minY-offsetY)*scaleY+ offsetpy+MOVE); + points[3].y=GetYTranslated(sizedc,((y-minY-offsetY)*scaleY+ offsetpy+MOVE)); if((x-minX-offsetX)*scaleX >=0 && (y-minY-offsetY/*w.getMinScrY()*/)*scaleY>=0) dc.DrawPolygon(4,points,0,0); } @@ -451,7 +487,7 @@ void pPlotterLayer::drawPoints(wxDC & dc,mpWindow & w) * Draw the line between the last point of the function * and the position of the mouse */ -void pPlotterLayer::drawLineToMousePoint(wxDC & dc,mpWindow & w) +void pPlotterLayer::drawLineToMousePoint(wxDC & dc,mpWindow & w, int orgy) { int x,y,sizeP,maxX,maxY,minX,minY; bool direction; @@ -462,10 +498,16 @@ void pPlotterLayer::drawLineToMousePoint(wxDC & dc,mpWindow & w) getDirection(direction); getSize(sizeP); //Lines betwen the points - GetPoints(points); - wxNode *node=points.GetLast(); - wxNode *node1=points.GetFirst(); +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 + GetPoints(points); + wxNode *node = points.GetLast(); + wxNode *node1 = points.GetFirst(); +#else + wxNode *node = GetPointsPtr()->GetLast(); + wxNode *node1 = GetPointsPtr()->GetFirst(); +#endif /* @@ -479,7 +521,7 @@ void pPlotterLayer::drawLineToMousePoint(wxDC & dc,mpWindow & w) getMinShowed(minX,minY); /***********/ //traslation - int xTraslation=getXTraslation(); +// int xTraslation=getXTraslation(); //EED if(node) { @@ -536,6 +578,7 @@ void pPlotterLayer::Plot(wxDC & dc, mpWindow & w) */ dc.GetSize(&scrwX, &scrwY); + getIfActual(actual); //getMax(maxX, maxY); /***********/ @@ -569,39 +612,49 @@ void pPlotterLayer::Plot(wxDC & dc, mpWindow & w) Managing the drawing */ int orgx=70; - int orgy=w.GetScrY()-40; - dc.SetDeviceOrigin( orgx ,orgy); - dc.SetAxisOrientation(true,true); + +//EED 14Mai2009 +// int orgy=w.GetScrY()-40; +// dc.SetDeviceOrigin( orgx ,orgy); +// dc.SetAxisOrientation(true,true); + + int orgy = 40; + //dc.SetDeviceOrigin( orgx ,orgy); + dc.SetDeviceOrigin( orgx ,0); + int sizedc = dc.GetSize().GetHeight()-orgy; + //dc.SetAxisOrientation(true,false); + + //if the user dont want to see the points of the function and if he stops drawing //we have to draw the function if(!show && !drawing && type==1) - drawFunction(dc,w); + drawFunction(dc,w,orgy); else if(!show && !drawing && type==2) - drawSplineCurve(dc,w); + drawSplineCurve(dc,w,orgy); //we just draw the point that the user just clicked else if(drawing && type==1) { - drawFunction(dc,w); - drawLineToMousePoint(dc,w); - drawPoints(dc,w); + drawFunction(dc,w,orgy); + drawLineToMousePoint(dc,w,orgy); + drawPoints(dc,w,orgy); } else if(drawing && type==1) { - drawSplineCurve(dc,w); - drawLineToMousePoint(dc,w); - drawPoints(dc,w); + drawSplineCurve(dc,w,orgy); + drawLineToMousePoint(dc,w,orgy); + drawPoints(dc,w,orgy); } else if(show && type==1) { - drawFunction(dc,w); - drawPoints(dc,w); + drawFunction(dc,w,orgy); + drawPoints(dc,w,orgy); } else if(show && type==2) { - drawSplineCurve(dc,w); - drawPoints(dc,w); + drawSplineCurve(dc,w,orgy); + drawPoints(dc,w,orgy); } // Drawing the guides according to real values entered according to the integrated interaction (IS NOT WORKING!!!) @@ -609,20 +662,25 @@ void pPlotterLayer::Plot(wxDC & dc, mpWindow & w) { dc.SetPen(wxPen( wxColour(255,0,0),1,wxDOT )); int offsetpx = getOffsetPixelsXv(); - int offsetpy = getOffsetPixelsYv(); +// int offsetpy = getOffsetPixelsYv(); //EED int realX_guide = w.getRealGuideX(); if( realX_guide!=-1 ) { - dc.DrawLine( (realX_guide/*-w.getMinScrX()*/-offsetX)*scaleX + offsetpx, 0, (realX_guide/*-w.getMinScrX()*/-offsetX)*scaleX + offsetpx, scrwY); + dc.DrawLine( (realX_guide/*-w.getMinScrX()*/-offsetX)*scaleX + offsetpx, + GetYTranslated(sizedc,0), + (realX_guide/*-w.getMinScrX()*/-offsetX)*scaleX + offsetpx, + GetYTranslated(sizedc,scrwY)); } int realY_guide = w.getRealGuideY(); if( realY_guide!=-1 ) { - dc.DrawLine( 0,(realY_guide/*-w.getMinScrY()*/-offsetX)*scaleX + offsetpx, scrwX, (realY_guide/*-w.getMinScrY()*/-offsetX)*scaleX + offsetpx); - } - } - + dc.DrawLine( 0, + GetYTranslated(sizedc,(realY_guide/*-w.getMinScrY()*/-offsetX)*scaleX + offsetpx), + scrwX, + GetYTranslated(sizedc,(realY_guide/*-w.getMinScrY()*/-offsetX)*scaleX + offsetpx)); + } // if realY_guide + } // if actual }