#include #include #include #include #include #include #include #include "Fl_CbLinker.h" #include "cmGlobal.h" #include "cmFloatTypes.h" #include "cmRpt.h" #include "cmErr.h" #include "cmCtx.h" #include "cmMem.h" #include "cmMallocDebug.h" #include "cmLinkedHeap.h" #include "cmText.h" #include "cmGr.h" #include "cmGrDevCtx.h" #include "cmGrPlot.h" #include "cmGrPage.h" #include "cmGrFltk.h" #include "cmGr2dFltk.h" cmGr2dFltk::cmGr2dFltk(cmCtx_t* ctx, Fl_Menu_Bar* menuBar, int x, int y, int w, int h) : cmGrPlotFltk(ctx,x,y,w,h), _x(0),_y(0),_radius(0),_angle(0), _objId(0) { cmErrSetup(&_err,&ctx->rpt,"cmGr2dFltk"); if( cmGrPageIsValid(pageHandle()) == false ) return; initViews(1,1); unsigned vwIdx = 0; cmGrPgH_t pgH = pageHandle(); cmGrVwH_t vwH = cmGrPageViewHandle( pgH, vwIdx); cmGrH_t cvH = cmGrViewGrHandle( vwH ); cmGrVExt_t limExt; cmGrVExtSetD(&limExt,-kWidth,-kHeight,kWidth, kHeight); cmGrObjSetWorldExt( cvH, cmGrRootObjH(cvH), &limExt ); cmGrObjSetWorldLimitExt(cvH, cmGrRootObjH(cvH), &limExt, kLeftGrFl | kRightGrFl | kTopGrFl | kBottomGrFl ); _createObj(); cmGrSetViewExtentsE( cvH, &limExt ); } cmGr2dFltk::~cmGr2dFltk() { } bool cmGr2dFltk::on_plot_object( cmGrPlotCbArg_t* arg ) { if( arg->selId==kEventCbSelGrPlId && cmIsFlag(arg->eventFlags,kMsDragGrFl ) ) { cmGrVExt_t vext; cmGrPlotObjVExt(arg->objH,&vext); //cmGrVExtPrint("",&vext); _x = cmGrVExtMinX(&vext); _y = cmGrVExtMinY(&vext); _radius = sqrtf(_x*_x + _y*_y)/kWidth; _angle = -( atan2f(_y,_x) - M_PI/2.0); if( _angle < 0 ) _angle += 2.0 * M_PI; _angle = 360.0f * _angle / (2.0*M_PI); setStatusText(cmTsPrintfS("r:%f angle:%f",_radius,_angle)); callback()(this,user_data()); } return true; } double cmGr2dFltk::x() const { return _x; } double cmGr2dFltk::y() const { return _y; } double cmGr2dFltk::radius() const { return _radius; } double cmGr2dFltk::angle() const { return _angle; } void cmGr2dFltk::_createObj() { cmGrPlH_t plH = plotHandle(); cmGrPgH_t pgH = pageHandle(); unsigned vwIdx = 0; cmGrVwH_t vwH = cmGrPageViewHandle( pgH, vwIdx ); cmGrH_t cvH = cmGrViewGrHandle( vwH ); cmGrPlObjH_t parentObjH = cmGrPlObjNullHandle; cmGrPlObjH_t xAnchorObjH = cmGrPlObjNullHandle; cmGrPlObjH_t yAnchorObjH = cmGrPlObjNullHandle; cmGrPlObjH_t objH = cmGrPlObjNullHandle; cmGrPlObjTypeId_t objTypeId = kRectGrPlId; cmReal_t x = 0; cmReal_t y = 0; cmReal_t w = 0; cmReal_t h = 0; unsigned flags = 0; //kNoDragGrPlFl; cmGrVExt_t* wext = NULL; if( cmGrPlotObjCreate(plH, cvH, &objH, _objId++, parentObjH, xAnchorObjH, yAnchorObjH, objTypeId, flags | kNoDragGrPlFl, x, y, w, h, NULL, wext ) != kOkGrPlRC ) { cmErrMsg(&_err,kCreateObjRC,"Plot origin object create failed."); } else { cmGrPlotObjSetPhysExt(objH, -2, -2, 2, 2 ); cmGrPlotObjSetFontSize(objH,8); } objH = cmGrPlObjNullHandle; if( cmGrPlotObjCreate(plH, cvH, &objH, _objId++, parentObjH, xAnchorObjH, yAnchorObjH, objTypeId, flags, x, y, w, h, NULL, wext ) != kOkGrPlRC ) { cmErrMsg(&_err,kCreateObjRC,"Plot object create failed."); } else { //unsigned f = 0 ? (kNorthJsGrFl | kTopJsGrFl) : (kSouthJsGrFl | kBottomJsGrFl); //cmGrPlotObjSetLabelAttr( objH, f | kWestJsGrFl | kTopJsGrFl | kRightJsGrFl, 0, kBlackGrId ); cmGrPlotObjSetLineColor( objH, kEnablePlGrId, kGreenGrId ); cmGrPlotObjSetPhysExt(objH, -4, -4, 4, 4 ); cmGrPlotObjSetFontSize(objH,8); } }