3D-Viewer: Parameterize body board transparency
Fix/workarround raytracing render issues related with refraction
This commit is contained in:
parent
0302fe5570
commit
40d5746df6
|
@ -195,13 +195,6 @@ bool BOARD_ADAPTER::Is3DLayerEnabled( PCB_LAYER_ID aLayer ) const
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// the layer is an internal copper layer, used the visibility
|
// the layer is an internal copper layer, used the visibility
|
||||||
if( GetFlag( FL_SHOW_BOARD_BODY ) && ( m_render_engine == RENDER_ENGINE::OPENGL_LEGACY ) )
|
|
||||||
{
|
|
||||||
// Do not render internal layers if it is overlap with the board
|
|
||||||
// (on OpenGL render)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return m_board->IsLayerVisible( aLayer );
|
return m_board->IsLayerVisible( aLayer );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -256,8 +256,6 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
|
||||||
97.0f / 255.0f,
|
97.0f / 255.0f,
|
||||||
47.0f / 255.0f );
|
47.0f / 255.0f );
|
||||||
|
|
||||||
m_materials.m_EpoxyBoard.m_Diffuse = m_boardAdapter.m_BoardBodyColor;
|
|
||||||
|
|
||||||
m_materials.m_EpoxyBoard.m_Specular = SFVEC3F( 18.0f / 255.0f,
|
m_materials.m_EpoxyBoard.m_Specular = SFVEC3F( 18.0f / 255.0f,
|
||||||
3.0f / 255.0f,
|
3.0f / 255.0f,
|
||||||
20.0f / 255.0f );
|
20.0f / 255.0f );
|
||||||
|
@ -303,7 +301,6 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
|
||||||
|
|
||||||
// Epoxy material
|
// Epoxy material
|
||||||
m_materials.m_EpoxyBoard.m_Ambient = matAmbientColor;
|
m_materials.m_EpoxyBoard.m_Ambient = matAmbientColor;
|
||||||
m_materials.m_EpoxyBoard.m_Diffuse = m_boardAdapter.m_BoardBodyColor;
|
|
||||||
m_materials.m_EpoxyBoard.m_Specular = matSpecularColor;
|
m_materials.m_EpoxyBoard.m_Specular = matSpecularColor;
|
||||||
m_materials.m_EpoxyBoard.m_Shininess = matShininess;
|
m_materials.m_EpoxyBoard.m_Shininess = matShininess;
|
||||||
m_materials.m_EpoxyBoard.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
m_materials.m_EpoxyBoard.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
|
||||||
|
@ -500,6 +497,38 @@ void init_lights(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void C3D_RENDER_OGL_LEGACY::render_board_body( bool aSkipRenderHoles )
|
||||||
|
{
|
||||||
|
if( m_ogl_disp_list_board )
|
||||||
|
{
|
||||||
|
m_ogl_disp_list_board->ApplyScalePosition( -m_boardAdapter.GetEpoxyThickness3DU() / 2.0f,
|
||||||
|
m_boardAdapter.GetEpoxyThickness3DU() );
|
||||||
|
|
||||||
|
|
||||||
|
m_materials.m_EpoxyBoard.m_Diffuse = m_boardAdapter.m_BoardBodyColor;
|
||||||
|
m_materials.m_EpoxyBoard.m_Transparency = m_boardAdapter.m_BoardBodyColor.a;
|
||||||
|
|
||||||
|
OGL_SetMaterial( m_materials.m_EpoxyBoard, 1.0f );
|
||||||
|
|
||||||
|
m_ogl_disp_list_board->SetItIsTransparent( true );
|
||||||
|
|
||||||
|
if( (m_ogl_disp_list_through_holes_outer_with_npth) && (!aSkipRenderHoles) )
|
||||||
|
{
|
||||||
|
m_ogl_disp_list_through_holes_outer_with_npth->ApplyScalePosition(
|
||||||
|
-m_boardAdapter.GetEpoxyThickness3DU() / 2.0f,
|
||||||
|
m_boardAdapter.GetEpoxyThickness3DU() );
|
||||||
|
|
||||||
|
m_ogl_disp_list_board->DrawAllCameraCulledSubtractLayer(
|
||||||
|
m_ogl_disp_list_through_holes_outer_with_npth,
|
||||||
|
NULL );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_ogl_disp_list_board->DrawAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool C3D_RENDER_OGL_LEGACY::Redraw(
|
bool C3D_RENDER_OGL_LEGACY::Redraw(
|
||||||
bool aIsMoving, REPORTER* aStatusReporter, REPORTER* aWarningReporter )
|
bool aIsMoving, REPORTER* aStatusReporter, REPORTER* aWarningReporter )
|
||||||
{
|
{
|
||||||
|
@ -625,37 +654,6 @@ bool C3D_RENDER_OGL_LEGACY::Redraw(
|
||||||
const bool skipRenderVias = aIsMoving &&
|
const bool skipRenderVias = aIsMoving &&
|
||||||
m_boardAdapter.GetFlag( FL_RENDER_OPENGL_VIAS_DISABLE_ON_MOVE );
|
m_boardAdapter.GetFlag( FL_RENDER_OPENGL_VIAS_DISABLE_ON_MOVE );
|
||||||
|
|
||||||
// Display board body
|
|
||||||
// /////////////////////////////////////////////////////////////////////////
|
|
||||||
if( m_boardAdapter.GetFlag( FL_SHOW_BOARD_BODY ) )
|
|
||||||
{
|
|
||||||
if( m_ogl_disp_list_board )
|
|
||||||
{
|
|
||||||
m_ogl_disp_list_board->ApplyScalePosition( -m_boardAdapter.GetEpoxyThickness3DU() / 2.0f,
|
|
||||||
m_boardAdapter.GetEpoxyThickness3DU() );
|
|
||||||
|
|
||||||
OGL_SetMaterial( m_materials.m_EpoxyBoard, 1.0f );
|
|
||||||
|
|
||||||
m_ogl_disp_list_board->SetItIsTransparent( false );
|
|
||||||
|
|
||||||
if( (m_ogl_disp_list_through_holes_outer_with_npth) && (!skipRenderHoles) )
|
|
||||||
{
|
|
||||||
m_ogl_disp_list_through_holes_outer_with_npth->ApplyScalePosition(
|
|
||||||
-m_boardAdapter.GetEpoxyThickness3DU() / 2.0f,
|
|
||||||
m_boardAdapter.GetEpoxyThickness3DU() );
|
|
||||||
|
|
||||||
m_ogl_disp_list_board->DrawAllCameraCulledSubtractLayer(
|
|
||||||
m_ogl_disp_list_through_holes_outer_with_npth,
|
|
||||||
NULL );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_ogl_disp_list_board->DrawAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if( m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) )
|
if( m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) )
|
||||||
{
|
{
|
||||||
// Draw vias and pad holes with copper material
|
// Draw vias and pad holes with copper material
|
||||||
|
@ -683,15 +681,16 @@ bool C3D_RENDER_OGL_LEGACY::Redraw(
|
||||||
ii != m_ogl_disp_lists_layers.end();
|
ii != m_ogl_disp_lists_layers.end();
|
||||||
++ii )
|
++ii )
|
||||||
{
|
{
|
||||||
|
|
||||||
const PCB_LAYER_ID layer_id = (PCB_LAYER_ID)(ii->first);
|
const PCB_LAYER_ID layer_id = (PCB_LAYER_ID)(ii->first);
|
||||||
|
|
||||||
// Mask kayers are not processed here because they are a special case
|
// Mask layers are not processed here because they are a special case
|
||||||
if( (layer_id == B_Mask) || (layer_id == F_Mask) )
|
if( (layer_id == B_Mask) || (layer_id == F_Mask) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Do not show inner layers when it is displaying the board
|
// Do not show inner layers when it is displaying the board
|
||||||
if( m_boardAdapter.GetFlag( FL_SHOW_BOARD_BODY ) )
|
// and board body is full opaque
|
||||||
|
if( m_boardAdapter.GetFlag( FL_SHOW_BOARD_BODY ) &&
|
||||||
|
( m_boardAdapter.m_BoardBodyColor.a < 0.01f ) )
|
||||||
{
|
{
|
||||||
if( (layer_id > F_Cu) && (layer_id < B_Cu) )
|
if( (layer_id > F_Cu) && (layer_id < B_Cu) )
|
||||||
continue;
|
continue;
|
||||||
|
@ -802,12 +801,17 @@ bool C3D_RENDER_OGL_LEGACY::Redraw(
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Render 3D Models (Non-transparent)
|
// Render 3D Models (Non-transparent)
|
||||||
// /////////////////////////////////////////////////////////////////////////
|
// /////////////////////////////////////////////////////////////////////////
|
||||||
render_3D_models( false, false );
|
render_3D_models( false, false );
|
||||||
render_3D_models( true, false );
|
render_3D_models( true, false );
|
||||||
|
|
||||||
|
// Display board body
|
||||||
|
// /////////////////////////////////////////////////////////////////////////
|
||||||
|
if( m_boardAdapter.GetFlag( FL_SHOW_BOARD_BODY ) )
|
||||||
|
{
|
||||||
|
render_board_body( skipRenderHoles );
|
||||||
|
}
|
||||||
|
|
||||||
// Display transparent mask layers
|
// Display transparent mask layers
|
||||||
// /////////////////////////////////////////////////////////////////////////
|
// /////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -150,6 +150,8 @@ private:
|
||||||
bool aDrawMiddleSegments,
|
bool aDrawMiddleSegments,
|
||||||
bool aSkipRenderHoles );
|
bool aSkipRenderHoles );
|
||||||
|
|
||||||
|
void render_board_body( bool aSkipRenderHoles );
|
||||||
|
|
||||||
void get_layer_z_pos( PCB_LAYER_ID aLayerID,
|
void get_layer_z_pos( PCB_LAYER_ID aLayerID,
|
||||||
float &aOutZtop,
|
float &aOutZtop,
|
||||||
float &aOutZbot ) const;
|
float &aOutZbot ) const;
|
||||||
|
|
|
@ -168,7 +168,7 @@ void C3D_RENDER_RAYTRACING::setupMaterials()
|
||||||
8.0f / 255.0f,
|
8.0f / 255.0f,
|
||||||
10.0f / 255.0f ) ), // specular
|
10.0f / 255.0f ) ), // specular
|
||||||
0.1f * 128.0f, // shiness
|
0.1f * 128.0f, // shiness
|
||||||
0.10f, // transparency
|
m_boardAdapter.m_BoardBodyColor.a, // transparency
|
||||||
0.0f ); // reflection
|
0.0f ); // reflection
|
||||||
|
|
||||||
m_materials.m_EpoxyBoard.SetAbsorvance( 10.0f );
|
m_materials.m_EpoxyBoard.SetAbsorvance( 10.0f );
|
||||||
|
@ -364,6 +364,7 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER* aStatusReporter, REPORTER* aWarnin
|
||||||
&m_materials.m_EpoxyBoard,
|
&m_materials.m_EpoxyBoard,
|
||||||
g_epoxyColor );
|
g_epoxyColor );
|
||||||
#else
|
#else
|
||||||
|
|
||||||
CLAYERITEM *objPtr = new CLAYERITEM( object2d_A,
|
CLAYERITEM *objPtr = new CLAYERITEM( object2d_A,
|
||||||
m_boardAdapter.GetLayerBottomZpos3DU( F_Cu ),
|
m_boardAdapter.GetLayerBottomZpos3DU( F_Cu ),
|
||||||
m_boardAdapter.GetLayerBottomZpos3DU( B_Cu ) );
|
m_boardAdapter.GetLayerBottomZpos3DU( B_Cu ) );
|
||||||
|
@ -375,6 +376,7 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER* aStatusReporter, REPORTER* aWarnin
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
CITEMLAYERCSG2D *itemCSG2d = new CITEMLAYERCSG2D(
|
CITEMLAYERCSG2D *itemCSG2d = new CITEMLAYERCSG2D(
|
||||||
object2d_A,
|
object2d_A,
|
||||||
object2d_B,
|
object2d_B,
|
||||||
|
@ -390,6 +392,7 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER* aStatusReporter, REPORTER* aWarnin
|
||||||
objPtr->SetMaterial( &m_materials.m_EpoxyBoard );
|
objPtr->SetMaterial( &m_materials.m_EpoxyBoard );
|
||||||
objPtr->SetColor( ConvertSRGBToLinear( (SFVEC3F)m_boardAdapter.m_BoardBodyColor ) );
|
objPtr->SetColor( ConvertSRGBToLinear( (SFVEC3F)m_boardAdapter.m_BoardBodyColor ) );
|
||||||
m_object_container.Add( objPtr );
|
m_object_container.Add( objPtr );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -974,7 +977,7 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER* aStatusReporter, REPORTER* aWarnin
|
||||||
}
|
}
|
||||||
m_accelerator = 0;
|
m_accelerator = 0;
|
||||||
|
|
||||||
m_accelerator = new CBVH_PBRT( m_object_container );
|
m_accelerator = new CBVH_PBRT( m_object_container, 8, SPLITMETHOD::MIDDLE );
|
||||||
|
|
||||||
if( aStatusReporter )
|
if( aStatusReporter )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1658,21 +1658,20 @@ SFVEC3F C3D_RENDER_RAYTRACING::shadeHit( const SFVEC3F &aBgColor,
|
||||||
unsigned int aRecursiveLevel,
|
unsigned int aRecursiveLevel,
|
||||||
bool is_testShadow ) const
|
bool is_testShadow ) const
|
||||||
{
|
{
|
||||||
if( aRecursiveLevel > 2 )
|
|
||||||
return SFVEC3F( 0.0f );
|
|
||||||
|
|
||||||
SFVEC3F hitPoint = aHitInfo.m_HitPoint;
|
|
||||||
|
|
||||||
if( !m_isPreview )
|
|
||||||
hitPoint += aHitInfo.m_HitNormal * m_boardAdapter.GetNonCopperLayerThickness3DU() * 0.6f;
|
|
||||||
|
|
||||||
const CMATERIAL *objMaterial = aHitInfo.pHitObject->GetMaterial();
|
const CMATERIAL *objMaterial = aHitInfo.pHitObject->GetMaterial();
|
||||||
wxASSERT( objMaterial != NULL );
|
wxASSERT( objMaterial != NULL );
|
||||||
|
|
||||||
const SFVEC3F diffuseColorObj = aHitInfo.pHitObject->GetDiffuseColor( aHitInfo );
|
|
||||||
|
|
||||||
SFVEC3F outColor = objMaterial->GetEmissiveColor() + objMaterial->GetAmbientColor();
|
SFVEC3F outColor = objMaterial->GetEmissiveColor() + objMaterial->GetAmbientColor();
|
||||||
|
|
||||||
|
if( aRecursiveLevel > 5 )
|
||||||
|
return outColor;
|
||||||
|
|
||||||
|
SFVEC3F hitPoint = aHitInfo.m_HitPoint;
|
||||||
|
|
||||||
|
hitPoint += aHitInfo.m_HitNormal * m_boardAdapter.GetNonCopperLayerThickness3DU() * 0.6f;
|
||||||
|
|
||||||
|
const SFVEC3F diffuseColorObj = aHitInfo.pHitObject->GetDiffuseColor( aHitInfo );
|
||||||
|
|
||||||
const LIST_LIGHT &lightList = m_lights.GetList();
|
const LIST_LIGHT &lightList = m_lights.GetList();
|
||||||
|
|
||||||
#if USE_EXPERIMENTAL_SOFT_SHADOWS
|
#if USE_EXPERIMENTAL_SOFT_SHADOWS
|
||||||
|
@ -1874,9 +1873,7 @@ SFVEC3F C3D_RENDER_RAYTRACING::shadeHit( const SFVEC3F &aBgColor,
|
||||||
{
|
{
|
||||||
// This increase the start point by a "fixed" factor so it will work the
|
// This increase the start point by a "fixed" factor so it will work the
|
||||||
// same for all distances
|
// same for all distances
|
||||||
const SFVEC3F startPoint = aRay.at( NextFloatUp(
|
const SFVEC3F startPoint = aRay.at( aHitInfo.m_tHit + m_boardAdapter.GetNonCopperLayerThickness3DU() * 0.25f );
|
||||||
NextFloatUp(
|
|
||||||
NextFloatUp( aHitInfo.m_tHit ) ) ) );
|
|
||||||
|
|
||||||
const unsigned int refractions_number_of_samples = objMaterial->GetNrRefractionsSamples();
|
const unsigned int refractions_number_of_samples = objMaterial->GetNrRefractionsSamples();
|
||||||
|
|
||||||
|
@ -1904,36 +1901,39 @@ SFVEC3F C3D_RENDER_RAYTRACING::shadeHit( const SFVEC3F &aBgColor,
|
||||||
HITINFO refractedHit;
|
HITINFO refractedHit;
|
||||||
refractedHit.m_tHit = std::numeric_limits<float>::infinity();
|
refractedHit.m_tHit = std::numeric_limits<float>::infinity();
|
||||||
|
|
||||||
SFVEC3F refractedColor = objMaterial->GetAmbientColor();
|
|
||||||
|
SFVEC3F refractedColor = aBgColor;
|
||||||
|
|
||||||
if( m_accelerator->Intersect( refractedRay, refractedHit ) )
|
if( m_accelerator->Intersect( refractedRay, refractedHit ) )
|
||||||
{
|
{
|
||||||
refractedColor = shadeHit( aBgColor,
|
refractedColor = shadeHit( aBgColor,
|
||||||
refractedRay,
|
refractedRay,
|
||||||
refractedHit,
|
refractedHit,
|
||||||
true,
|
!aIsInsideObject,
|
||||||
aRecursiveLevel + 1,
|
aRecursiveLevel + 1,
|
||||||
false );
|
false );
|
||||||
|
|
||||||
const SFVEC3F absorbance = ( SFVEC3F(1.0f) - diffuseColorObj ) *
|
const SFVEC3F absorbance = ( SFVEC3F(1.0f) - diffuseColorObj ) *
|
||||||
(1.0f - objTransparency ) *
|
(1.0f - objTransparency ) *
|
||||||
objMaterial->GetAbsorvance() * // Adjust falloff factor
|
objMaterial->GetAbsorvance() * // Adjust falloff factor
|
||||||
-refractedHit.m_tHit;
|
refractedHit.m_tHit;
|
||||||
|
|
||||||
const SFVEC3F transparency = SFVEC3F( expf( absorbance.r ),
|
const SFVEC3F transparency = 1.0f / ( absorbance + 1.0f );
|
||||||
expf( absorbance.g ),
|
|
||||||
expf( absorbance.b ) );
|
|
||||||
|
|
||||||
sum_color += refractedColor * transparency * objTransparency;
|
sum_color += refractedColor * transparency;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sum_color += refractedColor * objTransparency;
|
sum_color += refractedColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
outColor = outColor * (1.0f - objTransparency) +
|
outColor = outColor * (1.0f - objTransparency) +
|
||||||
(sum_color / SFVEC3F( (float)refractions_number_of_samples) );
|
objTransparency * sum_color / SFVEC3F( (float)refractions_number_of_samples);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outColor = outColor * (1.0f - objTransparency) + objTransparency * aBgColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,8 @@ CLAYERITEM::CLAYERITEM( const COBJECT2D* aObject2D, float aZMin, float aZMax )
|
||||||
m_bbox.Set( SFVEC3F( bbox2d.Min().x, bbox2d.Min().y, aZMin ),
|
m_bbox.Set( SFVEC3F( bbox2d.Min().x, bbox2d.Min().y, aZMin ),
|
||||||
SFVEC3F( bbox2d.Max().x, bbox2d.Max().y, aZMax ) );
|
SFVEC3F( bbox2d.Max().x, bbox2d.Max().y, aZMax ) );
|
||||||
m_bbox.ScaleNextUp();
|
m_bbox.ScaleNextUp();
|
||||||
|
m_bbox.Scale( 1.0001f );
|
||||||
|
|
||||||
m_centroid = SFVEC3F( aObject2D->GetCentroid().x,
|
m_centroid = SFVEC3F( aObject2D->GetCentroid().x,
|
||||||
aObject2D->GetCentroid().y,
|
aObject2D->GetCentroid().y,
|
||||||
(aZMax + aZMin) * 0.5f );
|
(aZMax + aZMin) * 0.5f );
|
||||||
|
@ -221,6 +223,11 @@ bool CLAYERITEM::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const
|
||||||
|
|
||||||
if( m_object2d->Intersect( raySeg, &tOut, &outNormal ) )
|
if( m_object2d->Intersect( raySeg, &tOut, &outNormal ) )
|
||||||
{
|
{
|
||||||
|
if( tOut > 0.99f ) // Workarround for refraction artifacts on board sides
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// The hitT is a hit value for the segment length 'start' - 'end',
|
// The hitT is a hit value for the segment length 'start' - 'end',
|
||||||
// so it ranges from 0.0 - 1.0. We now convert it to a 3D hit position
|
// so it ranges from 0.0 - 1.0. We now convert it to a 3D hit position
|
||||||
// and calculate the real hitT of the ray.
|
// and calculate the real hitT of the ray.
|
||||||
|
@ -256,8 +263,11 @@ bool CLAYERITEM::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Started inside
|
|
||||||
|
|
||||||
|
// Disabled due to refraction artifacts
|
||||||
|
// this will mostly happen inside the board body
|
||||||
|
#if 0
|
||||||
|
// Started inside
|
||||||
const SFVEC3F boxHitPointStart = aRay.at( tBBoxStart );
|
const SFVEC3F boxHitPointStart = aRay.at( tBBoxStart );
|
||||||
const SFVEC3F boxHitPointEnd = aRay.at( tBBoxEnd );
|
const SFVEC3F boxHitPointEnd = aRay.at( tBBoxEnd );
|
||||||
|
|
||||||
|
@ -317,8 +327,8 @@ bool CLAYERITEM::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -940,18 +940,22 @@ bool EDA_3D_VIEWER::Set3DBoardBodyColorFromUser()
|
||||||
{
|
{
|
||||||
CUSTOM_COLORS_LIST colors;
|
CUSTOM_COLORS_LIST colors;
|
||||||
|
|
||||||
colors.push_back( CUSTOM_COLOR_ITEM( 51/255.0, 43/255.0, 22/255.0, "FR4 natural, dark" ) );
|
colors.push_back( CUSTOM_COLOR_ITEM( 51/255.0, 43/255.0, 22/255.0, 1.0 - 0.1, "FR4 natural, dark" ) );
|
||||||
colors.push_back( CUSTOM_COLOR_ITEM( 109/255.0, 116/255.0, 75/255.0, "FR4 natural" ) );
|
colors.push_back( CUSTOM_COLOR_ITEM( 109/255.0, 116/255.0, 75/255.0, 1.0 - 0.1, "FR4 natural" ) );
|
||||||
colors.push_back( CUSTOM_COLOR_ITEM( 78/255.0, 14/255.0, 5/255.0, "brown/red" ) );
|
colors.push_back( CUSTOM_COLOR_ITEM( 78/255.0, 14/255.0, 5/255.0, 1.0 - 0.1, "brown/red" ) );
|
||||||
colors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, "brown 1" ) );
|
colors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, 1.0 - 0.1, "brown 1" ) );
|
||||||
colors.push_back( CUSTOM_COLOR_ITEM( 160/255.0, 123/255.0, 54/255.0, "brown 2" ) );
|
colors.push_back( CUSTOM_COLOR_ITEM( 160/255.0, 123/255.0, 54/255.0, 1.0 - 0.1, "brown 2" ) );
|
||||||
colors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, "brown 3" ) );
|
colors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, 1.0 - 0.1, "brown 3" ) );
|
||||||
colors.push_back( CUSTOM_COLOR_ITEM( 63/255.0, 126/255.0, 71/255.0, "green 1" ) );
|
colors.push_back( CUSTOM_COLOR_ITEM( 63/255.0, 126/255.0, 71/255.0, 1.0 - 0.1, "green 1" ) );
|
||||||
colors.push_back( CUSTOM_COLOR_ITEM( 117/255.0, 122/255.0, 90/255.0, "green 2" ) );
|
colors.push_back( CUSTOM_COLOR_ITEM( 117/255.0, 122/255.0, 90/255.0, 1.0 - 0.1, "green 2" ) );
|
||||||
|
|
||||||
if( Set3DColorFromUser( m_boardAdapter.m_BoardBodyColor, _( "Board Body Color" ), &colors ) )
|
if( Set3DColorFromUser( m_boardAdapter.m_BoardBodyColor, _( "Board Body Color" ), &colors, true ) )
|
||||||
{
|
{
|
||||||
NewDisplay( true );
|
if( m_boardAdapter.RenderEngineGet() == RENDER_ENGINE::OPENGL_LEGACY )
|
||||||
|
m_canvas->Request_refresh();
|
||||||
|
else
|
||||||
|
NewDisplay( true );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -201,7 +201,7 @@ COLOR_SETTINGS::COLOR_SETTINGS( wxString aFilename ) :
|
||||||
// Colors for 3D viewer, which are used as defaults unless overridden by the board
|
// Colors for 3D viewer, which are used as defaults unless overridden by the board
|
||||||
CLR( "3d_viewer.background_bottom", LAYER_3D_BACKGROUND_BOTTOM, COLOR4D( 0.4, 0.4, 0.5, 1.0 ) );
|
CLR( "3d_viewer.background_bottom", LAYER_3D_BACKGROUND_BOTTOM, COLOR4D( 0.4, 0.4, 0.5, 1.0 ) );
|
||||||
CLR( "3d_viewer.background_top", LAYER_3D_BACKGROUND_TOP, COLOR4D( 0.8, 0.8, 0.9, 1.0 ) );
|
CLR( "3d_viewer.background_top", LAYER_3D_BACKGROUND_TOP, COLOR4D( 0.8, 0.8, 0.9, 1.0 ) );
|
||||||
CLR( "3d_viewer.board", LAYER_3D_BOARD, COLOR4D( 0.2, 0.17, 0.09, 1.0 ) );
|
CLR( "3d_viewer.board", LAYER_3D_BOARD, COLOR4D( 0.2, 0.17, 0.09, 0.1 ) );
|
||||||
CLR( "3d_viewer.copper", LAYER_3D_COPPER, COLOR4D( 0.7, 0.61, 0.0, 1.0 ) );
|
CLR( "3d_viewer.copper", LAYER_3D_COPPER, COLOR4D( 0.7, 0.61, 0.0, 1.0 ) );
|
||||||
CLR( "3d_viewer.silkscreen_bottom", LAYER_3D_SILKSCREEN_BOTTOM, COLOR4D( 0.9, 0.9, 0.9, 1.0 ) );
|
CLR( "3d_viewer.silkscreen_bottom", LAYER_3D_SILKSCREEN_BOTTOM, COLOR4D( 0.9, 0.9, 0.9, 1.0 ) );
|
||||||
CLR( "3d_viewer.silkscreen_top", LAYER_3D_SILKSCREEN_TOP, COLOR4D( 0.9, 0.9, 0.9, 1.0 ) );
|
CLR( "3d_viewer.silkscreen_top", LAYER_3D_SILKSCREEN_TOP, COLOR4D( 0.9, 0.9, 0.9, 1.0 ) );
|
||||||
|
|
Loading…
Reference in New Issue