void Document::initializeGridDisplay (const Transformation &transformation) { LOG4CPP_INFO_S ((*mainCat)) << "Document::initializeGridDisplay"; ENGAUGE_ASSERT (!m_coordSystemContext.modelGridDisplay().stable()); // Get graph coordinate bounds CallbackBoundingRects ftor (m_documentAxesPointsRequired, transformation); Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor, &CallbackBoundingRects::callback); iterateThroughCurvePointsAxes (ftorWithCallback); // Initialize. Note that if there are no graph points then these next steps have no effect bool isEmpty; QPointF boundingRectGraphMin = ftor.boundingRectGraphMin (isEmpty); QPointF boundingRectGraphMax = ftor.boundingRectGraphMax (isEmpty); if (!isEmpty) { GridInitializer gridInitializer; DocumentModelGridDisplay modelGridDisplay = gridInitializer.initializeWithWidePolarCoverage (boundingRectGraphMin, boundingRectGraphMax, modelCoords(), transformation, m_pixmap.size ()); m_coordSystemContext.setModelGridDisplay (modelGridDisplay); } }
void TransformationStateDefined::updateAxesChecker (CmdMediator &cmdMediator, const Transformation &transformation) { CallbackAxesCheckerFromAxesPoints ftor; Functor2wRet<const QString &, const Point&, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor, &CallbackAxesCheckerFromAxesPoints::callback); cmdMediator.iterateThroughCurvePointsAxes (ftorWithCallback); m_axesChecker->prepareForDisplay (ftor.points(), cmdMediator.document().modelCurveStyles().pointRadius(AXIS_CURVE_NAME), cmdMediator.document().modelAxesChecker(), cmdMediator.document().modelCoords(), transformation, cmdMediator.document().documentAxesPointsRequired()); m_axesChecker->setVisible (true); startTimer (cmdMediator.document().modelAxesChecker()); }
// setup the meta-table for synched variables bool CScriptRMI::BuildSynchTable( SmartScriptTable vars, SmartScriptTable cls, const char * name ) { IScriptSystem * pSS = vars->GetScriptSystem(); SmartScriptTable synched( pSS ); SmartScriptTable defaultValues( pSS ); // TODO: Improve IScriptTable::SUserFunctionDesc fd; fd.pFunctor = functor_ret( SynchedNewIndexFunction ); fd.sFunctionName = "__newindex"; fd.sGlobalName = "<net-dispatch>"; fd.sFunctionParams = "(...)"; synched->AddFunction( fd ); std::vector<SSynchedPropertyInfo> properties; IScriptTable::Iterator iter = vars->BeginIteration(); while (vars->MoveNext(iter)) { if (iter.sKey) { int type; if (!vars->GetValue(iter.sKey, type)) { vars->EndIteration(iter); pSS->RaiseError( "No type for %s", iter.sKey ); return false; } size_t len = strlen(iter.sKey); if (len > MaxSynchedPropertyNameLength) { vars->EndIteration(iter); pSS->RaiseError( "Synched var name '%s' too long (max is %d)", iter.sKey, (int)MaxSynchedPropertyNameLength ); return false; } SSynchedPropertyInfo info; strcpy( info.name, iter.sKey ); info.type = (EScriptSerializeType) type; properties.push_back( info ); if (info.type == eSST_String) defaultValues->SetValue( iter.sKey, "" ); else defaultValues->SetValue( iter.sKey, 0 ); } } vars->EndIteration( iter ); if (properties.empty()) return true; fd.pFunctor = NULL; fd.pUserDataFunc = SerializeFunction; fd.nDataSize = sizeof(SSynchedPropertyInfo) * properties.size(); fd.pDataBuffer = &properties[0]; fd.sFunctionName = SERIALIZE_FUNCTION; fd.sFunctionParams = "(...)"; fd.sGlobalName = "<net-dispatch>"; synched->AddFunction( fd ); cls->SetValue( SERVER_SYNCHED_FIELD, synched ); cls->SetValue( "synched", defaultValues ); return true; }
QString DigitizeStateSelect::scaleBarPointIdentifier (CmdMediator *cmdMediator) const { CallbackScaleBar ftor; Functor2wRet<const QString &, const Point&, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor, &CallbackScaleBar::callback); cmdMediator->iterateThroughCurvePointsAxes (ftorWithCallback); return ftor.scaleBarPointIdentifier(); }
void GraphicsScene::updatePointMembership (CmdMediator &cmdMediator, GeometryWindow *geometryWindow) { LOG4CPP_INFO_S ((*mainCat)) << "GraphicsScene::updatePointMembership"; CallbackSceneUpdateAfterCommand ftor (m_graphicsLinesForCurves, *this, cmdMediator.document (), geometryWindow); Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor, &CallbackSceneUpdateAfterCommand::callback); // First pass: // 1) Mark all points as Not Wanted (this is done while creating the map) m_graphicsLinesForCurves.lineMembershipReset (); // Next pass: // 1) Existing points that are found in the map are marked as Wanted // 2) Add new points that were just created in the Document. The new points are marked as Wanted cmdMediator.iterateThroughCurvePointsAxes (ftorWithCallback); cmdMediator.iterateThroughCurvesPointsGraphs (ftorWithCallback); // Next pass: // 1) Remove points that were just removed from the Document m_graphicsLinesForCurves.lineMembershipPurge (cmdMediator.document().modelCurveStyles()); }
void DlgSettingsExportFormat::initializeIntervalConstraints () { LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsExportFormat::initializeIntervalConstraints"; const int MAX_POINTS_ACROSS_RANGE = 1000; // Get min and max of graph and screen coordinates CallbackBoundingRects ftor (mainWindow().transformation()); Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor, &CallbackBoundingRects::callback); cmdMediator().iterateThroughCurvesPointsGraphs (ftorWithCallback); // If there are no points, then interval will be zero. That special case must be handled downstream to prevent infinite loops bool isEmpty; double maxSizeGraph = qMax (ftor.boundingRectGraph(isEmpty).width(), ftor.boundingRectGraph(isEmpty).height()); double maxSizeScreen = qMax (ftor.boundingRectScreen(isEmpty).width(), ftor.boundingRectScreen(isEmpty).height()); m_minIntervalGraph = maxSizeGraph / MAX_POINTS_ACROSS_RANGE; m_minIntervalScreen = maxSizeScreen / MAX_POINTS_ACROSS_RANGE; }
void CoordSystem::checkEditPointAxis (const QString &pointIdentifier, const QPointF &posScreen, const QPointF &posGraph, bool &isError, QString &errorMessage) { LOG4CPP_INFO_S ((*mainCat)) << "CoordSystem::checkEditPointAxis" << " posGraph=" << QPointFToString (posGraph).toLatin1 ().data (); CallbackCheckEditPointAxis ftor (m_modelCoords, pointIdentifier, posScreen, posGraph, m_documentAxesPointsRequired); Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor, &CallbackCheckEditPointAxis::callback); m_curveAxes->iterateThroughCurvePoints (ftorWithCallback); isError = ftor.isError (); errorMessage = ftor.errorMessage (); }
void CoordSystem::addPointsInCurvesGraphs (CurvesGraphs &curvesGraphs) { CallbackAddPointsInCurvesGraphs ftor (*this); Functor2wRet<const QString &, const Point &, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor, &CallbackAddPointsInCurvesGraphs::callback); curvesGraphs.iterateThroughCurvesPoints (ftorWithCallback); }