diff --git a/eeschema/sch_plugins/cadstar/cadstar_sch_archive_loader.cpp b/eeschema/sch_plugins/cadstar/cadstar_sch_archive_loader.cpp index 53ee10766f..f023685e09 100644 --- a/eeschema/sch_plugins/cadstar/cadstar_sch_archive_loader.cpp +++ b/eeschema/sch_plugins/cadstar/cadstar_sch_archive_loader.cpp @@ -54,8 +54,8 @@ void CADSTAR_SCH_ARCHIVE_LOADER::Load( SCHEMATIC* aSchematic, SCH_SHEET* aRootSh LONGPOINT designLimit = Assignments.Settings.DesignLimit; //Note: can't use getKiCadPoint() due wxPoint being int - need long long to make the check - long long designSizeXkicad = (long long) designLimit.x * KiCadUnitMultiplier; - long long designSizeYkicad = (long long) designLimit.y * KiCadUnitMultiplier; + long long designSizeXkicad = (long long) designLimit.x / KiCadUnitDivider; + long long designSizeYkicad = (long long) designLimit.y / KiCadUnitDivider; // Max size limited by the positive dimension of wxPoint (which is an int) constexpr long long maxDesignSizekicad = std::numeric_limits::max(); @@ -2408,8 +2408,8 @@ wxPoint CADSTAR_SCH_ARCHIVE_LOADER::getKiCadPoint( wxPoint aCadstarPoint ) { wxPoint retval; - retval.x = ( aCadstarPoint.x - m_designCenter.x ) * KiCadUnitMultiplier; - retval.y = -( aCadstarPoint.y - m_designCenter.y ) * KiCadUnitMultiplier; + retval.x = getKiCadLength( aCadstarPoint.x - m_designCenter.x ); + retval.y = -getKiCadLength( aCadstarPoint.y - m_designCenter.y ); return retval; } @@ -2420,8 +2420,8 @@ wxPoint CADSTAR_SCH_ARCHIVE_LOADER::getKiCadLibraryPoint( { wxPoint retval; - retval.x = ( aCadstarPoint.x - aCadstarCentre.x ) * KiCadUnitMultiplier; - retval.y = ( aCadstarPoint.y - aCadstarCentre.y ) * KiCadUnitMultiplier; + retval.x = getKiCadLength( aCadstarPoint.x - aCadstarCentre.x ); + retval.y = getKiCadLength( aCadstarPoint.y - aCadstarCentre.y ); return retval; } diff --git a/eeschema/sch_plugins/cadstar/cadstar_sch_archive_loader.h b/eeschema/sch_plugins/cadstar/cadstar_sch_archive_loader.h index 4b8622a567..a8420e17c7 100644 --- a/eeschema/sch_plugins/cadstar/cadstar_sch_archive_loader.h +++ b/eeschema/sch_plugins/cadstar/cadstar_sch_archive_loader.h @@ -214,7 +214,15 @@ private: int getKiCadLength( long long aCadstarLength ) { - return aCadstarLength * KiCadUnitMultiplier; + int mod = aCadstarLength % KiCadUnitDivider; + int absmod = sign( mod ) * mod; + int offset = 0; + + // Round half-way cases away from zero + if( absmod >= KiCadUnitDivider / 2 ) + offset = sign( aCadstarLength ); + + return ( aCadstarLength / KiCadUnitDivider ) + offset; } /** diff --git a/eeschema/sch_plugins/cadstar/cadstar_sch_archive_parser.cpp b/eeschema/sch_plugins/cadstar/cadstar_sch_archive_parser.cpp index 93a5fa7ebe..4d375db7ea 100644 --- a/eeschema/sch_plugins/cadstar/cadstar_sch_archive_parser.cpp +++ b/eeschema/sch_plugins/cadstar/cadstar_sch_archive_parser.cpp @@ -46,7 +46,7 @@ void CADSTAR_SCH_ARCHIVE_PARSER::Parse() switch( Header.Resolution ) { case RESOLUTION::HUNDREDTH_MICRON: - KiCadUnitMultiplier = SCH_IU_PER_MM / 1e5; + KiCadUnitDivider = (long) 1e5 / (long) SCH_IU_PER_MM; break; default: diff --git a/eeschema/sch_plugins/cadstar/cadstar_sch_archive_parser.h b/eeschema/sch_plugins/cadstar/cadstar_sch_archive_parser.h index 266d8868de..d08d037413 100644 --- a/eeschema/sch_plugins/cadstar/cadstar_sch_archive_parser.h +++ b/eeschema/sch_plugins/cadstar/cadstar_sch_archive_parser.h @@ -36,7 +36,7 @@ class CADSTAR_SCH_ARCHIVE_PARSER : public CADSTAR_ARCHIVE_PARSER { public: explicit CADSTAR_SCH_ARCHIVE_PARSER( wxString aFilename ) - : CADSTAR_ARCHIVE_PARSER(), Filename( aFilename ), KiCadUnitMultiplier( 0.1 ) + : CADSTAR_ARCHIVE_PARSER(), Filename( aFilename ), KiCadUnitDivider( 10 ) { } @@ -452,7 +452,7 @@ public: ATTRCOLORS AttrColors; PARTNAMECOL SymbolPartNameColor; - double KiCadUnitMultiplier; ///