altium: use correct position and rotation when importing step models

This commit is contained in:
Thomas Pointhuber 2020-05-05 13:25:02 +02:00 committed by Jon Evans
parent 1065bb65c8
commit 7d67be5b5f
3 changed files with 13 additions and 8 deletions

View File

@ -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() )

View File

@ -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 );
};

View File

@ -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 );
}