/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a license // agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// #pragma once #define STL_USING_MAP #include "OdaSTL.h" #define DEFINE_ENUM_CLASS(name, ...) \ enum class name : OdInt32{ \ __VA_ARGS__(ENUM_ENTRY) \ }; #define ENUM_ENTRY(Name, Value) Name = Value, #define OD_BUILTIN_ENUM_ENTRY(NAME, VALUE, ...) NAME = VALUE, enum class XmlVariableTypeEnum { eNone = 0, eString = 1, eURL, eReference, eBoolean, eInteger32, eTextureURI, eFloat, eChoice, eUuid, eColor, eDistance, eVector3d }; enum class ConnectedAssetsEnum { eNone = 0, eSingle = 1, eMultiple }; enum class UnitEnum { eNone = 0, eInch = 1, eMilliMeter, eCentiMeter, eLux_I, eCandelasPerSquareMeter, eKilogramPerCubicMeter, eKilopascal, eJoulePerGramCelsius, eWattPerMeterKelvin, eMicrometerPerMeterCelsius, eInvCelsius, ePascal, eDegree, eOhmMeter, eNanogramPerPascalSecondSquareMeter, eCentipoise, eJoulePerGram, eUnitless }; enum class AssetType { kNone = -1, kPhysicalmaterial = 0, kGraphics, kMaterialappearance, kStructural, kThermal, kSceneeffect, kLightappearance, kPostprocessing, kEnvironment, kSwatchscene, kFatigue, kNonlinear, kTexture, kUnknown, kLast = kUnknown }; AssetType assetTypeSring2Enum(const OdString& type); #define OD_APPEARANCE_ASSETS(PARAM_DEF, ...) \ PARAM_DEF(DecalAppearance, -13, "DecalAppearance") \ PARAM_DEF(UnifiedBitmap, -12) \ PARAM_DEF(Checker, -11) \ PARAM_DEF(Gradient, -10) \ PARAM_DEF(Marble, -9) \ PARAM_DEF(Noise, -8) \ PARAM_DEF(Speckle, -7) \ PARAM_DEF(Tiles, -6) \ PARAM_DEF(Waves, -5) \ PARAM_DEF(Wood, -4) \ PARAM_DEF(ByName, -3) \ PARAM_DEF(ByCategory, -2) \ PARAM_DEF(Undefined, -1) \ PARAM_DEF(Ceramic, 0) \ PARAM_DEF(Concrete, 1) \ PARAM_DEF(Generic, 2) \ PARAM_DEF(Glazing, 3) \ PARAM_DEF(Hardwood, 4) \ PARAM_DEF(MasonryCMU, 5) \ PARAM_DEF(Metal, 6) \ PARAM_DEF(MetallicPaint, 7) \ PARAM_DEF(Mirror, 8) \ PARAM_DEF(PlasticVinyl, 9) \ PARAM_DEF(SolidGlass, 10) \ PARAM_DEF(Stone, 11) \ PARAM_DEF(WallPaint, 12) \ PARAM_DEF(Water, 13) \ PARAM_DEF(Generic_026, 14) \ #define WATERCOLORID(PARAM_DEF, ...) \ PARAM_DEF(SwimmingPool, 0) \ PARAM_DEF(ReflectingPool, 1) \ PARAM_DEF(StreamRiver, 2) \ PARAM_DEF(PondLake, 3) \ PARAM_DEF(SeaOcean, 4) #define GLASSCOLOR(PARAM_DEF, ...) \ PARAM_DEF(Clear, 0) \ PARAM_DEF(Green, 1) \ PARAM_DEF(Gray, 2) \ PARAM_DEF(Blue, 3) \ PARAM_DEF(BlueGreen, 4) \ PARAM_DEF(Bronze, 5) \ PARAM_DEF(Custom, 6) #define CONCRETEFINISH_TYPE(PARAM_DEF, ...) \ PARAM_DEF(BroomStraight, 0) \ PARAM_DEF(BroomCurved, 1) \ PARAM_DEF(Smooth, 2) \ PARAM_DEF(Polished, 3) \ PARAM_DEF(Custom, 4) #define HARDWOODRELIEF_TYPE(PARAM_DEF, ...) \ PARAM_DEF(None, 0) \ PARAM_DEF(BasedOnWoodGrain, 1) \ PARAM_DEF(Custom, 2) #define METALRELIEFTYPE(PARAM_DEF, ...) \ PARAM_DEF(None, 0) \ PARAM_DEF(Knurl, 1) \ PARAM_DEF(DiamondPlate, 2) \ PARAM_DEF(CheckerPlate, 3) \ PARAM_DEF(Custom, 4) #define SOLIDGLASS_PATTERNTYPE(PARAM_DEF, ...) \ PARAM_DEF(None, 0) \ PARAM_DEF(Rippled, 1) \ PARAM_DEF(Wavy, 2) \ PARAM_DEF(Custom, 3) #define CERAMICTYPE(PARAM_DEF, ...) \ PARAM_DEF(Ceramic, 0) \ PARAM_DEF(Porcelain, 1) #define CERAMICFINISH_TYPE(PARAM_DEF, ...) \ PARAM_DEF(HighGloss, 0) \ PARAM_DEF(Satin, 1) \ PARAM_DEF(Matte, 2) #define CERAMICWAVESTYPE(PARAM_DEF, ...) \ PARAM_DEF(None, 0) \ PARAM_DEF(Wavy, 1) \ PARAM_DEF(Custom, 2) #define CONCRETESEALANT_TYPE(PARAM_DEF, ...) \ PARAM_DEF(None, 0) \ PARAM_DEF(Epoxy, 1) \ PARAM_DEF(Acrylic, 2) #define CONCRETEWEATHERING_TYPE(PARAM_DEF, ...) \ PARAM_DEF(None, 0) \ PARAM_DEF(Automatic, 1) \ PARAM_DEF(Custom, 2) #define MASONRYFINISHID(PARAM_DEF, ...) \ PARAM_DEF(Glossy, 0) \ PARAM_DEF(Matte, 1) \ PARAM_DEF(Unfinished, 2) #define MASONRYTYPE(PARAM_DEF, ...) \ PARAM_DEF(CMU, 0) \ PARAM_DEF(Masonry, 1) #define PLASTICTYPE(PARAM_DEF, ...) \ PARAM_DEF(Solid, 0) \ PARAM_DEF(Transparent, 1) \ PARAM_DEF(Vinyl, 2) #define METALLICPAINT_PEARL_TYPE(PARAM_DEF, ...) \ PARAM_DEF(None, 0) \ PARAM_DEF(Chromatic, 1) \ PARAM_DEF(SecondColor, 2) #define METALLICPAINT_TOPCOAT_TYPE(PARAM_DEF, ...) \ PARAM_DEF(CarPaint, 0) \ PARAM_DEF(Chrome, 1) \ PARAM_DEF(Matte, 2) \ PARAM_DEF(Custom, 3) #define METALLICPAINT_TOPCOAT_FINISH_TYPE(PARAM_DEF, ...) \ PARAM_DEF(Smooth, 0) \ PARAM_DEF(OrangePeel, 1) #define PLASTICFINISHID(PARAM_DEF, ...) \ PARAM_DEF(Polished, 0) \ PARAM_DEF(Glossy, 1) \ PARAM_DEF(Matte, 2) #define METALPERFORATIONTYPE(PARAM_DEF, ...) \ PARAM_DEF(StaggeredCircles, 1) \ PARAM_DEF(StraightCircles, 2) \ PARAM_DEF(Squares, 3) \ PARAM_DEF(Grecian, 4) \ PARAM_DEF(Cloverleaf, 5) \ PARAM_DEF(Hexagon, 6) \ PARAM_DEF(Custom, 7) #define METALTYPE(PARAM_DEF, ...) \ PARAM_DEF(Aluminium, 0) \ PARAM_DEF(AnodizedAluminium, 1) \ PARAM_DEF(Chrome, 2) \ PARAM_DEF(Copper, 3) \ PARAM_DEF(Brass, 4) \ PARAM_DEF(Bronze, 5) \ PARAM_DEF(StainlessSteel, 6) \ PARAM_DEF(Zinc, 7) #define METALFINISHID(PARAM_DEF, ...) \ PARAM_DEF(Polished, 0) \ PARAM_DEF(SemiPolished, 1) \ PARAM_DEF(Satin, 2) \ PARAM_DEF(Brushed, 3) #define HARDWOODUSE_TYPE(PARAM_DEF, ...) \ PARAM_DEF(Flooring, 0) \ PARAM_DEF(Furniture, 1) #define STONEFINISH_TYPE(PARAM_DEF, ...) \ PARAM_DEF(Polished, 0) \ PARAM_DEF(Glossy, 1) \ PARAM_DEF(Matte, 2) \ PARAM_DEF(Unfinished, 3) #define HARDWOODFINISH_TYPE(PARAM_DEF, ...) \ PARAM_DEF(GlossyVarnish, 0) \ PARAM_DEF(SemiglossVarnish, 1) \ PARAM_DEF(SatinVarnish, 2) \ PARAM_DEF(Unfinished, 3) #define WALLPAINTFINISHID(PARAM_DEF, ...) \ PARAM_DEF(FlatMatte, 0) \ PARAM_DEF(EggShell, 1) \ PARAM_DEF(Platinum, 2) \ PARAM_DEF(Pearl, 3) \ PARAM_DEF(Semigloss, 4) \ PARAM_DEF(Gloss, 5) #define WALLPAINTAPPLICATIONID(PARAM_DEF, ...) \ PARAM_DEF(Roller, 0) \ PARAM_DEF(Brush, 1) \ PARAM_DEF(Spray, 2) #define WATERCOLORTYPE(PARAM_DEF, ...) \ PARAM_DEF(Tropical, 0) \ PARAM_DEF(AlgaeGreen, 1) \ PARAM_DEF(MurkyBrown, 2) \ PARAM_DEF(GenericReflectingPool, 3) \ PARAM_DEF(GenericStreamRiver, 4) \ PARAM_DEF(GenericPondLake, 5) \ PARAM_DEF(GenericSeaOcean, 6) \ PARAM_DEF(Custom, 7) #define STONERELIEFTYPE(PARAM_DEF, ...) \ PARAM_DEF(None, 0) \ PARAM_DEF(PolishedGranite, 1) \ PARAM_DEF(StoneWall, 2) \ PARAM_DEF(GlossyMarble, 3) \ PARAM_DEF(Custom, 4) #define TRANSPARENCYREFRACTIONTYPE(PARAM_DEF, ...) \ PARAM_DEF(Air, 1) \ PARAM_DEF(Water, 2) \ PARAM_DEF(Alcohol, 3) \ PARAM_DEF(Quartz, 4) \ PARAM_DEF(Glass, 5) \ PARAM_DEF(Diamond, 6) \ /* Colors */ #define GLASSCOLOR_DEF(PARAM_DEF, ...) \ PARAM_DEF(Clear, 0xDAE3E0) \ PARAM_DEF(Green, 0xACCBBB) \ PARAM_DEF(Gray, 0x737278) \ PARAM_DEF(Blue, 0x5D83A6) \ PARAM_DEF(BlueGreen, 0xF9FAF8) \ PARAM_DEF(Bronze, 0x948377) \ PARAM_DEF(Custom, 0x999999) #define METALTYPE_DEF(PARAM_DEF, ...) \ PARAM_DEF(Aluminium, 0xF4F4F4) \ PARAM_DEF(AnodizedAluminium, 0x999999) \ PARAM_DEF(Chrome, 0x0F0F0F) \ PARAM_DEF(Copper, 0xBB502E) \ PARAM_DEF(Brass, 0xCA9A3A) \ PARAM_DEF(Bronze, 0x694D3A) \ PARAM_DEF(StainlessSteel, 0xBDBBB9) \ PARAM_DEF(Zinc, 0xA4ACB0) namespace OdMaterial { enum class PredefinedAppearanceAsset { OD_APPEARANCE_ASSETS(OD_BUILTIN_ENUM_ENTRY) }; DEFINE_ENUM_CLASS(StoneReliefType, STONERELIEFTYPE) DEFINE_ENUM_CLASS(WaterColorType, WATERCOLORTYPE) DEFINE_ENUM_CLASS(WallPaintApplicationType, WALLPAINTAPPLICATIONID) DEFINE_ENUM_CLASS(WallPaintFinishType, WALLPAINTFINISHID) DEFINE_ENUM_CLASS(HardwoodFinishType, HARDWOODFINISH_TYPE) DEFINE_ENUM_CLASS(StoneFinishType, STONEFINISH_TYPE) DEFINE_ENUM_CLASS(HardwoodUseType, HARDWOODUSE_TYPE) DEFINE_ENUM_CLASS(MetalFinishType, METALFINISHID) DEFINE_ENUM_CLASS(MetalType, METALTYPE) DEFINE_ENUM_CLASS(MetalPerforationType, METALPERFORATIONTYPE) DEFINE_ENUM_CLASS(PlasticFinishType, PLASTICFINISHID) DEFINE_ENUM_CLASS(MetallicPaintTopCoatFinishType, METALLICPAINT_TOPCOAT_FINISH_TYPE) DEFINE_ENUM_CLASS(MetallicPaintTopCoatType, METALLICPAINT_TOPCOAT_TYPE) DEFINE_ENUM_CLASS(MetallicPaintPearlType, METALLICPAINT_PEARL_TYPE) DEFINE_ENUM_CLASS(PlasticType, PLASTICTYPE) DEFINE_ENUM_CLASS(MasonryType, MASONRYTYPE) DEFINE_ENUM_CLASS(MasonryFinishType, MASONRYFINISHID) DEFINE_ENUM_CLASS(ConcreteWeatheringType, CONCRETEWEATHERING_TYPE) DEFINE_ENUM_CLASS(WaterType, WATERCOLORID) DEFINE_ENUM_CLASS(GlassColor, GLASSCOLOR) DEFINE_ENUM_CLASS(ConcreteFinishType, CONCRETEFINISH_TYPE) DEFINE_ENUM_CLASS(HardwoodReliefType, HARDWOODRELIEF_TYPE) DEFINE_ENUM_CLASS(MetalReliefType, METALRELIEFTYPE) DEFINE_ENUM_CLASS(SolidGlassPatternType, SOLIDGLASS_PATTERNTYPE) DEFINE_ENUM_CLASS(CeramicType, CERAMICTYPE) DEFINE_ENUM_CLASS(CeramicFinishType, CERAMICFINISH_TYPE) DEFINE_ENUM_CLASS(CeramicReliefType, CERAMICWAVESTYPE) DEFINE_ENUM_CLASS(ConcreteSealantType, CONCRETESEALANT_TYPE) DEFINE_ENUM_CLASS(TransparencyRefraction, TRANSPARENCYREFRACTIONTYPE) #define OD_BUID_SWITCH_ENUM(_Enum,...) \ OdInt32 value(_Enum color); OD_BUID_SWITCH_ENUM(GlassColor, GLASSCOLOR_DEF) OD_BUID_SWITCH_ENUM(MetalType, METALTYPE_DEF) static const std::map odTransparencyRefractionMap{ {TransparencyRefraction::Air, 1.}, {TransparencyRefraction::Water, 1.33}, {TransparencyRefraction::Alcohol, 1.36}, {TransparencyRefraction::Quartz, 1.46}, {TransparencyRefraction::Glass, 1.52}, {TransparencyRefraction::Diamond, 2.30} }; }; #undef DEFINE_ENUM_CLASS #undef OD_BUID_SWITCH_ENUM