void IlwisObjectModel::resetAttributeModel(const QString& attributeName){ auto setAttributeModel = [&](int i, const ColumnDefinition& coldef, const QString& attributeName){ if ( coldef.name() == attributeName){ AttributeModel *attribute = new AttributeModel(coldef, this, _ilwisobject); _attributes[i] = attribute; } }; IlwisTypes objecttype = _ilwisobject->ilwisType(); if ( objecttype == itRASTER){ IRasterCoverage raster = _ilwisobject.as<RasterCoverage>(); if ( raster->hasAttributes()){ for(int i = 0; i < raster->attributeTable()->columnCount(); ++i){ setAttributeModel(i,raster->attributeTable()->columndefinition(i), attributeName); } } } else if ( hasType(objecttype,itFEATURE)){ IFeatureCoverage features = _ilwisobject.as<FeatureCoverage>(); for(int i = 0; i < features->attributeDefinitions().definitionCount(); ++i){ setAttributeModel(i,features->attributeTable()->columndefinition(i), attributeName); } } else if ( hasType(objecttype,itTABLE)){ ITable tbl = _ilwisobject.as<Table>(); for(int i = 0; i < tbl->columnCount(); ++i){ setAttributeModel(i,tbl->columndefinition(i),attributeName); } } }
void RasterLayerDrawer::setActiveVisualAttribute(const QString &attr) { IRasterCoverage raster = coverage().as<RasterCoverage>(); if ( attr == PIXELVALUE){ LayerDrawer::setActiveVisualAttribute(attr); } else if ( raster.isValid() ) { if(raster->hasAttributes()) { if ( raster->attributeTable()->columnIndex(attr) != iUNDEF){ IRepresentation newrpr = Representation::defaultRepresentation(raster->attributeTable()->columndefinition(attr).datadef().domain()); if ( newrpr.isValid()){ LayerDrawer::setActiveVisualAttribute(attr); } } } } }
QQmlListProperty<AttributeModel> IlwisObjectModel::attributes() { try { if ( _attributes.size() == 0){ if ( _ilwisobject.isValid()) { IlwisTypes objecttype = _ilwisobject->ilwisType(); if ( objecttype == itRASTER){ IRasterCoverage raster = _ilwisobject.as<RasterCoverage>(); if ( raster->hasAttributes()){ for(int i = 0; i < raster->attributeTable()->columnCount(); ++i){ AttributeModel *attribute = new AttributeModel(raster->attributeTable()->columndefinition(i), this, _ilwisobject); _attributes.push_back(attribute); } }else { AttributeModel *attribute = new AttributeModel(ColumnDefinition(PIXELVALUE, raster->datadef(),i64UNDEF), this, _ilwisobject); _attributes.push_back(attribute); } } else if ( hasType(objecttype,itFEATURE)){ IFeatureCoverage features = _ilwisobject.as<FeatureCoverage>(); for(int i = 0; i < features->attributeDefinitions().definitionCount(); ++i){ AttributeModel *attribute = new AttributeModel(features->attributeDefinitions().columndefinition(i), this, _ilwisobject); _attributes.push_back(attribute); } } else if ( hasType(objecttype,itTABLE)){ ITable tbl = _ilwisobject.as<Table>(); for(int i = 0; i < tbl->columnCount(); ++i){ AttributeModel *attribute = new AttributeModel(tbl->columndefinition(i), this, _ilwisobject); _attributes.push_back(attribute); } } } } if ( _attributes.size() > 0){ return QQmlListProperty<AttributeModel>(this, _attributes) ; } } catch(const ErrorObject& ){ // no exceptions may escape here } return QQmlListProperty<AttributeModel>(); }
QString IlwisObjectModel::value2string(const QVariant &value, const QString &attrName) { auto v2s = [](const ColumnDefinition& coldef, const QVariant& value)->QString { if ( coldef.isValid()){ if ( coldef.datadef().domain()->ilwisType() == itTEXTDOMAIN) return value.toString(); return coldef.datadef().domain()->impliedValue(value).toString(); } if ( value.toDouble() == rUNDEF) return sUNDEF; return value.toString(); }; if ( attrName != "") { IlwisTypes objectype = _ilwisobject->ilwisType(); if ( hasType(objectype, itFEATURE)){ IFeatureCoverage features = _ilwisobject.as<FeatureCoverage>(); ColumnDefinition coldef = features->attributeDefinitions().columndefinition(attrName); return v2s(coldef, value); }else if (hasType(objectype, itRASTER)){ IRasterCoverage raster = _ilwisobject.as<RasterCoverage>(); if ( raster->hasAttributes()){ ColumnDefinition coldef = raster->attributeTable()->columndefinition(attrName); return v2s(coldef, value); } if ( raster->datadef().domain()->ilwisType() == itCOLORDOMAIN){ auto clr = ColorRangeBase::toColor(value, ColorRangeBase::cmRGBA); return ColorRangeBase::toString(clr,ColorRangeBase::cmRGBA) ; } } } if ( value.toDouble() == rUNDEF) return sUNDEF; return value.toString(); }