|  | @@ -10,15 +10,15 @@ bool isDPCurve(IVGShapePtr s) {
 | 
	
		
			
				|  |  |    return dpc;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  IVGShapePtr CreateBoundary(corel *cdr, IVGShapePtr s) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  auto scp = s->CreateBoundary(0, 0, true, false);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  //  这个 API X7 以上才支持,所以现在直接画矩形
 | 
	
		
			
				|  |  | -  // BoundingBox box;
 | 
	
		
			
				|  |  | -  // s->GET_BOUNDING_BOX(box);
 | 
	
		
			
				|  |  | -  // auto scp = cdr->ActiveLayer->CreateRectangle2(box.x, box.y, box.w, box.h,
 | 
	
		
			
				|  |  | -  // ZERO_4PC);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +  IVGShapePtr scp;
 | 
	
		
			
				|  |  | +  if (cdr->VersionMajor < 17) {
 | 
	
		
			
				|  |  | +    s->CreateSelection();
 | 
	
		
			
				|  |  | +    cdr->FrameWork->Automation->InvokeItem( _bstr_t("b0491566-5ffe-450a-b17e-f2f496b4eb22"));
 | 
	
		
			
				|  |  | +    scp = cdr->ActiveSelectionRange->Shapes->Item[1];
 | 
	
		
			
				|  |  | +  } else {
 | 
	
		
			
				|  |  | +    //  这个 API X7 以上才支持,所以现在直接画矩形
 | 
	
		
			
				|  |  | +    scp = s->CreateBoundary(0, 0, true, false);    
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |    return scp;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -103,17 +103,23 @@ bool BoundaryGroup(corel *cdr, IVGShapeRange *sr, IVGShapeRange *srs) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // 建立辅助的异性边界物件,需要填充颜色,搞了半天才搞定
 | 
	
		
			
				|  |  | -  auto bounds = sr->CreateBoundary(0, 0, true, false); // 建立异性边界物件
 | 
	
		
			
				|  |  | -  bounds->Fill->UniformColor->RGBAssign(255, 0, 0);    // 填充红色
 | 
	
		
			
				|  |  | +  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) {
 | 
	
		
			
				|  |  |      //  VGCore::IVGShapeRange::Sort ( _bstr_t CompareExpression, long
 | 
	
		
			
				|  |  |      //  StartIndex, long EndIndex, const _variant_t & Data );
 | 
	
		
			
				|  |  | -    sbox->Sort(
 | 
	
		
			
				|  |  | -      _bstr_t(
 | 
	
		
			
				|  |  | -            "@shape1.width * @shape1.height > @shape2.width * @shape2.height"),
 | 
	
		
			
				|  |  | -        1, sbox->Count, _variant_t());
 | 
	
		
			
				|  |  | +    sbox->Sort(bstr_t( "@shape1.width * @shape1.height > @shape2.width * @shape2.height"),  1, sbox->Count, _variant_t());
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // 删除文字添加的方框
 | 
	
	
		
			
				|  | @@ -161,10 +167,8 @@ bool BoundaryGroup(corel *cdr, IVGShapeRange *sr, IVGShapeRange *srs) {
 | 
	
		
			
				|  |  |  // 测试运行 异形群组
 | 
	
		
			
				|  |  |  void run_BoundaryGroup(corel *cdr) {
 | 
	
		
			
				|  |  |    auto start = std::chrono::high_resolution_clock::now(); // 开始时间
 | 
	
		
			
				|  |  | -  if (cdr->VersionMajor < 17) {
 | 
	
		
			
				|  |  | -    sprintf(infobuf, "异形群组目前只支持X7以上版本!");
 | 
	
		
			
				|  |  | -    return;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +  // if (cdr->VersionMajor < 17) {
 | 
	
		
			
				|  |  | +  //   sprintf(infobuf, "异形群组目前只支持X7以上版本!");  return; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    BeginOpt(cdr);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -178,7 +182,7 @@ void run_BoundaryGroup(corel *cdr) {
 | 
	
		
			
				|  |  |    cdr->ActiveDocument->ClearSelection();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (cnt > 300) {
 | 
	
		
			
				|  |  | -    // 调用矩形分组,分布执行异形群组
 | 
	
		
			
				|  |  | +    // 调用矩形分组,分步执行异形群组
 | 
	
		
			
				|  |  |      if (BoxGrouping(cdr, sr, sr_box, 0.1)) {
 | 
	
		
			
				|  |  |        for (int i = 0; i < sr_box->Count; i++) {
 | 
	
		
			
				|  |  |          auto s = sr_box->Shapes->Item[i + 1];
 |