我有以下的QPolygon:
我需要将其高度增加,得到如下的QPolygon:
其中,qpolygon的下边界保持不变,在第一幅图中为x1,y1,在第二幅图中仍为x1,y1,而添加在上方的黑色区域应该是qpolygon本身高度的一半(最好是直线,但不太重要)。
为了实现这个目标,我使用了QPolygon的bounding box:
![enter image description here](https://istack.dev59.com/aJiQd.webp)
![enter image description here](https://istack.dev59.com/dUN6k.webp)
为了实现这个目标,我使用了QPolygon的bounding box:
poly1_bounding_rect=QPolygonF(poly_1_coords).boundingRect()
以及X0、Y0坐标、宽度和高度,然后使用联合操作与原始多边形进行并集运算。max_y, min_x, height_, width_ = poly1_bounding_rect.y(), poly1_bounding_rect.x(), poly1_bounding_rect.height(), poly1_bounding_rect.width()
poly1_addition = QPolygonF(
[QPointF(min_x, max_y), QPointF(min_x, max_y - height_ * .5),
QPointF(min_x + width_, max_y - height_ * .5),
QPointF(min_x + width_, max_y)])
然而,这个解决方案留下了一个有孔的 QPolygon,我不确定应该如何填充它们,或者在第一次创建 QPolygon 时就避免这些洞。
非常感谢任何指导,谢谢!
以下是一个最小可复现的示例:
import PyQt5
from PyQt5 import QtCore
import sys
import PyQt5
from PyQt5.QtCore import *#QPointF, QRectF
from PyQt5.QtGui import *#QPainterPath, QPolygonF, QBrush,QPen,QFont,QColor, QTransform
from PyQt5.QtWidgets import *#QApplication, QGraphicsScene, QGraphicsView, QGraphicsSimpleTextItem
poly_1_coords= [PyQt5.QtCore.QPointF(412.01, 257.98), PyQt5.QtCore.QPointF(372.24, 197.66), PyQt5.QtCore.QPointF(358.88, 230.95), PyQt5.QtCore.QPointF(371.46, 278.4), PyQt5.QtCore.QPointF(381.16, 291.77), PyQt5.QtCore.QPointF(428.34, 308.81), PyQt5.QtCore.QPointF(483.66, 341.84), PyQt5.QtCore.QPointF(648.02, 373.29), PyQt5.QtCore.QPointF(945.05, 386.61), PyQt5.QtCore.QPointF(1087.66, 374.02), PyQt5.QtCore.QPointF(1285.26, 331.05), PyQt5.QtCore.QPointF(1317.34, 304.71), PyQt5.QtCore.QPointF(1345.85, 265.03), PyQt5.QtCore.QPointF(1340.6, 214.96), PyQt5.QtCore.QPointF(1326.19, 197.39), PyQt5.QtCore.QPointF(1303.38, 243.79), PyQt5.QtCore.QPointF(1134.3, 290.19), PyQt5.QtCore.QPointF(1091.57, 306.71), PyQt5.QtCore.QPointF(1067.45, 295.44), PyQt5.QtCore.QPointF(1017.38, 250.09), PyQt5.QtCore.QPointF(993.53, 218.63), PyQt5.QtCore.QPointF(925.89, 219.41), PyQt5.QtCore.QPointF(852.23, 233.31), PyQt5.QtCore.QPointF(723.52, 219.41), PyQt5.QtCore.QPointF(671.51, 309.58), PyQt5.QtCore.QPointF(638.88, 313.37), PyQt5.QtCore.QPointF(583.5, 299.71), PyQt5.QtCore.QPointF(485.61, 240.53), PyQt5.QtCore.QPointF(451.47, 270.88)]
def main():
app = QApplication(sys.argv)
scene = QGraphicsScene()
view = QGraphicsView(scene)
pen_ = QPen(QColor(0, 20, 255))
brush_ = QBrush(QColor(0,0,0))
poly_1 = QPolygonF(poly_1_coords)
#scene.addPolygon(poly_1,pen_,brush_)
poly1_bounding_rect = poly_1.boundingRect()
max_y, min_x, height_, width_ = poly1_bounding_rect.y(), poly1_bounding_rect.x(), poly1_bounding_rect.height(), poly1_bounding_rect.width()
poly1_addition = QPolygonF(
[QPointF(min_x, max_y), QPointF(min_x, max_y - height_ * .5),
QPointF(min_x + width_, max_y - height_ * .5),
QPointF(min_x + width_, max_y)])
complete_poly1 = poly_1.united(poly1_addition)
scene.addPolygon(complete_poly1,pen_,brush_)
view.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()