All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
#include <ParamSpaceScript.h>
Public Member Functions | |
| virtual QStringList | functions () const |
| virtual QVariant | functionValue (const QString &name, const QVector< ExpressionAction * > &args) const |
| virtual bool | isValidFunction (const QString &name) const |
| ParamExpressionContext (RealSpace *param) | |
| DinverCore::ParamExpressionContext::ParamExpressionContext | ( | RealSpace * | param | ) | [inline] |
{_param=param;}
| QStringList DinverCore::ParamExpressionContext::functions | ( | ) | const [virtual] |
Reimplemented from QGpCoreTools::ExpressionContext.
References TRACE.
{
TRACE;
QStringList l;
l << "linear(<param1>, \">\" | \"<\", <a>, <param2>, <b>)"
<< "parameter(<name>, <unit>, <min>, <max>, <scale>, <prec>)";
return l;
}
| QVariant DinverCore::ParamExpressionContext::functionValue | ( | const QString & | name, |
| const QVector< ExpressionAction * > & | args | ||
| ) | const [virtual] |
Reimplemented from QGpCoreTools::ExpressionContext.
References DinverCore::RealSpace::addCondition(), DinverCore::RealSpace::addParameter(), QGpCoreTools::endl(), DinverCore::SimpleCondition::GreaterThan, DinverCore::SimpleCondition::LessThan, DinverCore::ParameterGrid::Linear, DinverCore::ParameterGrid::Log, DinverCore::RealSpace::parameter(), scaleType, DinverCore::RealSpace::setVariableParameters(), QGpCoreTools::tr(), and TRACE.
{
TRACE;
switch(name[0].unicode()) {
case 0x006C: // 'l'
if(name=="linear") {
if(args.count()==5) {
Parameter * x1Param=_param->parameter(args.at(0)->value().toString());
if(!x1Param) {
App::stream() << tr("error: parameter %1 not found").arg(args.at(0)->value().toString()) << endl;
return QVariant();
}
Parameter * x2Param=_param->parameter(args.at(3)->value().toString());
if(!x2Param) {
App::stream() << tr("error: parameter %1 not found").arg(args.at(3)->value().toString()) << endl;
return QVariant();
}
if(args.at(1)->value().toString() ==">") {
_param->addCondition(new SimpleCondition(x1Param, SimpleCondition::GreaterThan,
args.at(2)->value().toDouble(), x2Param, args.at(4)->value().toDouble()) );
} else {
_param->addCondition(new SimpleCondition(x1Param, SimpleCondition::LessThan,
args.at(2)->value().toDouble(), x2Param, args.at(4)->value().toDouble()) );
}
} else {
App::stream() << tr("error: function 'linear' requires 5 arguments: param1, \"<\" or \">\", a, param2, b") << endl;
}
}
break;
case 0x0070: // 'p'
if(name=="parameter") {
if(args.count()==6) {
ParameterGrid::Scale s;
QString scaleType=args.at(4)->value().toString().toLower();
if(scaleType=="log") {
s=ParameterGrid::Log;
} else if(scaleType=="linear"){
s=ParameterGrid::Linear;
} else {
App::stream() << tr("error: bad parameter scale type %1, \"log\" or \"linear\" expected.").arg(scaleType) << endl;
return QVariant();
}
if(_param->addParameter(args.at(0)->value().toString(), args.at(1)->value().toString(),
args.at(2)->value().toDouble(), args.at(3)->value().toDouble(),
s, args.at(5)->value().toDouble())) {
_param->setVariableParameters();
} else {
App::stream() << tr("error: cannot add parameter %1").arg(args.at(0)->value().toString()) << endl;
}
} else {
App::stream() << tr("error: function 'parameter' requires 6 arguments: name, unit, min, max, scale, prec") << endl;
}
}
break;
default:
break;
}
return QVariant();
}
| bool DinverCore::ParamExpressionContext::isValidFunction | ( | const QString & | name | ) | const [virtual] |
Reimplemented from QGpCoreTools::ExpressionContext.
References TRACE.
{
TRACE;
switch(name[0].unicode()) {
case 0x006C: // 'l'
if(name=="linear") return true;
break;
case 0x0070: // 'p'
if(name=="parameter") return true;
break;
default:
break;
}
return false;
}