From 7d67be5b5f3ff12abd129ae0ce2bf0335163b150 Mon Sep 17 00:00:00 2001 From: Thomas Pointhuber Date: Tue, 5 May 2020 13:25:02 +0200 Subject: [PATCH] altium: use correct position and rotation when importing step models --- .../altium_parser_pcb.cpp | 2 ++ .../altium2kicadpcb_plugin/altium_parser_pcb.h | 1 + pcbnew/altium2kicadpcb_plugin/altium_pcb.cpp | 18 ++++++++++-------- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/pcbnew/altium2kicadpcb_plugin/altium_parser_pcb.cpp b/pcbnew/altium2kicadpcb_plugin/altium_parser_pcb.cpp index b5a8a2c128..21524ffc51 100644 --- a/pcbnew/altium2kicadpcb_plugin/altium_parser_pcb.cpp +++ b/pcbnew/altium2kicadpcb_plugin/altium_parser_pcb.cpp @@ -624,6 +624,8 @@ ACOMPONENTBODY6::ACOMPONENTBODY6( ALTIUM_PARSER& aReader ) rotation = ALTIUM_PARSER::PropertiesReadDouble( properties, "MODEL.2D.ROTATION", 0. ); + bodyOpacity = ALTIUM_PARSER::PropertiesReadDouble( properties, "BODYOPACITY3D", 1. ); + aReader.SkipSubrecord(); if( aReader.HasParsingError() ) diff --git a/pcbnew/altium2kicadpcb_plugin/altium_parser_pcb.h b/pcbnew/altium2kicadpcb_plugin/altium_parser_pcb.h index 2858cfb44b..47a0a5f49c 100644 --- a/pcbnew/altium2kicadpcb_plugin/altium_parser_pcb.h +++ b/pcbnew/altium2kicadpcb_plugin/altium_parser_pcb.h @@ -509,6 +509,7 @@ struct ACOMPONENTBODY6 MODULE_3D_SETTINGS::VECTOR3D modelPosition; MODULE_3D_SETTINGS::VECTOR3D modelRotation; double rotation; + double bodyOpacity; explicit ACOMPONENTBODY6( ALTIUM_PARSER& aReader ); }; diff --git a/pcbnew/altium2kicadpcb_plugin/altium_pcb.cpp b/pcbnew/altium2kicadpcb_plugin/altium_pcb.cpp index 1aa1643475..7c7c09388d 100644 --- a/pcbnew/altium2kicadpcb_plugin/altium_pcb.cpp +++ b/pcbnew/altium2kicadpcb_plugin/altium_pcb.cpp @@ -846,20 +846,22 @@ void ALTIUM_PCB::ParseComponentsBodies6Data( modelSettings.m_Offset.y = -Iu2Millimeter( (int) elem.modelPosition.y - modulePosition.y ); modelSettings.m_Offset.z = Iu2Millimeter( (int) elem.modelPosition.z ); - double correctedRotation = - module->IsFlipped() ? -module->GetOrientation() : module->GetOrientation(); - - RotatePoint( &modelSettings.m_Offset.x, &modelSettings.m_Offset.y, correctedRotation ); + double orientation = module->GetOrientation(); if( module->IsFlipped() ) { - // TODO: in case of a flipped module, the offset is sometimes wrong. HowTo correct? + modelSettings.m_Offset.y = -modelSettings.m_Offset.y; + orientation = -orientation; } + RotatePoint( &modelSettings.m_Offset.x, &modelSettings.m_Offset.y, orientation ); + modelSettings.m_Rotation.x = NormalizeAngleDegrees( -elem.modelRotation.x, -180, 180 ); - modelSettings.m_Rotation.y = NormalizeAngleDegrees( elem.modelRotation.y, -180, 180 ); - modelSettings.m_Rotation.z = - NormalizeAngleDegrees( -elem.modelRotation.z + correctedRotation / 10, -180, 180 ); + modelSettings.m_Rotation.y = NormalizeAngleDegrees( -elem.modelRotation.y, -180, 180 ); + modelSettings.m_Rotation.z = NormalizeAngleDegrees( + -elem.modelRotation.z + elem.rotation + orientation / 10, -180, 180 ); + + modelSettings.m_Opacity = elem.bodyOpacity; module->Models().push_back( modelSettings ); }