worked on windows
This commit is contained in:
@@ -78,16 +78,19 @@ void drawDoor(const Floorplan::FloorObstacleWall* line, const Floorplan::FloorOb
|
|||||||
|
|
||||||
void drawWindow(const Floorplan::FloorObstacleWall* wall, const Floorplan::FloorObstacleWallWindow* win, Painter& p) {
|
void drawWindow(const Floorplan::FloorObstacleWall* wall, const Floorplan::FloorObstacleWallWindow* win, Painter& p) {
|
||||||
|
|
||||||
QPen pen;
|
const Point2 ps = win->getStart(wall);
|
||||||
pen.setColor(QColor(0.5,0.5,0.5));
|
const Point2 pe = win->getEnd(wall);
|
||||||
pen.setWidth(3);
|
const Point2 perp = (pe-ps).perpendicular().normalized();
|
||||||
pen.setStyle(Qt::PenStyle::DotLine);
|
|
||||||
p.setPenBrush(pen, Qt::NoBrush);
|
|
||||||
|
|
||||||
const Point2 p1 = win->getStart(wall);
|
const float s = 0.06;
|
||||||
const Point2 p2 = win->getEnd(wall);
|
const Point2 p1 = ps - perp*s;
|
||||||
|
const Point2 p2 = pe - perp*s;
|
||||||
|
const Point2 p3 = pe + perp*s;
|
||||||
|
const Point2 p4 = ps + perp*s;
|
||||||
|
|
||||||
p.drawLine(p1, p2);
|
std::vector<Point2> pts = {p1, p2, p3, p4, p1};
|
||||||
|
p.setPenBrush(QColor(0,0,0), QColor(255,255,255));
|
||||||
|
p.drawPolygon(pts);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,20 +138,30 @@ void MV2DElementFloorObstacleWall::paint(Painter& p) {
|
|||||||
// draw the wall itself
|
// draw the wall itself
|
||||||
|
|
||||||
// sort all doors by position on the line
|
// sort all doors by position on the line
|
||||||
std::vector<Floorplan::FloorObstacleWallDoor*> doors = fo->doors;
|
// std::vector<Floorplan::FloorObstacleWallDoor*> doors = fo->doors;
|
||||||
auto comp = [] (const Floorplan::FloorObstacleWallDoor* d1, const Floorplan::FloorObstacleWallDoor* d2) {
|
// auto comp = [] (const Floorplan::FloorObstacleWallDoor* d1, const Floorplan::FloorObstacleWallDoor* d2) {
|
||||||
return d1->atLinePos < d2->atLinePos;
|
// return d1->atLinePos < d2->atLinePos;
|
||||||
};
|
// };
|
||||||
std::sort(doors.begin(), doors.end(), comp);
|
// std::sort(doors.begin(), doors.end(), comp);
|
||||||
|
|
||||||
std::vector<Point2> pts;
|
std::vector<Point2> pts;
|
||||||
pts.push_back(fo->from);
|
pts.push_back(fo->from);
|
||||||
for (const Floorplan::FloorObstacleWallDoor* door : doors) {
|
for (const Floorplan::FloorObstacleWallDoor* door : fo->doors) {
|
||||||
pts.push_back(door->getStart(fo));
|
pts.push_back(door->getStart(fo));
|
||||||
pts.push_back(door->getEnd(fo));
|
pts.push_back(door->getEnd(fo));
|
||||||
}
|
}
|
||||||
|
for (const Floorplan::FloorObstacleWallWindow* win : fo->windows) {
|
||||||
|
pts.push_back(win->getStart(fo));
|
||||||
|
pts.push_back(win->getEnd(fo));
|
||||||
|
}
|
||||||
pts.push_back(fo->to);
|
pts.push_back(fo->to);
|
||||||
|
|
||||||
|
auto comp = [&] (const Point2 p1, const Point2 p2) {
|
||||||
|
return pts.front().getDistance(p1) < pts.front().getDistance(p2);
|
||||||
|
};
|
||||||
|
std::sort(pts.begin(), pts.end(), comp);
|
||||||
|
|
||||||
|
|
||||||
for (size_t i = 0; i < pts.size(); i+=2) {
|
for (size_t i = 0; i < pts.size(); i+=2) {
|
||||||
p.drawLine(pts[i], pts[i+1]);
|
p.drawLine(pts[i], pts[i+1]);
|
||||||
}
|
}
|
||||||
@@ -276,7 +289,7 @@ bool MV2DElementFloorObstacleWall::keyPressEvent(MapView2D* v, QKeyEvent* e) {
|
|||||||
fo->doors.push_back(door);
|
fo->doors.push_back(door);
|
||||||
return true;
|
return true;
|
||||||
} else if (e->key() == Qt::Key_W) {
|
} else if (e->key() == Qt::Key_W) {
|
||||||
Floorplan::FloorObstacleWallWindow* win = new Floorplan::FloorObstacleWallWindow(Floorplan::WindowType::UNKNOWN, Floorplan::Material::WOOD, 0.5, 0.5, 1.0, 1.0);
|
Floorplan::FloorObstacleWallWindow* win = new Floorplan::FloorObstacleWallWindow(Floorplan::WindowType::UNKNOWN, Floorplan::Material::WOOD, 0.5, 1, 1.0, 1.0);
|
||||||
fo->windows.push_back(win);
|
fo->windows.push_back(win);
|
||||||
return true;
|
return true;
|
||||||
} else if (e->key() == Qt::Key_Delete && getSelectedNode() >= 1000) {
|
} else if (e->key() == Qt::Key_Delete && getSelectedNode() >= 1000) {
|
||||||
|
|||||||
@@ -134,14 +134,14 @@ void Painter::drawPolygon(const std::vector<Point2>& points) {
|
|||||||
for (const Point2 p : points) {
|
for (const Point2 p : points) {
|
||||||
vec.push_back(QPointF(s.xms(p.x), s.yms(p.y)));
|
vec.push_back(QPointF(s.xms(p.x), s.yms(p.y)));
|
||||||
}
|
}
|
||||||
p->drawPolygon(vec.data(), vec.size());
|
p->drawConvexPolygon(vec.data(), vec.size());
|
||||||
}
|
}
|
||||||
void Painter::drawPolygon(const std::vector<Point3>& points) {
|
void Painter::drawPolygon(const std::vector<Point3>& points) {
|
||||||
std::vector<QPointF> vec;
|
std::vector<QPointF> vec;
|
||||||
for (const Point3 p : points) {
|
for (const Point3 p : points) {
|
||||||
vec.push_back(QPointF(s.xms(p.x), s.yms(p.y)));
|
vec.push_back(QPointF(s.xms(p.x), s.yms(p.y)));
|
||||||
}
|
}
|
||||||
p->drawPolygon(vec.data(), vec.size());
|
p->drawConvexPolygon(vec.data(), vec.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Painter::drawPixmap(const Point2 pt, const QPixmap& img) {
|
void Painter::drawPixmap(const Point2 pt, const QPixmap& img) {
|
||||||
|
|||||||
@@ -53,11 +53,16 @@ public:
|
|||||||
return wall->doors[idx];
|
return wall->doors[idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Floorplan::FloorObstacleWallWindow* getCurWindow() const {
|
||||||
|
const int idx = mv2d.getSelectedNode()-2000;
|
||||||
|
return wall->windows[idx];
|
||||||
|
}
|
||||||
|
|
||||||
int getNumParams() const override {
|
int getNumParams() const override {
|
||||||
switch(getType()) {
|
switch(getType()) {
|
||||||
case 0: return 3;
|
case 0: return 3;
|
||||||
case 1: return 4;
|
case 1: return 4;
|
||||||
case 2: return 0;
|
case 2: return 4;
|
||||||
}
|
}
|
||||||
throw 1;
|
throw 1;
|
||||||
}
|
}
|
||||||
@@ -75,6 +80,12 @@ public:
|
|||||||
case 2: return Param("left/right", ParamType::BOOL);
|
case 2: return Param("left/right", ParamType::BOOL);
|
||||||
case 3: return Param("in/out", ParamType::BOOL);
|
case 3: return Param("in/out", ParamType::BOOL);
|
||||||
}
|
}
|
||||||
|
case 2: switch(idx) {
|
||||||
|
case 0: return Param("above ground (m)", ParamType::FLOAT);
|
||||||
|
case 1: return Param("width (m)", ParamType::FLOAT);
|
||||||
|
case 2: return Param("height (m)", ParamType::FLOAT);
|
||||||
|
case 3: return Param("in/out", ParamType::BOOL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
throw 1;
|
throw 1;
|
||||||
}
|
}
|
||||||
@@ -92,6 +103,12 @@ public:
|
|||||||
case 2: return getCurDoor()->leftRight;
|
case 2: return getCurDoor()->leftRight;
|
||||||
case 3: return getCurDoor()->inOut;
|
case 3: return getCurDoor()->inOut;
|
||||||
}
|
}
|
||||||
|
case 2 : switch(idx) {
|
||||||
|
case 0: return getCurWindow()->startsAtHeight;
|
||||||
|
case 1: return getCurWindow()->width;
|
||||||
|
case 2: return getCurWindow()->height;
|
||||||
|
case 3: return getCurWindow()->inOut;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
throw 1;
|
throw 1;
|
||||||
}
|
}
|
||||||
@@ -109,6 +126,12 @@ public:
|
|||||||
case 2: getCurDoor()->leftRight = val.toBool(); return;
|
case 2: getCurDoor()->leftRight = val.toBool(); return;
|
||||||
case 3: getCurDoor()->inOut = val.toBool(); return;
|
case 3: getCurDoor()->inOut = val.toBool(); return;
|
||||||
}
|
}
|
||||||
|
case 2: switch(idx) {
|
||||||
|
case 0: getCurWindow()->startsAtHeight = val.toFloat(); return;
|
||||||
|
case 1: getCurWindow()->width = val.toFloat(); return;
|
||||||
|
case 2: getCurWindow()->height = val.toFloat(); return;
|
||||||
|
case 3: getCurWindow()->inOut = val.toBool(); return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user