本文整理汇总了C++中ValidTaskPoint函数的典型用法代码示例。如果您正苦于以下问题:C++ ValidTaskPoint函数的具体用法?C++ ValidTaskPoint怎么用?C++ ValidTaskPoint使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ValidTaskPoint函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GotoWaypoint
void GotoWaypoint(const int wpnum) {
if (!ValidWayPoint(wpnum)) {
DoStatusMessage(_T("ERR-639 INVALID GOTO WPT"));
return;
}
if (ValidTaskPoint(ActiveWayPoint) && ValidTaskPoint(1)) {
TCHAR wpname[NAME_SIZE+1];
_tcscpy(wpname,WayPointList[wpnum].Name);
wpname[10] = '\0';
if (MessageBoxX(
// LKTOKEN [email protected]_ = "CONFIRM GOTO, ABORTING TASK?"
gettext(TEXT("[email protected]_")),
// LKTOKEN [email protected]_ = "A task is running!"
gettext(TEXT("[email protected]_")),
mbYesNo) == IdYes) {
LockTaskData();
FlyDirectTo(wpnum);
OvertargetMode=OVT_TASK;
UnlockTaskData();
}
} else {
LockTaskData();
FlyDirectTo(wpnum);
OvertargetMode=OVT_TASK;
UnlockTaskData();
}
}
示例2: CheckCondition
bool CheckCondition(NMEA_INFO *Basic, DERIVED_INFO *Calculated) {
if (!Calculated->Flying || !ValidTaskPoint(ActiveWayPoint)) {
return false;
}
tad = Calculated->TaskAltitudeDifference*0.2+0.8*tad;
bool BeforeFinalGlide =
(ValidTaskPoint(ActiveWayPoint+1) && !Calculated->FinalGlide);
if (BeforeFinalGlide) {
Interval_Notification = 60*5;
if ((tad>50) && (last_tad< -50)) {
// report above final glide early
return true;
} else if (tad< -50) {
last_tad = tad;
}
} else {
Interval_Notification = 60;
if (Calculated->FinalGlide) {
if ((last_tad< -50) && (tad>1)) {
// just reached final glide, previously well below
return true;
}
if ((last_tad> 1) && (tad< -50)) {
// dropped well below final glide, previously above
last_tad = tad;
return true; // JMW this was true before
}
}
}
return false;
};
示例3: OnLoadClicked
static void OnLoadClicked(WndButton* pWnd){ // 091216
TCHAR file_name[MAX_PATH];
WndProperty* wp;
DataFieldFileReader *dfe;
wp = (WndProperty*)wf->FindByName(TEXT("prpFile"));
if (!wp) return;
wp->OnLButtonDown((POINT){0,0});
dfe = (DataFieldFileReader*) wp->GetDataField();
int file_index = dfe->GetAsInteger();
if (file_index>0) {
if (ValidTaskPoint(ActiveWayPoint) && ValidTaskPoint(1)) {
_stprintf(file_name, TEXT("%s '%s' ?"), gettext(TEXT("[email protected]_")), dfe->GetAsString()); // Clear old task and load
if(MessageBoxX(file_name, _T(" "), mbYesNo) == IdNo) {
return;
}
}
} else {
// LKTOKEN [email protected]_ = "No Task to load"
MessageBoxX(gettext(TEXT("[email protected]_")),_T(" "), mbOk);
return;
}
if (file_index>0) {
LPCTSTR szFileName = dfe->GetPathFile();
LPCTSTR wextension = _tcsrchr(szFileName, _T('.'));
if(wextension) {
bool bOK = false;
if(_tcsicmp(wextension,_T(LKS_TSK))==0) {
CTaskFileHelper helper;
bOK = helper.Load(szFileName);
}
#ifdef OLDTASK_COMPAT
else if (_tcsicmp(wextension,_T(LKS_OLD_TSK))==0) {
LoadNewTask(szFileName);
bOK = true;
}
#endif
else if (_tcsicmp(wextension,_T(LKS_WP_CUP))==0) {
bOK = LoadCupTask(szFileName);
} else if (_tcsicmp(wextension,_T(LKS_WP_GPX))==0) {
bOK = LoadGpxTask(szFileName);
}
if(!bOK) {
MessageBoxX(gettext(TEXT("[email protected]_")),_T(" "), mbOk);
return;
}
OverviewRefreshTask();
UpdateFilePointer();
UpdateCaption();
}
}
}
示例4: AdjustAATTargets
double AdjustAATTargets(double desired) {
int i, istart, inum;
double av=0;
istart = max(1,ActiveTaskPoint);
inum=0;
LockTaskData();
for(i=istart;i<MAXTASKPOINTS-1;i++)
{
if(ValidTaskPoint(i)&&ValidTaskPoint(i+1) && !Task[i].AATTargetLocked)
{
Task[i].AATTargetOffsetRadius = max(-1.0,min(1.0,
Task[i].AATTargetOffsetRadius));
av += Task[i].AATTargetOffsetRadius;
inum++;
}
}
if (inum>0) {
av/= inum;
}
if (fabs(desired)>1.0) {
// don't adjust, just retrieve.
goto OnExit;
}
// TODO accuracy: Check here for true minimum distance between
// successive points (especially second last to final point)
// Do this with intersection tests
desired = (desired+1.0)/2.0; // scale to 0,1
av = (av+1.0)/2.0; // scale to 0,1
for(i=istart;i<MAXTASKPOINTS-1;i++)
{
if((Task[i].Index >=0)&&(Task[i+1].Index >=0) && !Task[i].AATTargetLocked)
{
double d = (Task[i].AATTargetOffsetRadius+1.0)/2.0;
// scale to 0,1
if (av>0.01) {
d = desired;
// 20080615 JMW
// was (desired/av)*d;
// now, we don't want it to be proportional
} else {
d = desired;
}
d = min(1.0, max(d, 0.0))*2.0-1.0;
Task[i].AATTargetOffsetRadius = d;
}
}
OnExit:
UnlockTaskData();
return av;
}
示例5: UseGates
// ALL TIME VALUES ARE IN SECONDS!
bool UseGates() {
if (!ISPARAGLIDER ) return(false);
if (PGNumberOfGates>0) {
if (ValidTaskPoint(0) && ValidTaskPoint(1)) {
return(true);
} else
return(false);
} else
return(false);
}
示例6: OnLoadClicked
static void OnLoadClicked(WindowControl * Sender, WndListFrame::ListInfo_t *ListInfo){ // 091216
(void)ListInfo; (void)Sender;
TCHAR file_name[MAX_PATH];
WndProperty* wp;
DataFieldFileReader *dfe;
wp = (WndProperty*)wf->FindByName(TEXT("prpFile"));
if (!wp) return;
HWND hwnd = wp->GetHandle();
SendMessage(hwnd,WM_LBUTTONDOWN,0,0);
dfe = (DataFieldFileReader*) wp->GetDataField();
int file_index = dfe->GetAsInteger();
if (file_index>0) {
if (ValidTaskPoint(ActiveWayPoint) && ValidTaskPoint(1)) {
_stprintf(file_name, TEXT("%s '%s' ?"), gettext(TEXT("[email protected]_")), dfe->GetAsString()); // Clear old task and load
if(MessageBoxX(hWndMapWindow, file_name, _T(" "), MB_YESNO|MB_ICONQUESTION) == IDNO) {
return;
}
}
} else {
// LKTOKEN [email protected]_ = "No Task to load"
MessageBoxX(hWndMapWindow, gettext(TEXT("[email protected]_")),_T(" "), MB_OK|MB_ICONEXCLAMATION);
return;
}
if (file_index>0) {
LPCTSTR szFileName = dfe->GetPathFile();
LPCTSTR wextension = _tcsrchr(szFileName, _T('.'));
if(wextension) {
bool bOK = false;
if(_tcsicmp(wextension,_T(LKS_TSK))==0) {
CTaskFileHelper helper;
bOK = helper.Load(szFileName);
} else if (_tcsicmp(wextension,_T(LKS_OLD_TSK))==0) {
LoadNewTask(szFileName);
bOK = true;
} else if (_tcsicmp(wextension,_T(LKS_WP_CUP))==0) {
bOK = LoadCupTask(szFileName);
} else if (_tcsicmp(wextension,_T(LKS_WP_GPX))==0) {
bOK = LoadGpxTask(szFileName);
}
if(!bOK) {
MessageBoxX(hWndMapWindow, gettext(TEXT("[email protected]_")),_T(" "), MB_OK|MB_ICONEXCLAMATION);
return;
}
OverviewRefreshTask();
UpdateFilePointer();
UpdateCaption();
}
}
}
示例7: DoOptimizeRoute
bool DoOptimizeRoute() {
if (AircraftCategory != (AircraftCategory_t)umParaglider) return false;
if (!PGOptimizeRoute) return false;
if (!ValidTaskPoint(0) || !ValidTaskPoint(1)) return false;
if (!ValidTaskPoint(ActiveWayPoint)) return false;
return true;
}
示例8: SpeedToFly
//
// Sollfarh / Dolphin Speed calculator
//
void SpeedToFly(NMEA_INFO *Basic, DERIVED_INFO *Calculated) {
if (((AutoMcMode == amcFinalGlide) || (AutoMcMode == amcFinalAndClimb))
&& DoOptimizeRoute() && Calculated->NextAltitude > 0.) {
// Special case for Conical end of Speed section
int Type = -1;
double ConeSlope = 0.0;
LockTaskData();
if (ValidTaskPoint(ActiveWayPoint)) {
GetTaskSectorParameter(ActiveWayPoint, &Type, NULL);
ConeSlope = Task[ActiveWayPoint].PGConeSlope;
}
UnlockTaskData();
if (Type == CONE && ConeSlope > 0.0) {
double VOpt = GlidePolar::FindSpeedForSlope(ConeSlope);
double eqMC = GlidePolar::EquMC(VOpt);
if(eqMC <= MACCREADY ) {
Calculated->VOpt = VOpt;
return;
}
}
}
double HeadWind = 0;
if (Calculated->FinalGlide && ValidTaskPoint(ActiveWayPoint)) {
// according to MC theory STF take account of wind only if on final Glide
// TODO : for the future add config parameter for always use wind.
if (Calculated->HeadWind != -999) {
HeadWind = Calculated->HeadWind;
}
}
// this is IAS for best Ground Glide ratio acounting current air mass ( wind / Netto vario )
double VOptnew = GlidePolar::STF(MACCREADY, Calculated->NettoVario, HeadWind);
// apply cruises efficiency factor.
VOptnew *= CRUISE_EFFICIENCY;
if (Calculated->NettoVario > MACCREADY) {
// this air mass is better than maccready, so don't fly at speed less than minimum sink speed adjusted for load factor
double n = fabs((Basic->AccelerationAvailable) ? Basic->AccelZ : Calculated->Gload);
VOptnew = max(VOptnew, GlidePolar::Vminsink() * sqrt(n));
} else {
// never fly at speed less than min sink speed
VOptnew = max(VOptnew, GlidePolar::Vminsink());
}
// use low pass filter for avoid big jump of value.
Calculated->VOpt = LowPassFilter(Calculated->VOpt, VOptnew, 0.6);
}
示例9: safe_delete
void PGTaskMgr::Initialize() {
std::for_each(m_Task.begin(), m_Task.end(), safe_delete());
m_Task.clear();
// build Mercator Reference Grid
// find center of Task
double minlat = 0.0, minlon = 0.0, maxlat = 0.0, maxlon = 0.0;
for (int curwp = 0; ValidTaskPoint(curwp); ++curwp) {
if (curwp == 0) {
maxlat = minlat = WayPointList[Task[curwp].Index].Latitude;
maxlon = minlon = WayPointList[Task[curwp].Index].Longitude;
} else {
minlat = std::min(minlat, WayPointList[Task[curwp].Index].Latitude);
maxlat = std::max(maxlat, WayPointList[Task[curwp].Index].Latitude);
minlon = std::min(minlon, WayPointList[Task[curwp].Index].Longitude);
maxlon = std::max(maxlon, WayPointList[Task[curwp].Index].Longitude);
}
}
m_Grid.lat0 = deg2rad(minlat + maxlat) * 1 / 2;
m_Grid.lon0 = deg2rad(minlon + maxlon) * 1 / 2;
m_Grid.k0 = 1;
m_Grid.false_e = 0.0; // ????
m_Grid.false_n = 0.0; // ????
// build task point list
for (int curwp = 0; ValidTaskPoint(curwp); ++curwp) {
int TpType = 0;
double Radius;
GetTaskSectorParameter(curwp, &TpType, &Radius);
switch (TpType) {
case CIRCLE:
AddCircle(curwp);
break;
case SECTOR:
case DAe:
AddSector(curwp);
break;
case LINE:
AddLine(curwp);
break;
case CONE:
AddCone(curwp);
break;
case ESS_CIRCLE:
AddEssCircle(curwp);
break;
}
}
}
示例10: while
bool CTaskFileHelper::LoadTaskPointList(XMLNode node) {
mFinishIndex = 0;
if (node) {
int i = 0;
XMLNode nodePoint = node.getChildNode(_T("point"), &i);
while (nodePoint) {
if (!LoadTaskPoint(nodePoint)) {
return false;
}
nodePoint = node.getChildNode(_T("point"), &i);
}
}
///////////////////////////////////////////////////////////////
// TODO : this code is temporary before rewriting task system
if (AATEnabled || DoOptimizeRoute()) {
if (ValidTaskPoint(mFinishIndex)) {
switch (Task[mFinishIndex].AATType) {
case CIRCLE:
FinishRadius = (DWORD)Task[mFinishIndex].AATCircleRadius;
FinishLine = 0;
break;
case LINE:
FinishRadius = (DWORD)Task[mFinishIndex].AATCircleRadius;
FinishLine = 1;
case SECTOR:
FinishRadius = (DWORD)Task[mFinishIndex].AATSectorRadius;
FinishLine = 2;
}
}
if (ValidTaskPoint(0)) {
switch (Task[0].AATType) {
case CIRCLE:
StartRadius = (DWORD)Task[0].AATCircleRadius;
StartLine = 0;
break;
case LINE:
StartRadius = (DWORD)Task[0].AATCircleRadius;
StartLine = 1;
case SECTOR:
StartRadius = (DWORD)Task[0].AATSectorRadius;
StartLine = 2;
}
}
}
///////////////////////////////////////////////////////////////
return true;
}
示例11: UpdateCaption
static void UpdateCaption(void) {
TCHAR sTmp[128];
TCHAR title[128];
if (ValidTaskPoint(twItemIndex)) {
switch (twType) {
case 0:
// LKTOKEN [email protected]_ = "Start"
_stprintf(title, gettext(TEXT("[email protected]_")));
break;
case 1:
// LKTOKEN [email protected]_ = "Turnpoint"
_stprintf(title, gettext(TEXT("[email protected]_")));
break;
case 2:
// LKTOKEN [email protected]_ = "Finish"
_stprintf(title, gettext(TEXT("[email protected]_")));
break;
};
_stprintf(sTmp, TEXT("%s: %s"), title,
WayPointList[Task[twItemIndex].Index].Name);
wf->SetCaption(sTmp);
} else {
// LKTOKEN [email protected]_ = "(invalid)"
wf->SetCaption(gettext(TEXT("[email protected]_")));
}
}
示例12: UpdateCaption
static void UpdateCaption(void) {
TCHAR sTmp[128];
TCHAR title[128];
if (ValidTaskPoint(twItemIndex)) {
switch (twType) {
case 0:
// LKTOKEN [email protected]_ = "Start"
_stprintf(title, gettext(TEXT("[email protected]_")));
break;
case 1:
// LKTOKEN [email protected]_ = "Turnpoint"
_stprintf(title, gettext(TEXT("[email protected]_")));
break;
case 2:
// LKTOKEN [email protected]_ = "Finish"
_stprintf(title, gettext(TEXT("[email protected]_")));
break;
};
TCHAR landableStr[5] = TEXT(" [X]");
// LKTOKEN [email protected]_ "L"
landableStr[2] = gettext(TEXT("[email protected]_"))[0];
_stprintf(sTmp, TEXT("%s: %s%s"), title,
WayPointList[Task[twItemIndex].Index].Name,
(WayPointList[Task[twItemIndex].Index].Flags & LANDPOINT) ? landableStr : TEXT(""));
wf->SetCaption(sTmp);
} else {
// LKTOKEN [email protected]_ = "(invalid)"
wf->SetCaption(gettext(TEXT("[email protected]_")));
}
}
示例13: InAATTurnSector
bool InAATTurnSector(const double longitude, const double latitude,
const int the_turnpoint)
{
double AircraftBearing;
bool retval = false;
if (!ValidTaskPoint(the_turnpoint)) {
return false;
}
double distance;
LockTaskData();
DistanceBearing(WayPointList[Task[the_turnpoint].Index].Latitude,
WayPointList[Task[the_turnpoint].Index].Longitude,
latitude,
longitude,
&distance, &AircraftBearing);
if(Task[the_turnpoint].AATType == CIRCLE) {
if(distance < Task[the_turnpoint].AATCircleRadius) {
retval = true;
}
} else if(distance < Task[the_turnpoint].AATSectorRadius) {
if (AngleInRange(Task[the_turnpoint].AATStartRadial,
Task[the_turnpoint].AATFinishRadial,
AngleLimit360(AircraftBearing), true)) {
retval = true;
}
}
UnlockTaskData();
return retval;
}
示例14: DistanceCovered_inside
double AATDistance::DistanceCovered_inside(double longitude,
double latitude) {
int taskwaypoint = ActiveTaskPoint;
double best_achieved_distance = 0;
int nthis = num_points[taskwaypoint];
if (nthis>0) {
int kbest = 0;
for (int k=0; k<nthis; k++) {
double achieved_distance = Dmax[taskwaypoint][k];
if (achieved_distance>best_achieved_distance) {
best_achieved_distance = achieved_distance;
best[taskwaypoint] = k;
kbest = k;
}
}
if (ValidTaskPoint(taskwaypoint+1)) {
ShiftTargetFromBehind(longitude, latitude, taskwaypoint);
}
return distance_achieved(taskwaypoint, kbest, longitude, latitude);
} else {
// not actually in this sector?
return 0.0;
}
}
示例15: LimitMapScale
/**
* @brief Sets requested zoom scale for AUTO_ZOOM mode
*/
void MapWindow::Zoom::CalculateAutoZoom()
{
static int autoMapScaleWaypointIndex = -1;
double wpd = DerivedDrawInfo.ZoomDistance;
if(wpd > 0) {
double AutoZoomFactor;
if( (DisplayOrientation == NORTHTRACK && !mode.Is(Mode::MODE_CIRCLING)) ||
DisplayOrientation == NORTHUP ||
DisplayOrientation == NORTHSMART ||
((DisplayOrientation == NORTHCIRCLE || DisplayOrientation == TRACKCIRCLE) && mode.Is(Mode::MODE_CIRCLING)) )
AutoZoomFactor = 2.5;
else
AutoZoomFactor = 4;
if(wpd < AutoZoomFactor * _scaleOverDistanceModify) {
// waypoint is too close, so zoom in
_modeScale[SCALE_CRUISE] = LimitMapScale(wpd * DISTANCEMODIFY / AutoZoomFactor);
}
}
LockTaskData(); // protect from external task changes
#ifdef HAVEEXCEPTIONS
__try{
#endif
// if we aren't looking at a waypoint, see if we are now
if(autoMapScaleWaypointIndex == -1) {
if(ValidTaskPoint(ActiveWayPoint))
autoMapScaleWaypointIndex = Task[ActiveWayPoint].Index;
}
if(ValidTaskPoint(ActiveWayPoint)) {
// if the current zoom focused waypoint has changed...
if(autoMapScaleWaypointIndex != Task[ActiveWayPoint].Index) {
autoMapScaleWaypointIndex = Task[ActiveWayPoint].Index;
// zoom back out to where we were before
_modeScale[SCALE_CRUISE] = _modeScale[SCALE_AUTO_ZOOM];
}
}
#ifdef HAVEEXCEPTIONS
}__finally
#endif
{
UnlockTaskData();
}
}