31 #include "util/log/logger.h"
36 static Logger _log(LM_CELLGRID);
38 CellGrid::CellGrid(
bool allow_diagonals):
48 m_allow_diagonals(allow_diagonals) {
52 CellGrid::~CellGrid() {
55 void CellGrid::getAccessibleCoordinates(
const ModelCoordinate& curpos, std::vector<ModelCoordinate>& coordinates) {
57 for (int32_t x = curpos.x - 1; x <= curpos.x + 1; x++) {
58 for (int32_t y = curpos.y - 1; y <= curpos.y + 1; y++) {
62 if (isAccessible(curpos, pt)) {
63 coordinates.push_back(pt);
69 void CellGrid::updateMatrices() {
70 m_matrix.loadRotate(m_rotation, 0.0, 0.0, 1.0);
71 m_matrix.applyScale(m_xscale,m_yscale, 1);
72 m_matrix.applyTranslate(m_xshift, m_yshift, m_zshift);
73 m_inverse_matrix = m_matrix.inverse();
76 ExactModelCoordinate CellGrid::toMapCoordinates(
const ModelCoordinate& layer_coords) {
80 int32_t CellGrid::orientation(
const ExactModelCoordinate& pt,
const ExactModelCoordinate& pt1,
const ExactModelCoordinate& pt2) {
81 double o = (pt2.x - pt1.x) * (pt.y - pt1.y) - (pt.x - pt1.x) * (pt2.y - pt1.y);
90 bool CellGrid::ptInTriangle(
const ExactModelCoordinate& pt,
const ExactModelCoordinate& pt1,
const ExactModelCoordinate& pt2,
const ExactModelCoordinate& pt3) {
91 double o1 = orientation(pt1, pt2, pt);
92 double o2 = orientation(pt2, pt3, pt);
93 double o3 = orientation(pt3, pt1, pt);
94 bool result = (o1 == o2) && (o2 == o3);
95 FL_DBG(_log, LMsg(
"ptInTriangle, pt=") << pt <<
" pt1=" << pt1 <<
" pt2=" << pt2 <<
" pt3=" << pt3 <<
" in=" << result);
DoublePoint intPt2doublePt(Point pt)