如何在python-pptx中获取给定形状的连接点的坐标



我的任务是将箭头/线从形状1连接到形状2。在这样做时,我需要获得沿形状周边的连接点的精确坐标。需要明确的是,我所说的连接点是指当您尝试在PowerPoint工具中将箭头/线连接到形状时,沿着形状的周边看到的小绿色气泡。我只对这些点感兴趣,因为如果连接到这些点,PPT软件会添加视觉上吸引人的对齐方式。

在现有代码中,有两个函数_move_begin_to_cxn(( 和 _move_end_to_cxn((,它们共享公共逻辑,它们在其中获取连接点的坐标。但这仅适用于矩形的情况。这是因为我们只有形状的左上角位置和宽高。

def _move_end_to_cxn(self, shape, cxn_pt_idx):
"""
Move the end point of this connector to the coordinates of the
connection point of *shape* specified by *cxn_pt_idx*.
"""
x, y, cx, cy = shape.left, shape.top, shape.width, shape.height
self.end_x, self.end_y = {
0: (int(x + cx / 2), y),
1: (x, int(y + cy / 2)),
2: (int(x + cx / 2), y + cy),
3: (x + cx, int(y + cy / 2)),
}[cxn_pt_idx]

对于只有左上角位置和宽高等复杂形状(例如椭圆形、五边形、平行四边形(来说,这很难计算。

有没有有效的方法来获得可连接点的准确位置?任何帮助将不胜感激。

提前感谢!

没有平滑的方程来获得任意形状的这些点。 PPT对这些点进行硬编码,参数化为边界框,并在适当的时候简单地激活它们。

幸运的是,您不必将它们计算为 13 个有效数字。 获得分数的一种简单但乏味的方法是自己对其进行硬编码。 在 PPT 中创建所需的形状,尽可能放大它,然后从该放大中读取相对坐标。 将这些参数存储在每个形状的列表中。

另一种简单的方法是检查每个形状的连接点;它们都是边缘或弧的极点和中点。 使用基本分析几何计算每个点的相对坐标。 同样,将这些内容硬编码到应用程序中。

无论您选择哪种方式,您都可能会偏离一两个像素,但这足以让 PPT 识别您想要连接。

最新更新