Versie 4.22

FCLT#62810 rotatie van 0/90/180/270 net zoals alle andere graden rond 0,0 in plaats van (INTMAX/2, INTMAX/2) 

svn path=/Slnkdwf/trunk/; revision=47182
This commit is contained in:
Jos Groot Lipman
2020-06-18 19:13:41 +00:00
parent e7f859d742
commit 6fa5ef29e6
3 changed files with 24 additions and 17 deletions

View File

@@ -1,6 +1,6 @@
// Zorg dat versies alfabetisch altijd op elkaar volgen!
#define SLNK_MAJOR_VERSION 4
#define SLNK_MINOR_VERSION 21
#define SLNK_MINOR_VERSION 22
#define SLNK_BUILD_VERSION 0
// Define resource strings

View File

@@ -47,6 +47,12 @@ WT_Logical_Point const WT_Logical_Point::operator* (WT_Transform const & trans)
// new_point.m_x = (WT_Integer32) ( ((double)m_x + trans.m_translate.m_x) * trans.m_x_scale );
// new_point.m_y = (WT_Integer32) ( ((double)m_y + trans.m_translate.m_y) * trans.m_y_scale );
// JGL juni 2020
// Twee aspecten gewijzigd
// * Origineel werd geroteerd om (INT_MAX/2, INT_MAX/2)
// Dat kon overflow problemen geven (als je symbolen 180 graden roteerde)
// Dat aangepast zodat we altijd om (0,0) roteren. Dat blijkt in de praktijk goed te gaan?
// * Origineel werden alleen 0/90//180/270 ondersteund. Dat uitgebreid met *alle* hoeken
switch (trans.rotation())
{
case 0:
@@ -54,23 +60,19 @@ WT_Logical_Point const WT_Logical_Point::operator* (WT_Transform const & trans)
new_point.m_y = (WT_Integer32) (((double)m_y * trans.m_y_scale) + trans.m_translate.m_y);
break;
case 90:
new_point.m_x = 0x7FFFFFFF - ((WT_Integer32) (((double)m_y * trans.m_y_scale) + trans.m_translate.m_y));
new_point.m_y = (WT_Integer32) (((double)m_x * trans.m_x_scale) + trans.m_translate.m_x);
break;
case 180:
new_point.m_x = 0x7FFFFFFF - ((WT_Integer32) (((double)m_x * trans.m_x_scale) + trans.m_translate.m_x));
new_point.m_y = 0x7FFFFFFF - ((WT_Integer32) (((double)m_y * trans.m_y_scale) + trans.m_translate.m_y));
break;
case 270:
new_point.m_x = (WT_Integer32) (((double)m_y * trans.m_y_scale) + trans.m_translate.m_y);
new_point.m_y = 0x7FFFFFFF - ((WT_Integer32) (((double)m_x * trans.m_x_scale) + trans.m_translate.m_x));
break;
new_point.m_x = /*0x7FFFFFFF*/ - ((WT_Integer32)(((double)m_y * trans.m_y_scale) + trans.m_translate.m_y));
new_point.m_y = (WT_Integer32)(((double)m_x * trans.m_x_scale) + trans.m_translate.m_x);
break;
case 180:
new_point.m_x = /*0x7FFFFFFF*/ - ((WT_Integer32)(((double)m_x * trans.m_x_scale) + trans.m_translate.m_x));
new_point.m_y = /*0x7FFFFFFF*/ - ((WT_Integer32)(((double)m_y * trans.m_y_scale) + trans.m_translate.m_y));
break;
case 270:
new_point.m_x = (WT_Integer32)(((double)m_y * trans.m_y_scale) + trans.m_translate.m_y);
new_point.m_y = /*0x7FFFFFFF*/ - ((WT_Integer32)(((double)m_x * trans.m_x_scale) + trans.m_translate.m_x));
break;
default:
{
// Merk op: de code hierboven roteert om (INT_MAX/2, INT_MAX/2)
// Bij 90 graden rotaties heb je dan geen kans op overflow.
// Bij andere hoeken kan het wel mis gaan. Wij roteren hieronder
// daarom om 0,0. Dat blijkt in de praktijk goed te gaan?
double sinAngle = sin((double)trans.rotation() / 180.0 * myPI);
double cosAngle = cos((double)trans.rotation() / 180.0 * myPI);
double transx = (double)m_x * trans.m_x_scale + trans.m_translate.m_x;

View File

@@ -1,6 +1,11 @@
V4.22 xx-xx-xxxx
- DWFExceptions iets beter afvangen
- Bij roteren over vaste hoek (0/90/180/27) dat ook rond 0,0 doen
voorkomt overflows.
V4.21 19-05-2020
- Coordinaat markers kunnen aansturen
- Whipfile ook property DwgLlimits laten opleveren
- Whipfile ook property DwgLimits laten opleveren
- About ook fileOwner kunnen opvragen
V4.19 20-08-2019