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:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user