你这个方法 是毛子异性群组的思路,效率不太行。你上传gms文件,最好先zip压缩打包
我目前 CPG 的算法是,
1.是先使用 创建边界,建立范围,分开这个范围物件为多个, 然后分组物件 和多个范围物件 比较
给你 C++ 源码参考, VBA 的也差不多
IVGShapePtr bounds;
if (cdr->VersionMajor < 17) {
sr->CreateSelection();
cdr->FrameWork->Automation->InvokeItem( _bstr_t("b0491566-5ffe-450a-b17e-f2f496b4eb22"));
bounds = cdr->ActiveSelectionRange->Shapes->Item[1];
bounds->OrderToFront();
} else {
bounds = sr->CreateBoundary(0, 0, true, false);
}
bounds->Fill->UniformColor->RGBAssign(255, 0, 0);
auto sbox = bounds->BreakApartEx();
if (sbox->Count > 2) {
sbox->Sort(bstr_t( "@shape1.width * @shape1.height > @shape2.width * @shape2.height"), 1, sbox->Count, _variant_t());
}