#include "nmPebiResultPropertyCatalog.h" namespace { nmPebiResultPropertyDescriptor makeDescriptor( const char* pPropertyId, const char* pDisplayNameSourceText, const char* pBaseUnit, NM_PEBI_RESULT_PROPERTY_TIME_TYPE eTimeType, NM_PEBI_RESULT_PROPERTY_SOURCE eSource, NM_PEBI_RESULT_PROPERTY_RANGE_POLICY eRangePolicy) { nmPebiResultPropertyDescriptor oDescriptor; oDescriptor.m_sPropertyId = QString::fromLatin1(pPropertyId); oDescriptor.m_sDisplayNameSourceText = QString::fromLatin1(pDisplayNameSourceText); oDescriptor.m_sBaseUnit = QString::fromLatin1(pBaseUnit); oDescriptor.m_sDefaultDisplayUnit = oDescriptor.m_sBaseUnit; oDescriptor.m_eTimeType = eTimeType; oDescriptor.m_eSource = eSource; oDescriptor.m_eAssociation = NM_PebiResultPropertyAssociation_CellData; oDescriptor.m_eRangePolicy = eRangePolicy; return oDescriptor; } } nmPebiResultPropertyDescriptor::nmPebiResultPropertyDescriptor() : m_eTimeType(NM_PebiResultProperty_Static), m_eSource(NM_PebiResultPropertySource_StaticCalculation), m_eAssociation(NM_PebiResultPropertyAssociation_CellData), m_eRangePolicy(NM_PebiResultPropertyRange_CurrentArray) { } QList nmPebiResultPropertyCatalog::descriptors() { // 每次返回值副本,避免 VS2010 下函数静态容器的并发初始化问题。 QList listDescriptors; listDescriptors.append(makeDescriptor( "permeability", "Permeability", "mD", NM_PebiResultProperty_Static, NM_PebiResultPropertySource_StaticCalculation, NM_PebiResultPropertyRange_CurrentArray)); listDescriptors.append(makeDescriptor( "porosity", "Porosity", "", NM_PebiResultProperty_Static, NM_PebiResultPropertySource_StaticCalculation, NM_PebiResultPropertyRange_CurrentArray)); listDescriptors.append(makeDescriptor( "thickness", "Thickness", "m", NM_PebiResultProperty_Static, NM_PebiResultPropertySource_StaticCalculation, NM_PebiResultPropertyRange_CurrentArray)); listDescriptors.append(makeDescriptor( "pressure", "Pressure", "MPa", NM_PebiResultProperty_Dynamic, NM_PebiResultPropertySource_SolverOutput, NM_PebiResultPropertyRange_AllFrames)); return listDescriptors; } bool nmPebiResultPropertyCatalog::findDescriptor( const QString& sPropertyId, nmPebiResultPropertyDescriptor& oDescriptor) { const QList listDescriptors = descriptors(); for(int nIndex = 0; nIndex < listDescriptors.size(); ++nIndex) { if(listDescriptors[nIndex].m_sPropertyId == sPropertyId) { oDescriptor = listDescriptors[nIndex]; return true; } } // 查询失败时清除调用方旧值,避免把上一次命中的描述误当成当前属性。 oDescriptor = nmPebiResultPropertyDescriptor(); return false; } bool nmPebiResultPropertyCatalog::isKnownProperty( const QString& sPropertyId) { nmPebiResultPropertyDescriptor oDescriptor; return findDescriptor(sPropertyId, oDescriptor); }