如何在 python-pptx 中获取给定形状的连接点坐标
How to get co-ordinates of connecting points for a given shape in python-pptx
我的任务是将 arrow/line 从 shape1 连接到 shape2。在这样做的同时,我需要沿着形状的周边获得 连接点 的精确坐标。明确地说,我所说的连接点是指当您尝试在 powerpoint 工具中将 arrow/line 连接到形状时,沿着形状的周边看到的绿色小气泡。我只对这些点感兴趣,因为 PPT 软件添加了视觉上吸引人的对齐方式 if 连接到这些点。
在现有代码中,有两个函数_move_begin_to_cxn() and _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 识别出您想要连接。
我的任务是将 arrow/line 从 shape1 连接到 shape2。在这样做的同时,我需要沿着形状的周边获得 连接点 的精确坐标。明确地说,我所说的连接点是指当您尝试在 powerpoint 工具中将 arrow/line 连接到形状时,沿着形状的周边看到的绿色小气泡。我只对这些点感兴趣,因为 PPT 软件添加了视觉上吸引人的对齐方式 if 连接到这些点。
在现有代码中,有两个函数_move_begin_to_cxn() and _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 识别出您想要连接。