bool FAITaskFactory::Validate() { bool valid = AbstractTaskFactory::Validate(); if (!IsUnique()) { AddValidationError(TURNPOINTS_NOT_UNIQUE); // warning only } return valid; }
bool AbstractTaskFactory::ValidateMATOZs() { ClearValidationErrors(); bool valid = true; for (unsigned i = 0; i < task.TaskSize() && valid; i++) { const OrderedTaskPoint &tp = task.GetPoint(i); switch (GetType(tp)) { case TaskPointFactoryType::START_CYLINDER: case TaskPointFactoryType::START_LINE: case TaskPointFactoryType::START_SECTOR: break; case TaskPointFactoryType::START_BGA: valid = false; break; case TaskPointFactoryType::MAT_CYLINDER: break; case TaskPointFactoryType::AAT_CYLINDER: case TaskPointFactoryType::FAI_SECTOR: case TaskPointFactoryType::AST_CYLINDER: case TaskPointFactoryType::KEYHOLE_SECTOR: case TaskPointFactoryType::BGAFIXEDCOURSE_SECTOR: case TaskPointFactoryType::BGAENHANCEDOPTION_SECTOR: case TaskPointFactoryType::AAT_SEGMENT: case TaskPointFactoryType::AAT_ANNULAR_SECTOR: case TaskPointFactoryType::AAT_KEYHOLE: case TaskPointFactoryType::FINISH_SECTOR: case TaskPointFactoryType::SYMMETRIC_QUADRANT: valid = false; break; case TaskPointFactoryType::FINISH_LINE: case TaskPointFactoryType::FINISH_CYLINDER: break; case TaskPointFactoryType::COUNT: gcc_unreachable(); } } if (!valid) AddValidationError(TaskValidationErrorType::NON_MAT_OZS); return valid; }
bool AbstractTaskFactory::Validate() { ClearValidationErrors(); bool valid = true; if (!task.HasStart()) { AddValidationError(TaskValidationErrorType::NO_VALID_START); valid = false; } if (!task.HasFinish()) { AddValidationError(TaskValidationErrorType::NO_VALID_FINISH); valid = false; } if (constraints.is_closed && !IsClosed()) { AddValidationError(TaskValidationErrorType::TASK_NOT_CLOSED); valid = false; } if (constraints.IsFixedSize()) { if (task.TaskSize() != constraints.max_points) { AddValidationError(TaskValidationErrorType::INCORRECT_NUMBER_TURNPOINTS); valid = false; } } else { if (task.TaskSize() < constraints.min_points) { AddValidationError(TaskValidationErrorType::UNDER_MIN_TURNPOINTS); valid = false; } if (task.TaskSize() > constraints.max_points) { AddValidationError(TaskValidationErrorType::EXCEEDS_MAX_TURNPOINTS); valid = false; } } if (constraints.homogeneous_tps && !IsHomogeneous()) { AddValidationError(TaskValidationErrorType::TASK_NOT_HOMOGENEOUS); valid = false; } return valid; }
bool AbstractTaskFactory::ValidateFAIOZs() { ClearValidationErrors(); bool valid = true; for (unsigned i = 0; i < task.TaskSize() && valid; i++) { const auto &tp = task.GetPoint(i); const auto ozsize = GetOZSize(tp.GetObservationZone()); switch (GetType(tp)) { case TaskPointFactoryType::START_BGA: case TaskPointFactoryType::START_CYLINDER: valid = false; break; case TaskPointFactoryType::START_SECTOR: if (ozsize > fixed(1000.01)) valid = false; break; case TaskPointFactoryType::START_LINE: if (ozsize > fixed(2000.01)) valid = false; break; case TaskPointFactoryType::FAI_SECTOR: break; case TaskPointFactoryType::AST_CYLINDER: if (ozsize > fixed(500.01)) valid = false; break; case TaskPointFactoryType::KEYHOLE_SECTOR: case TaskPointFactoryType::BGAFIXEDCOURSE_SECTOR: case TaskPointFactoryType::BGAENHANCEDOPTION_SECTOR: case TaskPointFactoryType::MAT_CYLINDER: case TaskPointFactoryType::AAT_CYLINDER: case TaskPointFactoryType::AAT_SEGMENT: case TaskPointFactoryType::AAT_ANNULAR_SECTOR: case TaskPointFactoryType::AAT_KEYHOLE: case TaskPointFactoryType::SYMMETRIC_QUADRANT: valid = false; break; case TaskPointFactoryType::FINISH_SECTOR: break; case TaskPointFactoryType::FINISH_LINE: if (ozsize > fixed(2000.01)) valid = false; break; case TaskPointFactoryType::FINISH_CYLINDER: valid = false; break; case TaskPointFactoryType::COUNT: gcc_unreachable(); } } if (!valid) AddValidationError(TaskValidationErrorType::NON_FAI_OZS); return valid; }