QString AttributeModel::actualRangeDefintion(bool calc) const { QString rangeString; if ( _coldefinition.isValid()) { if ( calc || _coldefinition.datadef().range().isNull()) { if ( hasType( _owner->ilwisType() , itFEATURE)) { Ilwis::IFeatureCoverage features = _owner.as<Ilwis::FeatureCoverage>(); if ( !features.isValid()) return ""; features->loadData(); std::vector<QVariant> data = features->attributeTable()->column(_coldefinition.name()); if ( data.size() != 0) { std::vector<double> values(data.size()); int i=0; for(auto v : data) values[i++] = v.toDouble(); Ilwis::NumericStatistics stats; // realy like to do this with a template specialization of the proper calculate function, but the syntax was unclear to me stats.calculate(values.begin(), values.end()); Ilwis::NumericRange *rng = new Ilwis::NumericRange(stats.prop(Ilwis::NumericStatistics::pMIN),stats.prop(Ilwis::NumericStatistics::pMAX)); features->attributeDefinitionsRef().columndefinitionRef(_coldefinition.name()).datadef().range(rng); const_cast<AttributeModel *>(this)->_coldefinition = features->attributeDefinitions().columndefinition(_coldefinition.name()); } } } rangeString = _coldefinition.datadef().range()->toString(); } return rangeString; }