X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=libctgraphics%2Fsgp.cpp;h=a7450936dc65d30d27bcc87d541645bbacca99ce;hb=9b2bb510160bdb56f04847f5b55ab61dd8a47976;hp=14cfd63e500a9f40d3dc4a94f03588017d4d68c3;hpb=e9222e8a8190ca48f30a1359badae06bcb200210;p=ctsim.git diff --git a/libctgraphics/sgp.cpp b/libctgraphics/sgp.cpp index 14cfd63..a745093 100644 --- a/libctgraphics/sgp.cpp +++ b/libctgraphics/sgp.cpp @@ -7,7 +7,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: sgp.cpp,v 1.20 2000/12/18 05:40:30 kevin Exp $ +** $Id: sgp.cpp,v 1.24 2000/12/26 21:13:15 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -92,21 +92,25 @@ SGP::SGP (const SGPDriver& driver) m_ctm.setIdentity(); #if HAVE_WXWINDOWS - m_pen.SetWidth(1); - m_pen.SetStyle(wxSOLID); + m_pen.SetWidth (1); if (m_driver.isWX()) { static const double dScreenDPI = 82; static const double dPointsPerInch = 72.; m_dPointsPerPixel = dPointsPerInch / dScreenDPI; - const int iTestPointSize = 12; - m_font.SetPointSize (iTestPointSize); - m_driver.idWX()->SetFont(m_font); + const int iTestPointSize = 12; + m_pFont = new wxFont (wxROMAN, wxNORMAL, wxNORMAL, wxNORMAL); + m_pFont->SetPointSize (iTestPointSize); + m_pFont->SetWeight (wxNORMAL); + m_pFont->SetStyle (wxNORMAL); + m_pFont->SetFamily (wxROMAN); +#ifdef MSVC + m_pFont->SetFaceName(wxString("times new roman")); +#endif + m_driver.idWX()->SetFont (*m_pFont); double dTestCharHeight = m_driver.idWX()->GetCharHeight(); m_dPointsPerPixel = iTestPointSize / dTestCharHeight; -// wxWHITE_BRUSH->SetColour (255, 255, 255); -// wxWHITE_BRUSH->SetStyle (wxSOLID); - m_driver.idWX()->SetBackground (*wxWHITE_BRUSH); + m_driver.idWX()->SetBackground (*wxWHITE_BRUSH); } #endif @@ -117,9 +121,19 @@ SGP::SGP (const SGPDriver& driver) setTextAngle (0.); setTextPointSize (12); - setColor (C_BLACK); + setColor (C_BLACK); + setLineStyle (LS_SOLID); } +SGP::~SGP() +{ +#if HAVE_WXWINDOWS + if (m_driver.isWX()) { + m_driver.idWX()->SetFont (wxNullFont); + delete m_pFont; + } +#endif +} void SGP::stylusNDC (double x, double y, bool beam) @@ -165,12 +179,19 @@ SGP::eraseWindow () g2_clear (m_driver.idG2()); #endif #if HAVE_WXWINDOWS - if (m_driver.isWX()) { - wxBrush brushWhite; + if (m_driver.isWX()) { + wxBrush brushWhite; brushWhite.SetColour(255,255,255); m_driver.idWX()->SetBackground(brushWhite); m_driver.idWX()->Clear(); m_driver.idWX()->SetBackground(wxNullBrush); +#if 1 + wxPen pen; + pen.SetColour(255,255,255); + m_driver.idWX()->SetBrush (brushWhite); + m_driver.idWX()->DrawRectangle (0, 0, m_iPhysicalXSize, m_iPhysicalYSize); + m_driver.idWX()->SetBrush (wxNullBrush); +#endif } #endif } @@ -373,7 +394,37 @@ SGP::setMarker (int idMarke, int iColor) //============================================================== void SGP::setLineStyle (int style) -{ +{ + m_iLinestyle = style; + +#if HAVE_WXWINDOWS + if (m_driver.isWX()) { + switch (m_iLinestyle) { + case LS_SOLID: + m_pen.SetStyle (wxSOLID); + break; + case LS_DASH1: + m_pen.SetStyle (wxLONG_DASH); + break; + case LS_DASH2: + m_pen.SetStyle (wxSHORT_DASH); + break; + case LS_DASH3: + m_pen.SetStyle (wxDOT_DASH); + break; + case LS_DASH4: + m_pen.SetStyle (wxCROSS_HATCH); + break; + case LS_DOTTED: + m_pen.SetStyle (wxDOT); + break; + default: + m_pen.SetStyle (wxSOLID); + break; + } + m_driver.idWX()->SetPen (m_pen); + } +#endif } //============================================================== @@ -436,8 +487,8 @@ SGP::setTextSize (double height) if (m_driver.isWX()) { double dHeightPixels = height * m_iPhysicalYSize; double dHeightPoints = dHeightPixels * m_dPointsPerPixel; - m_font.SetPointSize (nearest(dHeightPoints)); - m_driver.idWX()->SetFont (m_font); + m_pFont->SetPointSize (nearest(dHeightPoints)); + m_driver.idWX()->SetFont (*m_pFont); } #endif } @@ -453,8 +504,8 @@ SGP::setTextNDCSize (double height) #if HAVE_WXWINDOWS if (m_driver.isWX()) { double dHeightPoints = dHeightPixels * m_dPointsPerPixel; - m_font.SetPointSize (nearest(dHeightPoints)); - m_driver.idWX()->SetFont (m_font); + m_pFont->SetPointSize (nearest(dHeightPoints)); + m_driver.idWX()->SetFont (*m_pFont); } #endif } @@ -468,8 +519,8 @@ SGP::setTextPointSize (double height) #endif #if HAVE_WXWINDOWS if (m_driver.isWX()) { - m_font.SetPointSize (static_cast(height+0.5)); - m_driver.idWX()->SetFont (m_font); + m_pFont->SetPointSize (static_cast(height+0.5)); + m_driver.idWX()->SetFont (*m_pFont); } #endif } @@ -481,11 +532,14 @@ SGP::getTextExtent (const char* szText, double* worldW, double* worldH) if (m_driver.isWX()) { wxString sText (szText); wxCoord deviceW, deviceH; - m_driver.idWX()->GetTextExtent (sText, &deviceW, &deviceH); - *worldW = static_cast(deviceW) / static_cast(m_iPhysicalXSize);; - *worldH = static_cast(deviceH) / static_cast(m_iPhysicalYSize); - *worldW *= (xw_max - xw_min); - *worldH *= (yw_max - yw_min); + m_driver.idWX()->GetTextExtent (sText, &deviceW, &deviceH); + if (m_dTextAngle == 90 || m_dTextAngle == -90) { + wxCoord temp = deviceW; + deviceW = deviceH; + deviceH = temp; + } + *worldW = (xw_max - xw_min) * deviceW / static_cast(m_iPhysicalXSize);; + *worldH = (yw_max - yw_min) * deviceH / static_cast(m_iPhysicalYSize); } #endif } @@ -498,10 +552,11 @@ SGP::getCharHeight () #if HAVE_WXWINDOWS if (m_driver.isWX()) { dHeight = m_driver.idWX()->GetCharHeight(); - dHeight /= static_cast(m_iPhysicalYSize); + dHeight /= static_cast(m_iPhysicalYSize); + dHeight /= (yv_max - yv_min); // scale to viewport; } #endif - dHeight *= (yw_max - yw_min); + dHeight *= (yw_max - yw_min); // scale to world coordinates return dHeight; } @@ -513,10 +568,11 @@ SGP::getCharWidth () #if HAVE_WXWINDOWS if (m_driver.isWX()) { dWidth = m_driver.idWX()->GetCharWidth(); - dWidth /= static_cast(m_iPhysicalXSize); + dWidth /= static_cast(m_iPhysicalXSize); + dWidth /= (xv_max - xv_min); // scale to viewport } #endif - dWidth *= (xw_max - xw_min); + dWidth *= (xw_max - xw_min); //scale to world coordinates return dWidth; }