Commit d545c698 authored by unknown's avatar unknown Committed by jean-pierre charras

3D vrml export: fix for bug #1441734

parent 44d6595c
...@@ -54,20 +54,8 @@ S3D_MODEL_PARSER *S3D_MODEL_PARSER::Create( S3D_MASTER* aMaster, ...@@ -54,20 +54,8 @@ S3D_MODEL_PARSER *S3D_MODEL_PARSER::Create( S3D_MASTER* aMaster,
int S3D_MASTER::ReadData( S3D_MODEL_PARSER* aParser ) int S3D_MASTER::ReadData( S3D_MODEL_PARSER* aParser )
{ {
if( m_Shape3DName.IsEmpty() ) if( m_Shape3DFullFilename.IsEmpty() || aParser == NULL )
{
//DBG( printf("m_Shape3DName.IsEmpty") );
return -1;
}
if( m_Shape3DFullFilename.IsEmpty() )
{
//DBG( printf("m_Shape3DFullFilename.IsEmpty") );
return -1;
}
if( aParser == NULL )
return -1; return -1;
wxString filename = m_Shape3DFullFilename; wxString filename = m_Shape3DFullFilename;
...@@ -107,7 +95,7 @@ void S3D_MASTER::Render( bool aIsRenderingJustNonTransparentObjects, ...@@ -107,7 +95,7 @@ void S3D_MASTER::Render( bool aIsRenderingJustNonTransparentObjects,
{ {
if( m_parser == NULL ) if( m_parser == NULL )
return; return;
double aVrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB; double aVrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
glScalef( aVrmlunits_to_3Dunits, aVrmlunits_to_3Dunits, aVrmlunits_to_3Dunits ); glScalef( aVrmlunits_to_3Dunits, aVrmlunits_to_3Dunits, aVrmlunits_to_3Dunits );
...@@ -141,7 +129,7 @@ CBBOX &S3D_MASTER::getFastAABBox( ) ...@@ -141,7 +129,7 @@ CBBOX &S3D_MASTER::getFastAABBox( )
{ {
if( !m_fastAABBox.IsInitialized() ) if( !m_fastAABBox.IsInitialized() )
calcBBox(); calcBBox();
return m_fastAABBox; return m_fastAABBox;
} }
...@@ -152,7 +140,7 @@ void S3D_MASTER::calcBBox() ...@@ -152,7 +140,7 @@ void S3D_MASTER::calcBBox()
return; return;
bool firstBBox = true; bool firstBBox = true;
for( unsigned int idx = 0; idx < m_parser->childs.size(); idx++ ) for( unsigned int idx = 0; idx < m_parser->childs.size(); idx++ )
if( firstBBox ) if( firstBBox )
{ {
...@@ -175,7 +163,7 @@ void S3D_MASTER::calcBBox() ...@@ -175,7 +163,7 @@ void S3D_MASTER::calcBBox()
fullTransformMatrix = glm::translate( fullTransformMatrix, S3D_VERTEX( m_MatPosition.x * SCALE_3D_CONV, fullTransformMatrix = glm::translate( fullTransformMatrix, S3D_VERTEX( m_MatPosition.x * SCALE_3D_CONV,
m_MatPosition.y * SCALE_3D_CONV, m_MatPosition.y * SCALE_3D_CONV,
m_MatPosition.z * SCALE_3D_CONV) ); m_MatPosition.z * SCALE_3D_CONV) );
if( m_MatRotation.z != 0.0 ) if( m_MatRotation.z != 0.0 )
fullTransformMatrix = glm::rotate( fullTransformMatrix, glm::radians(-(float)m_MatRotation.z), S3D_VERTEX( 0.0f, 0.0f, 1.0f ) ); fullTransformMatrix = glm::rotate( fullTransformMatrix, glm::radians(-(float)m_MatRotation.z), S3D_VERTEX( 0.0f, 0.0f, 1.0f ) );
if( m_MatRotation.y != 0.0 ) if( m_MatRotation.y != 0.0 )
...@@ -184,7 +172,7 @@ void S3D_MASTER::calcBBox() ...@@ -184,7 +172,7 @@ void S3D_MASTER::calcBBox()
fullTransformMatrix = glm::rotate( fullTransformMatrix, glm::radians(-(float)m_MatRotation.x), S3D_VERTEX( 1.0f, 0.0f, 0.0f ) ); fullTransformMatrix = glm::rotate( fullTransformMatrix, glm::radians(-(float)m_MatRotation.x), S3D_VERTEX( 1.0f, 0.0f, 0.0f ) );
fullTransformMatrix = glm::scale( fullTransformMatrix, S3D_VERTEX( m_MatScale.x, m_MatScale.y, m_MatScale.z ) ); fullTransformMatrix = glm::scale( fullTransformMatrix, S3D_VERTEX( m_MatScale.x, m_MatScale.y, m_MatScale.z ) );
// Apply transformation // Apply transformation
m_fastAABBox = m_BBox; m_fastAABBox = m_BBox;
m_fastAABBox.ApplyTransformationAA( fullTransformMatrix ); m_fastAABBox.ApplyTransformationAA( fullTransformMatrix );
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Copyright (C) 2009-2013 Lorenzo Mercantonio * Copyright (C) 2009-2013 Lorenzo Mercantonio
* Copyright (C) 2014 Cirilo Bernado * Copyright (C) 2014 Cirilo Bernado
* Copyright (C) 2013 Jean-Pierre Charras jp.charras at wanadoo.fr * Copyright (C) 2013 Jean-Pierre Charras jp.charras at wanadoo.fr
* Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors. * Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -893,7 +893,6 @@ static void export_vrml_zones( MODEL_VRML& aModel, BOARD* aPcb ) ...@@ -893,7 +893,6 @@ static void export_vrml_zones( MODEL_VRML& aModel, BOARD* aPcb )
const CPOLYGONS_LIST& poly = zone->GetFilledPolysList(); const CPOLYGONS_LIST& poly = zone->GetFilledPolysList();
int nvert = poly.GetCornersCount(); int nvert = poly.GetCornersCount();
int i = 0; int i = 0;
bool cutout = false;
while( i < nvert ) while( i < nvert )
{ {
...@@ -916,13 +915,7 @@ static void export_vrml_zones( MODEL_VRML& aModel, BOARD* aPcb ) ...@@ -916,13 +915,7 @@ static void export_vrml_zones( MODEL_VRML& aModel, BOARD* aPcb )
++i; ++i;
} }
// KiCad ensures that the first polygon is the outline vl->EnsureWinding( seg, false );
// and all others are holes
vl->EnsureWinding( seg, cutout );
if( !cutout )
cutout = true;
++i; ++i;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment