/* Copyright (C) 2019-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: WxdkdrawControlTools.cpt */ /** @file WxdkdrawControlTools.cpp The WxdkdrawControlTools module. */ #line 10 "WxdkdrawControlTools.cpt" #include "wxdkdraw.h" #ifndef WXDKDRAWFRAME_H_INCLUDED #include "WxdkdrawFrame.h" #endif #line 21 "WxdkdrawControlTools.cpt" void WxdkdrawFrame::Control::CalculateZoomFactor(void) { int8_t zl; /* Local copy of zoom level to analyze */ m_dZoom = 1.0; if (NULL != m_pParent) { if (NULL != m_pParent->m_pDrw) { if ((uint8_t)0U != m_pParent->m_pDrw->gridunit) { /* Grid is in cm */ m_uGridOptical = 6400000UL; } else { /* Grid is inch based (1/2 inch) */ m_uGridOptical = 8128000UL; } zl = m_pParent->m_pDrw->zl; if ((int8_t)0 < zl) { while ((int8_t)1 < zl) { zl -= (int8_t)2; m_dZoom *= 2.0; m_uGridOptical /= (uint32_t)2UL; } if ((int8_t)0 < zl) { m_dZoom *= M_SQRT2; m_uGridOptical /= (uint32_t)2UL; } } else { if ((int8_t)0 > zl) { while ((int8_t)(-1) > zl) { zl += (int8_t)2; m_dZoom /= 2.0; m_uGridOptical *= (uint32_t)2UL; } if ((int8_t)0 > zl) { m_dZoom /= M_SQRT2; m_uGridOptical *= (uint32_t)2UL; } } } if ((uint8_t)0U != m_pParent->m_pDrw->gridbase) { m_uGridSnap = m_uGridOptical / (uint32_t)5UL; } else { m_uGridSnap = m_uGridOptical / (uint32_t)4UL; } } } } void WxdkdrawFrame::Control::CalculateGridDistances(void) { int8_t zl; /* Local copy of zoom level to analyze */ if (NULL != m_pParent) { if (NULL != m_pParent->m_pDrw) { if ((uint8_t)0U != m_pParent->m_pDrw->gridunit) { /* Grid is in cm */ m_uGridOptical = 6400000UL; } else { /* Grid is inch based (1/2 inch) */ m_uGridOptical = 8128000UL; } zl = m_pParent->m_pDrw->zl; if ((int8_t)0 < zl) { while ((int8_t)1 < zl) { zl -= (int8_t)2; m_uGridOptical /= (uint32_t)2UL; } if ((int8_t)0 < zl) { m_uGridOptical /= (uint32_t)2UL; } } else { if ((int8_t)0 > zl) { while ((int8_t)(-1) > zl) { zl += (int8_t)2; m_uGridOptical *= (uint32_t)2UL; } if ((int8_t)0 > zl) { m_uGridOptical *= (uint32_t)2UL; } } } if ((uint8_t)0U != m_pParent->m_pDrw->gridbase) { m_uGridSnap = m_uGridOptical / (uint32_t)5UL; } else { m_uGridSnap = m_uGridOptical / (uint32_t)4UL; } } } } void WxdkdrawFrame::Control::CalculateConversionCoefficients(void) { #line 130 "WxdkdrawControlTools.cpt" m_ptM.x = (m_ptRes.x * m_dZoom) / 16256000.0; m_ptN.x = (double)(m_szDrawco.GetWidth()) / 2.0; m_ptN.x -= ((double)(m_pParent->m_pDrw->cx) * m_ptRes.x * m_dZoom) / 16256000.0; m_ptM.y = 0.0 - (m_ptRes.y * m_dZoom) / 16256000.0; m_ptN.y = (double)(m_szDrawco.GetHeight()) / 2.0; m_ptN.y += ((double)(m_pParent->m_pDrw->cy) * m_ptRes.y * m_dZoom) / 16256000.0; #line 139 "WxdkdrawControlTools.cpt" #line 140 "WxdkdrawControlTools.cpt" #line 141 "WxdkdrawControlTools.cpt" } double WxdkdrawFrame::Control::ConvDist(double d) { #if TRACE_DEBUG double back; back = fabs(m_ptM.x * d); #line 152 "WxdkdrawControlTools.cpt" return back; #else return (fabs(m_ptM.x * d)); #endif } double WxdkdrawFrame::Control::ConvX(double x) { #if TRACE_DEBUG double back; back = m_ptM.x * x + m_ptN.x; #line 167 "WxdkdrawControlTools.cpt" return back; #else return (m_ptM.x * x + m_ptN.x); #endif } double WxdkdrawFrame::Control::ConvY(double y) { #if TRACE_DEBUG double back; back = m_ptM.y * y + m_ptN.y; #line 182 "WxdkdrawControlTools.cpt" return back; #else return (m_ptM.y * y + m_ptN.y); #endif } double WxdkdrawFrame::Control::ConvDist(int32_t d) { return (ConvDist((double)d)); } double WxdkdrawFrame::Control::ConvX(int32_t x) { return (ConvX((double)x)); } double WxdkdrawFrame::Control::ConvY(int32_t y) { return (ConvY((double)y)); } double WxdkdrawFrame::Control::InvX(double x) { #if TRACE_DEBUG double back; back = (x - m_ptN.x) / m_ptM.x; #line 221 "WxdkdrawControlTools.cpt" return back; #else return ((x - m_ptN.x) / m_ptM.x); #endif } double WxdkdrawFrame::Control::InvY(double y) { #if TRACE_DEBUG double back; back = (y - m_ptN.y) / m_ptM.y; #line 236 "WxdkdrawControlTools.cpt" return back; #else return ((y - m_ptN.y) / m_ptM.y); #endif } int32_t WxdkdrawFrame::Control::InvX(double x, bool & ok) { dk4_er_t er; /* Error report */ double invx; /* Inverted x value */ int32_t i32; /* Intermediate result */ int32_t back = (int32_t)0L; #line 252 "WxdkdrawControlTools.cpt" dk4error_init(&er); invx = InvX(x); i32 = dk4ma_int32_from_double(dk4ma_rint(invx), &er); if (DK4_E_NONE == er.ec) { back = i32; } else { #line 259 "WxdkdrawControlTools.cpt" ok = false; } #line 262 "WxdkdrawControlTools.cpt" return back; } int32_t WxdkdrawFrame::Control::InvY(double y, bool & ok) { dk4_er_t er; /* Error report */ double invy; /* Inverted y value */ int32_t i32; /* Intermediate result */ int32_t back = (int32_t)0L; #line 275 "WxdkdrawControlTools.cpt" dk4error_init(&er); invy = InvY(y); i32 = dk4ma_int32_from_double(dk4ma_rint(invy), &er); if (DK4_E_NONE == er.ec) { back = i32; } else { #line 282 "WxdkdrawControlTools.cpt" ok = false; } #line 285 "WxdkdrawControlTools.cpt" return back; } int32_t WxdkdrawFrame::Control::GridRoundDown(int32_t x,uint32_t gr,bool & ok,bool fo) { dk4_er_t er; /* Error report */ int32_t back; /* Function result */ int32_t rem; /* Division remainder */ #line 297 "WxdkdrawControlTools.cpt" back = x / (int32_t)gr; #line 298 "WxdkdrawControlTools.cpt" rem = x % (int32_t)gr; #line 299 "WxdkdrawControlTools.cpt" dk4error_init(&er); if (((int32_t)0L > rem) || ((fo) && ((int32_t)0L == rem))) { back--; } back = dk4ma_int32_t_mul(back, (int32_t)gr, &er); if (DK4_E_NONE != er.ec) { ok = false; } #line 308 "WxdkdrawControlTools.cpt" return back; } int32_t WxdkdrawFrame::Control::GridRoundUp(int32_t x, uint32_t gr, bool & ok, bool fo) { dk4_er_t er; /* Error report */ int32_t back; /* Function result */ int32_t rem; /* Division remainder */ #line 320 "WxdkdrawControlTools.cpt" dk4error_init(&er); back = x / (int32_t)gr; rem = x % (int32_t)gr; if (((int32_t)0L < rem) || ((fo) && ((int32_t)0L == rem))) { back++; } back = dk4ma_int32_t_mul(back, (int32_t)gr, &er); if (DK4_E_NONE != er.ec) { ok = false; } #line 331 "WxdkdrawControlTools.cpt" return back; } int32_t WxdkdrawFrame::Control::GridRoundNearest(int32_t x, uint32_t gr, bool & ok) { dk4_er_t er; /* Error report */ int32_t back; /* Function result */ int32_t rem; /* Division remainder */ #line 344 "WxdkdrawControlTools.cpt" dk4error_init(&er); back = x / (int32_t)gr; rem = x % (int32_t)gr; if ((int32_t)0L > rem) { if (rem <= ((int32_t)0L - (int32_t)gr / (int32_t)2L)) { back = dk4ma_int32_t_sub(back, (int32_t)1L, &er); } } else { if (rem >= (int32_t)gr / (int32_t)2L) { back = dk4ma_int32_t_add(back, (int32_t)1L, &er); } } back = dk4ma_int32_t_mul(back, (int32_t)gr, &er); if (DK4_E_NONE != er.ec) { ok = false; } #line 362 "WxdkdrawControlTools.cpt" return back; } int WxdkdrawFrame::Control::LineWidthForObject( Wxd_drawing_t const *pDrw, Wxd_object_t const *pObj, int iMarkup ) { int back; uint16_t lw; #line 375 "WxdkdrawControlTools.cpt" #if TRACE_DEBUG #line 377 "WxdkdrawControlTools.cpt" #line 378 "WxdkdrawControlTools.cpt" #line 379 "WxdkdrawControlTools.cpt" #line 380 "WxdkdrawControlTools.cpt" #endif #if VERSION_BEFORE_2020_08_16 back = (int)dk4ma_rint( ConvDist((double)(pDrw->baselw) * (double)(pObj->lw)) ); #else lw = pObj->lw; if (((uint16_t)0U == lw) && (WXD_MARKUP_NONE != iMarkup)) { lw = (uint16_t)2U; #line 390 "WxdkdrawControlTools.cpt" } back = (int)dk4ma_rint( ConvDist((double)(pDrw->baselw) * (double)lw) ); #endif #line 396 "WxdkdrawControlTools.cpt" if (0 == back) { back = 1; } #line 398 "WxdkdrawControlTools.cpt" return back; } /* vim: set ai sw=4 ts=4 : */