214 lines
7.3 KiB
C++
214 lines
7.3 KiB
C++
/***********************************************************************************************************************
|
|
*
|
|
* Copyright (c) 2010 - 2025 by Tech Soft 3D, Inc.
|
|
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
|
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
|
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
|
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
|
* scope and manner of such use.
|
|
*
|
|
***********************************************************************************************************************/
|
|
|
|
#include "CascadedAttributeConnector.h"
|
|
#include "Visitors.h"
|
|
|
|
ColorMaterialsConnector::ColorMaterialsConnector(A3DMiscCascadedAttributes* pAttr) : A3DConnector(pAttr)
|
|
{
|
|
A3D_INITIALIZE_DATA(A3DMiscCascadedAttributesData, m_sCascadedAttributeData);
|
|
A3DMiscCascadedAttributesGet(pAttr, &(m_sCascadedAttributeData));
|
|
}
|
|
|
|
ColorMaterialsConnector::~ColorMaterialsConnector()
|
|
{
|
|
A3DMiscCascadedAttributesGet(NULL, &(m_sCascadedAttributeData));
|
|
}
|
|
|
|
|
|
bool ColorMaterialsConnector::IsShow()
|
|
{
|
|
return m_sCascadedAttributeData.m_bShow ? true : false;
|
|
}
|
|
|
|
bool ColorMaterialsConnector::IsRemoved()
|
|
{
|
|
return m_sCascadedAttributeData.m_bRemoved ? true : false;
|
|
}
|
|
|
|
bool ColorMaterialsConnector::IsMaterial()
|
|
{
|
|
//Todo Test it's not a texture
|
|
return m_sCascadedAttributeData.m_sStyle.m_bMaterial ? true : false;
|
|
}
|
|
|
|
bool ColorMaterialsConnector::IsRGBColor()
|
|
{
|
|
return !(IsMaterial());
|
|
}
|
|
|
|
bool ColorMaterialsConnector::IsTranparent()
|
|
{
|
|
return m_sCascadedAttributeData.m_sStyle.m_bIsTransparencyDefined ? true : false;
|
|
}
|
|
|
|
A3DStatus ColorMaterialsConnector::GetRGB(double adRGB[3])//, char& cInheritance = 0)
|
|
{
|
|
A3DStatus iRet = A3D_SUCCESS;
|
|
A3DGraphRgbColorData sA3DGraphRgbColorData;
|
|
A3D_INITIALIZE_DATA(A3DGraphRgbColorData, sA3DGraphRgbColorData);
|
|
if(A3DGlobalGetGraphRgbColorData(m_sCascadedAttributeData.m_sStyle.m_uiRgbColorIndex, &sA3DGraphRgbColorData) == A3D_DEFAULT_COLOR)
|
|
{
|
|
adRGB[0] = 192.0 / 255.0;
|
|
adRGB[1] = 192.0 / 255.0;
|
|
adRGB[2] = 192.0 / 255.0;
|
|
}
|
|
else
|
|
{
|
|
CHECK_RET(iRet);
|
|
adRGB[0] = sA3DGraphRgbColorData.m_dRed;
|
|
adRGB[1] = sA3DGraphRgbColorData.m_dGreen;
|
|
adRGB[2] = sA3DGraphRgbColorData.m_dBlue;
|
|
}
|
|
|
|
return A3D_SUCCESS;
|
|
}
|
|
|
|
A3DStatus ColorMaterialsConnector::Transparency(unsigned char& cTransparenty)
|
|
{
|
|
cTransparenty = m_sCascadedAttributeData.m_sStyle.m_ucTransparency;
|
|
return A3D_SUCCESS;
|
|
}
|
|
|
|
A3DStatus ColorMaterialsConnector::Compare(
|
|
ColorMaterialsConnector const & sOtherCascadedAttribute,
|
|
bool& bSameDispalyParameter,
|
|
bool& bSamebSameDispalyParameterOnFace)
|
|
{
|
|
if(
|
|
sOtherCascadedAttribute.m_sCascadedAttributeData.m_bShow != m_sCascadedAttributeData.m_bShow
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_bRemoved != m_sCascadedAttributeData.m_bRemoved
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_usLayer != m_sCascadedAttributeData.m_usLayer
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_dWidth != m_sCascadedAttributeData.m_sStyle.m_dWidth
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_bVPicture != m_sCascadedAttributeData.m_sStyle.m_bVPicture
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_uiLinePatternIndex != m_sCascadedAttributeData.m_sStyle.m_uiLinePatternIndex
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_bMaterial != m_sCascadedAttributeData.m_sStyle.m_bMaterial
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_uiRgbColorIndex != m_sCascadedAttributeData.m_sStyle.m_uiRgbColorIndex
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_bIsTransparencyDefined != m_sCascadedAttributeData.m_sStyle.m_bIsTransparencyDefined
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_ucTransparency != m_sCascadedAttributeData.m_sStyle.m_ucTransparency
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_bSpecialCulling != m_sCascadedAttributeData.m_sStyle.m_bSpecialCulling
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_bFrontCulling != m_sCascadedAttributeData.m_sStyle.m_bFrontCulling
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_bBackCulling != m_sCascadedAttributeData.m_sStyle.m_bBackCulling
|
|
|| sOtherCascadedAttribute.m_sCascadedAttributeData.m_sStyle.m_bNoLight != m_sCascadedAttributeData.m_sStyle.m_bNoLight)
|
|
|
|
bSameDispalyParameter = bSamebSameDispalyParameterOnFace = false;
|
|
else
|
|
bSameDispalyParameter = true;
|
|
|
|
return A3D_SUCCESS;
|
|
}
|
|
|
|
int ColorMaterialsConnector::GetMaterial(double dEmmisive[4],
|
|
double dDiffuse[4],
|
|
double dAmbient[4],
|
|
double dSpecular[4],
|
|
double& dShininess)
|
|
{
|
|
int iRet = eBAD_Diffuse + eBAD_Emissive + eBAD_Specular + eBAD_Ambient;
|
|
A3DStatus iErr = A3D_SUCCESS;
|
|
A3DGraphMaterialData sMaterialData;
|
|
|
|
memset(dEmmisive, 0, sizeof(double) * 4);
|
|
memset(dDiffuse, 0, sizeof(double) * 4);
|
|
memset(dAmbient, 0, sizeof(double) * 4);
|
|
memset(dSpecular, 0, sizeof(double) * 4);
|
|
dShininess = 0;
|
|
|
|
A3D_INITIALIZE_DATA(A3DGraphMaterialData, sMaterialData);
|
|
iErr = A3DGlobalGetGraphMaterialData(m_sCascadedAttributeData.m_sStyle.m_uiRgbColorIndex, &sMaterialData);
|
|
if(iErr == A3D_SUCCESS)
|
|
{
|
|
iRet = 0;
|
|
A3DGraphRgbColorData sColorData;
|
|
A3D_INITIALIZE_DATA(A3DGraphRgbColorData, sColorData);
|
|
|
|
if(sMaterialData.m_uiDiffuse != A3D_DEFAULT_COLOR_INDEX)
|
|
{
|
|
A3DGlobalGetGraphRgbColorData(sMaterialData.m_uiDiffuse, &sColorData);
|
|
|
|
dDiffuse[0] = sColorData.m_dRed;
|
|
dDiffuse[1] = sColorData.m_dGreen;
|
|
dDiffuse[2] = sColorData.m_dBlue;
|
|
if(m_sCascadedAttributeData.m_sStyle.m_bIsTransparencyDefined)
|
|
{
|
|
dDiffuse[3] = (double)(m_sCascadedAttributeData.m_sStyle.m_ucTransparency) / 255.0;
|
|
}
|
|
else
|
|
{
|
|
dDiffuse[3] = 1.0;
|
|
}
|
|
}
|
|
else
|
|
iRet |= eBAD_Diffuse;
|
|
|
|
if(sMaterialData.m_uiEmissive != A3D_DEFAULT_COLOR_INDEX)
|
|
{
|
|
A3DGlobalGetGraphRgbColorData(sMaterialData.m_uiEmissive, &sColorData);
|
|
dEmmisive[0] = sColorData.m_dRed;
|
|
dEmmisive[1] = sColorData.m_dGreen;
|
|
dEmmisive[2] = sColorData.m_dBlue;
|
|
if(m_sCascadedAttributeData.m_sStyle.m_bIsTransparencyDefined)
|
|
{
|
|
dEmmisive[3] = sMaterialData.m_dEmissiveAlpha;
|
|
}
|
|
else
|
|
{
|
|
dEmmisive[3] = 1.0;
|
|
}
|
|
}
|
|
else
|
|
iRet |= eBAD_Emissive;
|
|
|
|
|
|
dShininess = sMaterialData.m_dShininess;
|
|
|
|
if(sMaterialData.m_uiSpecular != A3D_DEFAULT_COLOR_INDEX)
|
|
{
|
|
A3DGlobalGetGraphRgbColorData(sMaterialData.m_uiSpecular, &sColorData);
|
|
|
|
dSpecular[0] = sColorData.m_dRed;
|
|
dSpecular[1] = sColorData.m_dGreen;
|
|
dSpecular[2] = sColorData.m_dBlue;
|
|
if(m_sCascadedAttributeData.m_sStyle.m_bIsTransparencyDefined)
|
|
{
|
|
dSpecular[3] = sMaterialData.m_dSpecularAlpha;
|
|
}
|
|
else
|
|
{
|
|
dSpecular[3] = 1.0;
|
|
}
|
|
}
|
|
else
|
|
iRet |= eBAD_Specular;
|
|
|
|
if(sMaterialData.m_uiAmbient != A3D_DEFAULT_COLOR_INDEX)
|
|
{
|
|
A3DGlobalGetGraphRgbColorData(sMaterialData.m_uiAmbient, &sColorData);
|
|
|
|
dAmbient[0] = sColorData.m_dRed;
|
|
dAmbient[1] = sColorData.m_dGreen;
|
|
dAmbient[2] = sColorData.m_dBlue;
|
|
if(m_sCascadedAttributeData.m_sStyle.m_bIsTransparencyDefined)
|
|
{
|
|
dAmbient[3] = sMaterialData.m_dAmbientAlpha;
|
|
}
|
|
else
|
|
{
|
|
dAmbient[3] = 1.0;
|
|
}
|
|
}
|
|
else
|
|
iRet |= eBAD_Ambient;
|
|
}
|
|
return iRet;
|
|
}
|
|
|