// エッジグループを繋がってるエッジごとに別のエッジグループに分ける
string edge_group = chs("edge_group");
int edge_points[] = expandedgegroup(0, edge_group);
int edges[];
for (int i = 0; i < len(edge_points); i += 2)
{
int src_pt = edge_points[i];
int dst_pt = edge_points[i + 1];
int edge = pointhedge(0, src_pt, dst_pt);
edge = hedge_primary(0, edge);
push(edges, edge);
}
int group_num = 0;
while (len(edges) > 0)
{
int connected_edges[] = array(edges[0]);
removeindex(edges, 0);
int i = 0;
while (i < len(connected_edges))
{
int src_edge = connected_edges[i];
int edge_src_pt = hedge_srcpoint(0, src_edge);
int edge_dst_pt = hedge_dstpoint(0, src_edge);
int edge_pts[] = array(edge_src_pt, edge_dst_pt);
foreach (int src_pt; edge_pts)
{
int nb_pts[] = neighbours(0, src_pt);
foreach (int nb_pt; nb_pts)
{
if (!inedgegroup(0, edge_group, src_pt, nb_pt))
continue;
int edge = pointhedge(0, src_pt, nb_pt);
edge = hedge_primary(0, edge);
if (find(connected_edges, edge) >= 0)
continue;
push(connected_edges, edge);
int index = find(edges, edge);
if (index >= 0)
removeindex(edges, index);
}
}
i += 1;
}
foreach (int edge; connected_edges)
{
int src_pt = hedge_srcpoint(0, edge);
int dst_pt = hedge_dstpoint(0, edge);
string group = "connected_edge" + itoa(group_num);
setedgegroup(0, group, src_pt, dst_pt, 1);
}
group_num += 1;
}