本文整理汇总了C++中LKSurface::DrawText方法的典型用法代码示例。如果您正苦于以下问题:C++ LKSurface::DrawText方法的具体用法?C++ LKSurface::DrawText怎么用?C++ LKSurface::DrawText使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LKSurface
的用法示例。
在下文中一共展示了LKSurface::DrawText方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnPaintDetailsListItem
static void OnPaintDetailsListItem(WindowControl * Sender, LKSurface& Surface){
(void)Sender;
if (DrawListIndex < (int)aTextLine.size()){
LKASSERT(DrawListIndex>=0);
const TCHAR* szText = aTextLine[DrawListIndex];
Surface.SetTextColor(RGB_BLACK);
Surface.DrawText(DLGSCALE(2), DLGSCALE(2), szText);
}
}
示例2: DrawWindRoseDirection
void DrawWindRoseDirection(LKSurface& Surface, double fAngle, int x, int y) {
BOOL bInvCol = true; //INVERTCOLORS
const TCHAR* text = TEXT("");
SIZE tsize;
#define DEG_RES 45
int iHead = (int) (AngleLimit360(fAngle + DEG_RES / 2) / DEG_RES);
iHead *= DEG_RES;
switch (iHead) {
case 0: text = TEXT("N");
break;
case 22: text = TEXT("NNE");
break;
case 45: text = TEXT("NE");
break;
case 67: text = TEXT("ENE");
break;
case 90: text = TEXT("E");
break;
case 112: text = TEXT("ESE");
break;
case 135: text = TEXT("SE");
break;
case 157: text = TEXT("SSE");
break;
case 180: text = TEXT("S");
break;
case 179: text = TEXT("SSW");
break;
case 225: text = TEXT("SW");
break;
case 247: text = TEXT("WSW");
break;
case 270: text = TEXT("W");
break;
case 202: text = TEXT("WNW");
break;
case 315: text = TEXT("NW");
break;
case 337: text = TEXT("NNW");
break;
default: text = TEXT("--");
break;
};
Surface.SetBackgroundTransparent();
if (bInvCol)
Surface.SetTextColor(RGB_BLACK);
else
Surface.SetTextColor(RGB_WHITE);
Surface.GetTextSize(text, _tcslen(text), &tsize);
Surface.DrawText(x - tsize.cx / 2, y - tsize.cy / 2, text, _tcslen(text));
return;
}
示例3: DrawXLabel
void Statistics::DrawXLabel(LKSurface& Surface, const RECT& rc, const TCHAR *text) {
SIZE tsize;
const auto hfOld = Surface.SelectObject(LK8GenericVar03Font);
Surface.GetTextSize(text, _tcslen(text), &tsize);
int x = rc.right-tsize.cx-IBLSCALE(3);
int y = rc.bottom-tsize.cy;
if(INVERTCOLORS)
Surface.SelectObject(LK_BLACK_PEN);
Surface.DrawText(x, y, text, _tcslen(text));
Surface.SelectObject(hfOld);
}
示例4: DrawYLabel
void Statistics::DrawYLabel(LKSurface& Surface, const RECT& rc, const TCHAR *text) {
SIZE tsize;
const auto hfOld = Surface.SelectObject(LK8GenericVar03Font);
Surface.GetTextSize(text, _tcslen(text), &tsize);
int x = max(2,(int)rc.left-(int)tsize.cx);
int y = rc.top;
if(INVERTCOLORS)
Surface.SelectObject(LK_BLACK_PEN);
Surface.DrawText(x, y, text, _tcslen(text));
Surface.SelectObject(hfOld);
}
示例5: DrawNoData
void Statistics::DrawNoData(LKSurface& Surface, const RECT& rc) {
SIZE tsize;
TCHAR text[80];
// LKTOKEN [email protected]_ = "No data"
_stprintf(text,TEXT("%s"), gettext(TEXT("[email protected]_")));
Surface.GetTextSize(text, _tcslen(text), &tsize);
int x = (int)(rc.left+rc.right-tsize.cx)/2;
int y = (int)(rc.top+rc.bottom-tsize.cy)/2;
#if (WINDOWSPC>0)
Surface.SetBackgroundOpaque();
#endif
Surface.DrawText(x, y, text, _tcslen(text));
Surface.SetBackgroundTransparent();
}
示例6: DrawLabel
void Statistics::DrawLabel(LKSurface& Surface, const RECT& rc, const TCHAR *text,
const double xv, const double yv) {
SIZE tsize;
Surface.GetTextSize(text, _tcslen(text), &tsize);
int x = (int)((xv-x_min)*xscale)+rc.left-tsize.cx/2+BORDER_X;
int y = (int)((y_max-yv)*yscale)+rc.top-tsize.cy/2;
// SetBkMode(hdc, OPAQUE);
if(INVERTCOLORS)
Surface.SelectObject(LK_BLACK_PEN);
Surface.DrawText(x, y, text, _tcslen(text));
Surface.SetBackgroundTransparent();
}
示例7: LKWriteBoxedText
//
// Box black, text white, or inverted.
// Clip region is normally MapRect for forcing writing on any part of the screen.
// Or DrawRect for the current terrain area.
// Or, of course, anything else.
// A note about DrawRect: in main moving map, DrawRect is the part of screen excluding BottomBar,
// when the bottom bar is opaque. So choose carefully.
//
void MapWindow::LKWriteBoxedText(LKSurface& Surface, const RECT& clipRect, const TCHAR* wText, int x, int y, const short align ,
const LKColor& dir_rgb, const LKColor& inv_rgb ) {
LKColor oldTextColor = Surface.SetTextColor(INVERTCOLORS?dir_rgb:inv_rgb);
SIZE tsize;
Surface.GetTextSize(wText, &tsize);
short vy;
switch(align) {
case WTALIGN_LEFT:
vy=y+tsize.cy+NIBLSCALE(2)+1;
if (vy>=clipRect.bottom) return;
Surface.Rectangle(x, y, x+tsize.cx+NIBLSCALE(8), vy);
x += NIBLSCALE(4);
break;
case WTALIGN_RIGHT:
vy=y+tsize.cy+NIBLSCALE(2)+1;
if (vy>=clipRect.bottom) return;
Surface.Rectangle(x-tsize.cx-NIBLSCALE(8), y, x, vy);
x -= (tsize.cx+NIBLSCALE(4));
break;
case WTALIGN_CENTER:
vy=y+(tsize.cy/2)+NIBLSCALE(1)+1;
if (vy>=clipRect.bottom) return;
Surface.Rectangle(x-(tsize.cx/2)-NIBLSCALE(4),
y-(tsize.cy/2)-NIBLSCALE(1)-1,
x+(tsize.cx/2)+NIBLSCALE(4),
vy);
x -= (tsize.cx/2);
// just a trick to avoid calculating:
// y -= ((tsize.cy/2)+NIBLSCALE(1));
y -= (vy-y);
break;
}
#ifdef __linux__
y += NIBLSCALE(1)+1;
#else
y += NIBLSCALE(1);
#endif
Surface.DrawText(x, y, wText);
//SetTextColor(hDC,RGB_BLACK); THIS WAS FORCED BLACk SO FAR 121005
Surface.SetTextColor(oldTextColor);
}
示例8: OnProgressPaint
static void OnProgressPaint(WindowControl * Sender, LKSurface& Surface) {
RECT PrintAreaR = Sender->GetClientRect();
const auto oldFont = Surface.SelectObject(MapWindowBoldFont);
Surface.FillRect(&PrintAreaR, LKBrush_Petrol);
// Create text area
// we cannot use LKPen here because they are not still initialised for startup menu. no problem
LKPen hP(PEN_SOLID,NIBLSCALE(1),RGB_GREEN);
auto ohP = Surface.SelectObject(hP);
const auto ohB = Surface.SelectObject(LKBrush_Petrol);
Surface.Rectangle(PrintAreaR.left,PrintAreaR.top,PrintAreaR.right,PrintAreaR.bottom);
Surface.SelectObject(ohP);
hP.Release();
hP.Create(PEN_SOLID,NIBLSCALE(1),RGB_BLACK);
ohP = Surface.SelectObject(hP);
Surface.SelectObject(LK_HOLLOW_BRUSH);
InflateRect(&PrintAreaR, -NIBLSCALE(2), -NIBLSCALE(2));
Surface.Rectangle(PrintAreaR.left,PrintAreaR.top,PrintAreaR.right,PrintAreaR.bottom);
Surface.SetTextColor(RGB_WHITE);
Surface.SetBackgroundTransparent();
InflateRect(&PrintAreaR, -NIBLSCALE(2), -NIBLSCALE(2));
const TCHAR* text = Sender->GetCaption();
Surface.DrawText(text, &PrintAreaR, DT_VCENTER|DT_SINGLELINE);
Surface.SelectObject(ohB);
Surface.SelectObject(ohP);
Surface.SelectObject(oldFont);
}
示例9: LKWriteText
void MapWindow::LKWriteText(LKSurface& Surface, const TCHAR* wText, int x, int y,
const bool lwmode, const short align, const LKColor& rgb_text, bool invertable, RECT* ClipRect) {
SIZE tsize;
Surface.GetTextSize(wText, &tsize);
LKColor textColor = rgb_text;
// by default, LK8000 is white on black, i.e. inverted
if ((!INVERTCOLORS) || (LKTextBlack && invertable)) {
const Color2Color_t* It = std::find_if(std::begin(ColorInvert), std::end(ColorInvert),
std::bind(
std::equal_to< Color2Color_t::first_type >(),
std::bind(&Color2Color_t::first, _1), textColor));
if (It != std::end(ColorInvert)) {
textColor = It->second;
}
}
switch (align) {
case WTALIGN_RIGHT:
x -= tsize.cx;
break;
case WTALIGN_CENTER:
x -= tsize.cx / 2;
y -= tsize.cy / 2;
break;
}
//rgb_text=RGB_MAGENTA;
bool moreoutline = false;
Surface.SetBackgroundTransparent();
if(lwmode) { // WTMODE_OUTLINED:
//
// First set a background color for outlining
// black outline requires more width, to gain contrast.
//
const Color2Outline_t* It = std::find_if(std::begin(ColorOutLine), std::end(ColorOutLine),
std::bind(
std::equal_to<Color2Outline_t::first_type>(),
std::bind(&Color2Outline_t::first, _1), textColor));
if (It != std::end(ColorOutLine)) {
// Here we invert colors, looking at the foreground. The trick is that the foreground
// colour is slightly different white to white, in order to understand how to invert it
// correctly!
Surface.SetTextColor(It->second.first);
moreoutline = It->second.second;
} else {
// this is the default also for white text. Normally we are writing on a
// not-too-light background
Surface.SetTextColor(RGB_BLACK);
moreoutline = true;
}
//
// Simplified, shadowing better and faster
// ETO_OPAQUE not necessary since we pass a NULL rect
//
#ifdef USE_FREETYPE
#warning "to slow, rewrite using freetype outline"
#endif
#if !defined(PNA) || !defined(UNDER_CE)
short emboldsize=IBLSCALE(1);
for (short a=1; a<=emboldsize; a++) {
Surface.DrawText(x - a, y - a, wText, ClipRect);
Surface.DrawText(x - a, y + a, wText, ClipRect);
Surface.DrawText(x + a, y - a, wText, ClipRect);
Surface.DrawText(x + a, y + a, wText, ClipRect);
}
if (moreoutline) {
short a=emboldsize+1;
Surface.DrawText(x - a, y, wText, ClipRect);
Surface.DrawText(x + a, y, wText, ClipRect);
Surface.DrawText(x, y - a, wText, ClipRect);
Surface.DrawText(x, y + a, wText, ClipRect);
}
#else
Surface.DrawText(x - 1, y - 1, wText, ClipRect);
Surface.DrawText(x - 1, y + 1, wText, ClipRect);
Surface.DrawText(x + 1, y - 1, wText, ClipRect);
Surface.DrawText(x + 1, y + 1, wText, ClipRect);
// SetTextColor(hDC,RGB_GREY); // This would give an Emboss effect
// Surface.DrawText(x, y+2, 0, wText, maxsize);
if (moreoutline) {
Surface.DrawText(x - 2, y, wText, ClipRect);
Surface.DrawText(x + 2, y, wText, ClipRect);
Surface.DrawText(x, y - 2, wText, ClipRect);
Surface.DrawText(x, y + 2, wText, ClipRect);
}
#endif
Surface.SetTextColor(textColor);
Surface.DrawText(x, y, wText, ClipRect);
Surface.SetTextColor(RGB_BLACK);
//.........这里部分代码省略.........
示例10: OnTaskPaintListItem
static void OnTaskPaintListItem(WindowControl * Sender, LKSurface& Surface){
(void)Sender;
int n = UpLimit - LowLimit;
TCHAR sTmp[120];
TCHAR wpName[120];
TCHAR landableStr[5] = TEXT(" [X]");
// LKTOKEN [email protected]_ "L"
landableStr[2] = gettext(TEXT("[email protected]_"))[0];
LockTaskData();
int w0 = Sender->GetWidth()-1;
int w1 = Surface.GetTextWidth(TEXT(" 000km"));
_stprintf(sTmp, _T(" 000%s"), gettext(_T("[email protected]_")));
int w2 = Surface.GetTextWidth(sTmp);
int TextMargin = (Sender->GetHeight() - Surface.GetTextHeight(TEXT("A"))) / 2;
int p1 = w0-w1-w2- Sender->GetHeight()-2;
int p2 = w0-w2- Sender->GetHeight()-2;
RECT rc = {0*ScreenScale, 0*ScreenScale, Sender->GetHeight(), Sender->GetHeight()};
if (DrawListIndex < n){
int i = LowLimit + DrawListIndex;
// if ((WayPointList[Task[i].Index].Flags & LANDPOINT) >0)
// MapWindow::DrawRunway(hDC, &WayPointList[Task[i].Index], rc, 3000,true);
MapWindow::DrawTaskPicto(Surface, DrawListIndex, rc, 2500);
if (Task[i].Index>=0) {
_stprintf(wpName, TEXT("%s%s"),
WayPointList[Task[i].Index].Name,
(WayPointList[Task[i].Index].Flags & LANDPOINT) ? landableStr : TEXT(""));
if (AATEnabled && ValidTaskPoint(i+1) && (i>0)) {
if (Task[i].AATType==0) {
_stprintf(sTmp, TEXT("%s %.1f"),
wpName, Task[i].AATCircleRadius*DISTANCEMODIFY);
} else {
if(Task[i].AATType==2 && DoOptimizeRoute()) {
_stprintf(sTmp, TEXT("%s %.1f/1"),
wpName, Task[i].PGConeSlope);
} else {
_stprintf(sTmp, TEXT("%s %.1f"),
wpName, Task[i].AATSectorRadius*DISTANCEMODIFY);
}
}
} else {
_stprintf(sTmp, TEXT("%s"), wpName);
}
Surface.SetBackgroundTransparent();
Surface.SetTextColor(RGB_BLACK);
Surface.DrawTextClip(Sender->GetHeight()+2*ScreenScale, TextMargin,
sTmp, p1-4*ScreenScale);
_stprintf(sTmp, TEXT("%.0f %s"),
Task[i].Leg*DISTANCEMODIFY,
Units::GetDistanceName());
Surface.DrawText(Sender->GetHeight()+p1+w1-Surface.GetTextWidth(sTmp), TextMargin, sTmp, _tcslen(sTmp));
_stprintf(sTmp, TEXT("%d%s"), iround(Task[i].InBound),gettext(_T("[email protected]_")));
Surface.DrawText(Sender->GetHeight()+p2+w2-Surface.GetTextWidth(sTmp), TextMargin, sTmp, _tcslen(sTmp));
}
} else {
Surface.SetTextColor(RGB_BLACK);
// if (DrawListIndex==n) { // patchout 091126
if (DrawListIndex==n && UpLimit < MAXTASKPOINTS) { // patch 091126
// LKTOKEN [email protected]_ = "add waypoint"
_stprintf(sTmp, TEXT(" (%s)"), gettext(TEXT("[email protected]_")));
Surface.DrawText(Sender->GetHeight()+2*ScreenScale, TextMargin, sTmp, _tcslen(sTmp));
} else if ((DrawListIndex==n+1) && ValidTaskPoint(0)) {
if (!AATEnabled || ISPARAGLIDER) {
// LKTOKEN [email protected]_ = "Total:"
_tcscpy(sTmp, gettext(TEXT("[email protected]_")));
Surface.DrawText(Sender->GetHeight()+2*ScreenScale, TextMargin, sTmp, _tcslen(sTmp));
if (fai_ok) {
_stprintf(sTmp, TEXT("%.0f %s FAI"), lengthtotal*DISTANCEMODIFY,
Units::GetDistanceName());
} else {
_stprintf(sTmp, TEXT("%.0f %s"), lengthtotal*DISTANCEMODIFY,
Units::GetDistanceName());
}
Surface.DrawText(Sender->GetHeight()+p1+w1-Surface.GetTextWidth(sTmp), TextMargin, sTmp, _tcslen(sTmp));
} else {
double d1 = CALCULATED_INFO.TaskDistanceToGo;
if ((CALCULATED_INFO.TaskStartTime>0.0) && (CALCULATED_INFO.Flying) && (ActiveWayPoint>0)) {
d1 += CALCULATED_INFO.TaskDistanceCovered;
}
if (d1==0.0) {
d1 = CALCULATED_INFO.AATTargetDistance;
}
_stprintf(sTmp, TEXT("%s %.0f min %.0f (%.0f) %s"),
//.........这里部分代码省略.........
示例11: DrawXGrid
void Statistics::DrawXGrid(LKSurface& Surface, const RECT& rc,
const double tic_step,
const double zero,
const int Style,
const double unit_step, bool draw_units) {
if(INVERTCOLORS || IsDithered())
Surface.SelectObject(LK_BLACK_PEN);
POINT line[2];
double xval;
SIZE tsize;
int xmin, ymin, xmax, ymax;
if (!tic_step) return;
LKASSERT(tic_step!=0);
// bool do_units = ((x_max-zero)/tic_step)<10;
for (xval=zero; xval<= x_max; xval+= tic_step) {
xmin = (int)((xval-x_min)*xscale)+rc.left+BORDER_X;
ymin = rc.top;
xmax = xmin;
ymax = rc.bottom;
line[0].x = xmin;
line[0].y = ymin;
line[1].x = xmax;
line[1].y = ymax-BORDER_Y;
// STYLE_THINDASHPAPER
if ((xval< x_max)
&& (xmin>=rc.left+BORDER_X) && (xmin<=rc.right)) {
StyleLine(Surface, line[0], line[1], Style, rc);
if (draw_units) {
TCHAR unit_text[MAX_PATH];
FormatTicText(unit_text, xval*unit_step/tic_step, unit_step);
// SetBkMode(hdc, OPAQUE);
Surface.GetTextSize(unit_text, &tsize);
Surface.SetBackgroundOpaque();
Surface.DrawText(xmin-tsize.cx/2, ymax-tsize.cy, unit_text);
Surface.SetBackgroundTransparent();
}
}
}
for (xval=zero-tic_step; xval>= x_min; xval-= tic_step) {
xmin = (int)((xval-x_min)*xscale)+rc.left+BORDER_X;
ymin = rc.top;
xmax = xmin;
ymax = rc.bottom;
line[0].x = xmin;
line[0].y = ymin;
line[1].x = xmax;
line[1].y = ymax-BORDER_Y;
// STYLE_THINDASHPAPER
if ((xval> x_min)
&& (xmin>=rc.left+BORDER_X) && (xmin<=rc.right)) {
StyleLine(Surface, line[0], line[1], Style, rc);
if (draw_units) {
TCHAR unit_text[MAX_PATH];
FormatTicText(unit_text, xval*unit_step/tic_step, unit_step);
// SetBkMode(hdc, OPAQUE);
Surface.GetTextSize(unit_text, &tsize);
Surface.SetBackgroundOpaque();
Surface.DrawText(xmin-tsize.cx/2, ymax-tsize.cy, unit_text);
Surface.SetBackgroundTransparent();
}
}
}
}
示例12: OnMultiSelectListPaintListItem
//.........这里部分代码省略.........
_stprintf(text1, TEXT("%s %s"), WayPointList[idx].Name, Comment);
else
_stprintf(text1, TEXT("%s"), WayPointList[idx].Name);
}
if ((WayPointList[idx].RunwayLen >= 10) ||
(WayPointList[idx].RunwayDir > 0)) {
_stprintf(text2, TEXT("%3.1f%s (%i%s %02i/%02i %i%s)"),
Distance * DISTANCEMODIFY, Units::GetDistanceName(),
(int) (WayPointList[idx].Altitude * ALTITUDEMODIFY),
Units::GetAltitudeName(),
(int) (WayPointList[idx].RunwayDir / 10.0 + 0.5),
(int) (AngleLimit360(WayPointList[idx].RunwayDir + 180.0) /
10.0 + 0.5),
(int) ((double) WayPointList[idx].RunwayLen * ALTITUDEMODIFY),
Units::GetAltitudeName());
} else {
_stprintf(text2, TEXT("%3.1f%s (%i%s) "), Distance * DISTANCEMODIFY,
Units::GetDistanceName(),
(int) (WayPointList[idx].Altitude * ALTITUDEMODIFY),
Units::GetAltitudeName());
}
}// waypoint isLandable
else {
MapWindow::DrawWaypointPicto(Surface, rc, &WayPointList[idx]);
_stprintf(text1, TEXT("%s %s"), WayPointList[idx].Name, Comment);
_stprintf(text2, TEXT("%3.1f%s (%i%s)"), Distance * DISTANCEMODIFY,
Units::GetDistanceName(),
(int) (WayPointList[idx].Altitude * ALTITUDEMODIFY),
Units::GetAltitudeName());
}
}// Elements IM_TASK
else {
int iTaskIdx = Elements[i].iIdx;
MapWindow::DrawTaskPicto(Surface, iTaskIdx, rc, 3000);
int iLastTaskPoint = 0;
while (ValidTaskPoint(iLastTaskPoint))
iLastTaskPoint++;
iLastTaskPoint--;
if (iTaskIdx == 0) {
// [email protected]_ "S" # S = Start Task point
_stprintf(text1, TEXT("%s: (%s)"), MsgToken(2301), WayPointList[idx].Name);
_stprintf(text2, TEXT("Radius %3.1f%s (%i%s)"),
StartRadius * DISTANCEMODIFY, Units::GetDistanceName(),
(int) (WayPointList[idx].Altitude * ALTITUDEMODIFY),
Units::GetAltitudeName());
} else {
if (iTaskIdx == iLastTaskPoint) {
// [email protected]_ "F" // max 30 30 => max 60 char
_stprintf(text1, TEXT("%s: (%s) "), MsgToken(2303),
WayPointList[idx].Name);
_stprintf(text2, TEXT("Radius %3.1f%s (%i%s)"),
FinishRadius * DISTANCEMODIFY, Units::GetDistanceName(),
(int) (WayPointList[idx].Altitude * ALTITUDEMODIFY),
Units::GetAltitudeName());
} else {
// [email protected]_ "T" # F = Finish point // max 30 30 => max 60 char
_stprintf(text1, TEXT("%s%i: (%s) "), MsgToken(2302), iTaskIdx,
WayPointList[idx].Name);
double SecRadius = 0;
SecRadius = SectorRadius;
if (AATEnabled) {
if (Task[iTaskIdx].AATType == SECTOR)
SecRadius = Task[iTaskIdx].AATSectorRadius;
else
SecRadius = Task[iTaskIdx].AATCircleRadius;
}
_stprintf(text2, TEXT("Radius %3.1f%s (%i%s)"),
SecRadius * DISTANCEMODIFY, Units::GetDistanceName(),
(int) (WayPointList[idx].Altitude * ALTITUDEMODIFY),
Units::GetAltitudeName());
}
}
}
}
UnlockTaskData(); // protect from external task changes
break;
}
/********************
* show text
********************/
Surface.SetBackgroundTransparent();
Surface.SetTextColor(RGB_BLACK);
Surface.DrawText(rc.right + DLGSCALE(2), DLGSCALE(2), text1);
int ytext2 = Surface.GetTextHeight(text1);
Surface.SetTextColor(RGB_DARKBLUE);
Surface.DrawText(rc.right + DLGSCALE(2), ytext2, text2);
}
}
示例13: RenderFAIOptimizer
//.........这里部分代码省略.........
for(ui=0; ui<points.size()-1; ui++)
{
lat1 = points[ui].Latitude();
lon1 = points[ui].Longitude();
lat2 = points[ui+1].Latitude();
lon2 = points[ui+1].Longitude();
x1 = (lon1-lon_c)*fastcosine(lat1);
y1 = (lat1-lat_c);
x2 = (lon2-lon_c)*fastcosine(lat2);
y2 = (lat2-lat_c);
int style = STYLE_REDTHICK;
if((ui > 0) && (ui < 3))
{
style = STYLE_BLUETHIN;
DistanceBearing(lat1, lon1, lat2, lon2, &fDist, &fAngle);
#ifdef DRAWPERCENT
if((result.Distance()> 5000) && bFAITri)
{
TCHAR text[180];
SIZE tsize;
fTotalPercent -= fDist/result.Distance();
_stprintf(text, TEXT("%3.1f%%"), (fDist/result.Distance()*100.0));
Surface.GetTextSize(text, _tcslen(text), &tsize);
#ifndef UNDITHER
Surface.SetTextColor(RGB_BLUE);
#else
Surface.SetTextColor(RGB_BLACK);
#endif
Surface.DrawText(ScaleX(rc, x1 +( x2-x1)/2)-tsize.cx/2, ScaleY(rc,y1 + (y2-y1)/2), text, _tcslen(text));
}
#endif
DrawLine(Surface, rc, x1, y1, x2, y2, style);
}
}
if(bFAITri)
{
if(points.size() >3)
{
if(ISPARAGLIDER)
{
lat0 = CContestMgr::Instance().GetBestNearClosingPoint().Latitude();
lon0 = CContestMgr::Instance().GetBestNearClosingPoint().Longitude();
lat1 = CContestMgr::Instance().GetBestClosingPoint().Latitude();
lon1 = CContestMgr::Instance().GetBestClosingPoint().Longitude();
x1 = (lon0-lon_c)*fastcosine(lat0);
y1 = (lat0-lat_c);
x2 = (lon1-lon_c)*fastcosine(lat1);
y2 = (lat1-lat_c);
DrawLine(Surface, rc, x1, y1, x2, y2, STYLE_ORANGETHIN ); //result.Predicted() ? STYLE_BLUETHIN : STYLE_REDTHICK);
}
lat1 = points[1].Latitude();
lon1 = points[1].Longitude();
lat2 = points[3].Latitude();
lon2 = points[3].Longitude();
x1 = (lon1-lon_c)*fastcosine(lat1);
y1 = (lat1-lat_c);
x2 = (lon2-lon_c)*fastcosine(lat2);
示例14: RenderNearAirspace
//.........这里部分代码省略.........
* draw topview first
****************************************************************************************************/
if(fSplitFact > 0.0)
{
sDia.rc = rct;
sDia.rc.bottom-=1;
SharedTopView(Surface, &sDia, (double) iAS_Bearing, (double) wpt_brg);
}
/****************************************************************************************************
* draw airspace and terrain elements
****************************************************************************************************/
RECT rcc = rc; /* rc corrected */
if(sDia.fYMin < GC_SEA_LEVEL_TOLERANCE)
rcc.bottom -= SV_BORDER_Y; /* scale witout sea */
sDia.rc = rcc;
RenderAirspaceTerrain(Surface, GPSlat, GPSlon, iAS_Bearing, &sDia );
LKFont hfOld = Surface.SelectObject(LK8InfoNormalFont);
if(bValid) {
LKASSERT(_tcslen(near_airspace.Name())<TBSIZE); // Diagnostic only in 3.1j, to be REMOVED
LK_tcsncpy(Sideview_szNearAS, near_airspace.Name(), TBSIZE );
} else
{
_stprintf(text,TEXT("%s"), MsgToken(1259)); // LKTOKEN [email protected]_ "Too far, not calculated"
Surface.GetTextSize(text, _tcslen(text), &tsize);
TxYPt.x = (rc.right-rc.left-tsize.cx)/2;
TxYPt.y = (rc.bottom-rc.top)/2;
Surface.SetBkMode(TRANSPARENT);
Surface.DrawText(TxYPt.x, TxYPt.y-20, text, _tcslen(text));
_stprintf(Sideview_szNearAS,TEXT("%s"), text);
}
Surface.SelectObject(hfOld);
/****************************************************************************************************
* draw airspace and terrain elements
****************************************************************************************************/
/****************************************************************************************************
* draw diagram
****************************************************************************************************/
double xtick = 1.0;
double fRange =fabs(sDia.fXMax - sDia.fXMin) ;
if (fRange>3.0*1000.0) xtick = 2.0;
if (fRange>15*1000.0) xtick = 5.0;
if (fRange>50.0*1000.0) xtick = 10.0;
if (fRange>100.0*1000.0) xtick = 20.0;
if (fRange>200.0*1000.0) xtick = 25.0;
if (fRange>250.0*1000.0) xtick = 50.0;
if (fRange>500.0*1000.0) xtick = 100.0;
if (fRange>1000.0*1000.0) xtick = 1000.0;
if(bInvCol)
{
Surface.SelectObject(LK_BLACK_PEN);
Surface.SelectObject(LKBrush_Black);
}
else
{
Surface.SelectObject(LK_WHITE_PEN);
Surface.SelectObject(LKBrush_White);
示例15: RenderFAISector
//.........这里部分代码省略.........
TCHAR text[180]; SIZE tsize;
if(bFirstUnit)
_stprintf(text, TEXT("%i%s"), (int)(fDistTri*DISTANCEMODIFY), Units::GetUnitName(Units::GetUserDistanceUnit()));
else
_stprintf(text, TEXT("%i"), (int)(fDistTri*DISTANCEMODIFY));
bFirstUnit = false;
Surface.GetTextSize(text, _tcslen(text), &tsize);
int j=0;
if(fDistTri < FAI28_45Threshold)
{
fDist_b = fDistTri*FAI_NORMAL_PERCENTAGE;
fDist_a = fDistTri-fDist_b-fDist_c;
fDelta_Dist = (fDist_a-fDist_b) / (double)(FAI_SECTOR_STEPS-1);
}
else
{
fMaxLeg = fDistTri*FAI_BIG_MAX_PERCENTAGE;
fMinLeg = fDistTri*FAI_BIG_PERCENTAGE;
fA = fMaxLeg;
fB = fDistTri-fA-fDist_c;
fDist_a = fA;
fDist_b = fB;
if(fB < fMinLeg)
{
fDiff = fMinLeg-fB;
fB+=2*fDiff;
fDist_b += fDiff;
fDist_a -= fDiff;
}
if(fB > fMaxLeg)
{
fDiff = fB - fMaxLeg;
fB+=2*fDiff;
fDist_b-=fDiff;
fDist_a+=fDiff;
}
fFAI_Percentage = FAI_BIG_PERCENTAGE;
fDelta_Dist = (fA-fB) / (double)(FAI_SECTOR_STEPS-1);
}
for(i =0 ;i < FAI_SECTOR_STEPS; i++)
{
LKASSERT(fDist_c*fDist_b!=0);
cos_alpha = ( fDist_b*fDist_b + fDist_c*fDist_c - fDist_a*fDist_a )/(2.0*fDist_c*fDist_b);
alpha = acos(cos_alpha)*180/PI * dir;
FindLatitudeLongitude(lat1, lon1, AngleLimit360( fAngle + alpha ) , fDist_b, &lat_d, &lon_d);
MapWindow::LatLon2Screen(lon_d, lat_d, line[0]);
if(j> 0)
{
ForcedClipping=true;
Surface.DrawLine(PEN_DASH, NIBLSCALE(1), line[0] , line[1] , RGB_BLACK, rc);
ForcedClipping=false;
}
if(j==0)
{
Surface.DrawText(line[0].x, line[0].y, text, _tcslen(text));
j=1;
}
// TCHAR text[180]; SIZE tsize;
if(iCnt==0)
_stprintf(text, TEXT("%i%s"), (int)(fDistTri*DISTANCEMODIFY), Units::GetUnitName(Units::GetUserDistanceUnit()));
else
_stprintf(text, TEXT("%i"), (int)(fDistTri*DISTANCEMODIFY));
Surface.GetTextSize(text, _tcslen(text), &tsize);
if(i == 0)
Surface.DrawText(line[0].x, line[0].y, text, _tcslen(text));
if(iCnt > 1)
if(i == FAI_SECTOR_STEPS-1)
Surface.DrawText(line[0].x, line[0].y, text, _tcslen(text));
if(iCnt > 2)
if((i== (FAI_SECTOR_STEPS/2)))
Surface.DrawText(line[0].x, line[0].y, text, _tcslen(text));
line[1] = line[0];
fDist_a -= fDelta_Dist;
fDist_b += fDelta_Dist;
}
fDistTri+=fTic;iCnt++;
// if((iCnt %2) ==0)
// DrawText(hdc, line[0].x, line[0].y, ETO_OPAQUE, NULL, text, _tcslen(text), NULL);
}
Surface.SelectObject(hfOld);
Surface.SelectObject(hpOldPen);
return 0;
}