File indexing completed on 2026-09-18 09:20:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef _Graphic3d_MaterialAspect_HeaderFile
0017 #define _Graphic3d_MaterialAspect_HeaderFile
0018
0019 #include <Graphic3d_BSDF.hxx>
0020 #include <Graphic3d_PBRMaterial.hxx>
0021 #include <Graphic3d_NameOfMaterial.hxx>
0022 #include <Graphic3d_TypeOfMaterial.hxx>
0023 #include <Graphic3d_TypeOfReflection.hxx>
0024 #include <TCollection_AsciiString.hxx>
0025 #include <Quantity_Color.hxx>
0026
0027
0028
0029
0030
0031
0032 class Graphic3d_MaterialAspect
0033 {
0034 public:
0035 DEFINE_STANDARD_ALLOC
0036
0037
0038 static int NumberOfMaterials() { return Graphic3d_NameOfMaterial_DEFAULT; }
0039
0040
0041
0042 Standard_EXPORT static const char* MaterialName(const int theRank);
0043
0044
0045
0046 Standard_EXPORT static Graphic3d_TypeOfMaterial MaterialType(const int theRank);
0047
0048
0049
0050
0051
0052 Standard_EXPORT static bool MaterialFromName(const char* const theName,
0053 Graphic3d_NameOfMaterial& theMat);
0054
0055
0056
0057 static Graphic3d_NameOfMaterial MaterialFromName(const char* const theName)
0058 {
0059 Graphic3d_NameOfMaterial aMat = Graphic3d_NameOfMaterial_DEFAULT;
0060 MaterialFromName(theName, aMat);
0061 return aMat;
0062 }
0063
0064 public:
0065
0066 Standard_EXPORT Graphic3d_MaterialAspect();
0067
0068
0069 Standard_EXPORT Graphic3d_MaterialAspect(const Graphic3d_NameOfMaterial theName);
0070
0071
0072 Graphic3d_NameOfMaterial Name() const { return myMaterialName; }
0073
0074
0075
0076 Graphic3d_NameOfMaterial RequestedName() const { return myRequestedMaterialName; }
0077
0078
0079
0080
0081
0082 const TCollection_AsciiString& StringName() const { return myStringName; }
0083
0084
0085 const char* MaterialName() const { return myStringName.ToCString(); }
0086
0087
0088
0089 void SetMaterialName(const TCollection_AsciiString& theName)
0090 {
0091
0092
0093 myMaterialName = Graphic3d_NameOfMaterial_UserDefined;
0094 myStringName = theName;
0095 }
0096
0097
0098
0099
0100 void Reset() { init(myRequestedMaterialName); }
0101
0102
0103
0104
0105 const Quantity_Color& Color() const { return myColors[Graphic3d_TOR_DIFFUSE]; }
0106
0107
0108
0109
0110 Standard_EXPORT void SetColor(const Quantity_Color& theColor);
0111
0112
0113 float Transparency() const { return myTransparencyCoef; }
0114
0115
0116 float Alpha() const { return 1.0f - myTransparencyCoef; }
0117
0118
0119
0120
0121
0122
0123
0124
0125 Standard_EXPORT void SetTransparency(const float theValue);
0126
0127
0128
0129 void SetAlpha(float theValue) { SetTransparency(1.0f - theValue); }
0130
0131
0132 const Quantity_Color& AmbientColor() const { return myColors[Graphic3d_TOR_AMBIENT]; }
0133
0134
0135 Standard_EXPORT void SetAmbientColor(const Quantity_Color& theColor);
0136
0137
0138 const Quantity_Color& DiffuseColor() const { return myColors[Graphic3d_TOR_DIFFUSE]; }
0139
0140
0141 Standard_EXPORT void SetDiffuseColor(const Quantity_Color& theColor);
0142
0143
0144 const Quantity_Color& SpecularColor() const { return myColors[Graphic3d_TOR_SPECULAR]; }
0145
0146
0147 Standard_EXPORT void SetSpecularColor(const Quantity_Color& theColor);
0148
0149
0150 const Quantity_Color& EmissiveColor() const { return myColors[Graphic3d_TOR_EMISSION]; }
0151
0152
0153 Standard_EXPORT void SetEmissiveColor(const Quantity_Color& theColor);
0154
0155
0156 float Shininess() const { return myShininess; }
0157
0158
0159
0160
0161 Standard_EXPORT void SetShininess(const float theValue);
0162
0163
0164
0165 Standard_EXPORT void IncreaseShine(const float theDelta);
0166
0167
0168 float RefractionIndex() const { return myRefractionIndex; }
0169
0170
0171
0172 Standard_EXPORT void SetRefractionIndex(const float theValue);
0173
0174
0175 const Graphic3d_BSDF& BSDF() const { return myBSDF; }
0176
0177
0178 void SetBSDF(const Graphic3d_BSDF& theBSDF) { myBSDF = theBSDF; }
0179
0180
0181 const Graphic3d_PBRMaterial& PBRMaterial() const { return myPBRMaterial; }
0182
0183
0184 void SetPBRMaterial(const Graphic3d_PBRMaterial& thePBRMaterial)
0185 {
0186 myPBRMaterial = thePBRMaterial;
0187 }
0188
0189
0190 bool ReflectionMode(const Graphic3d_TypeOfReflection theType) const
0191 {
0192 return !myColors[theType].IsEqual(Quantity_NOC_BLACK);
0193 }
0194
0195
0196 Graphic3d_TypeOfMaterial MaterialType() const { return myMaterialType; }
0197
0198
0199 bool MaterialType(const Graphic3d_TypeOfMaterial theType) const
0200 {
0201 return myMaterialType == theType;
0202 }
0203
0204
0205 Standard_EXPORT void SetMaterialType(const Graphic3d_TypeOfMaterial theType);
0206
0207
0208 bool IsDifferent(const Graphic3d_MaterialAspect& theOther) const { return !IsEqual(theOther); }
0209
0210
0211 bool operator!=(const Graphic3d_MaterialAspect& theOther) const { return IsDifferent(theOther); }
0212
0213
0214 bool IsEqual(const Graphic3d_MaterialAspect& theOther) const
0215 {
0216 return myTransparencyCoef == theOther.myTransparencyCoef
0217 && myRefractionIndex == theOther.myRefractionIndex && myBSDF == theOther.myBSDF
0218 && myPBRMaterial == theOther.myPBRMaterial && myShininess == theOther.myShininess
0219 && myColors[Graphic3d_TOR_AMBIENT] == theOther.myColors[Graphic3d_TOR_AMBIENT]
0220 && myColors[Graphic3d_TOR_DIFFUSE] == theOther.myColors[Graphic3d_TOR_DIFFUSE]
0221 && myColors[Graphic3d_TOR_SPECULAR] == theOther.myColors[Graphic3d_TOR_SPECULAR]
0222 && myColors[Graphic3d_TOR_EMISSION] == theOther.myColors[Graphic3d_TOR_EMISSION];
0223 }
0224
0225
0226 bool operator==(const Graphic3d_MaterialAspect& theOther) const { return IsEqual(theOther); }
0227
0228
0229 Standard_EXPORT void DumpJson(Standard_OStream& theOStream, int theDepth = -1) const;
0230
0231 public:
0232
0233 Standard_DEPRECATED("Deprecated method, specific material component should be zerroed "
0234 "instead")
0235 void SetReflectionModeOff(const Graphic3d_TypeOfReflection theType)
0236 {
0237 if (!ReflectionMode(theType))
0238 {
0239 return;
0240 }
0241
0242 switch (theType)
0243 {
0244 case Graphic3d_TOR_AMBIENT:
0245 SetAmbientColor(Quantity_NOC_BLACK);
0246 break;
0247 case Graphic3d_TOR_DIFFUSE:
0248 SetDiffuseColor(Quantity_NOC_BLACK);
0249 break;
0250 case Graphic3d_TOR_SPECULAR:
0251 SetSpecularColor(Quantity_NOC_BLACK);
0252 break;
0253 case Graphic3d_TOR_EMISSION:
0254 SetEmissiveColor(Quantity_NOC_BLACK);
0255 break;
0256 }
0257 }
0258
0259 private:
0260
0261 Standard_EXPORT void init(const Graphic3d_NameOfMaterial theName);
0262
0263
0264 void setUserMaterial()
0265 {
0266
0267
0268 if (myMaterialName != Graphic3d_NameOfMaterial_UserDefined)
0269 {
0270 myMaterialName = Graphic3d_NameOfMaterial_UserDefined;
0271 myStringName = "UserDefined";
0272 }
0273 }
0274
0275 private:
0276 Graphic3d_BSDF myBSDF;
0277 Graphic3d_PBRMaterial myPBRMaterial;
0278 TCollection_AsciiString myStringName;
0279 Quantity_Color myColors[Graphic3d_TypeOfReflection_NB];
0280 float myTransparencyCoef;
0281 float myRefractionIndex;
0282 float myShininess;
0283
0284 Graphic3d_TypeOfMaterial myMaterialType;
0285 Graphic3d_NameOfMaterial myMaterialName;
0286 Graphic3d_NameOfMaterial myRequestedMaterialName;
0287 };
0288
0289 #endif