【入門編】【中級・上級】CreateShapeRangeFromExclusionなど高度なブール演算(結合・交差・抜粋)のVBA自動実行 – CorelDRAW VBA解析バイブル

スポンサーリンク

CorelDRAW VBAの深淵:ブール演算を完全掌握し、複雑なパス処理を自動化する

こんにちは。CorelDRAWの自動化の世界へようこそ。

「マクロの記録」ボタンを押して生成されたコードを見て、「なぜこれほど冗長で遅いのか?」と疑問に思ったことはありませんか? 手動操作をなぞるだけのコードは、自動化とは呼べません。真のエンジニアリングとは、オブジェクトモデルを直接操作し、CorelDRAWのメモリ上で計算を完結させることにあります。

今回は、デザイン業務で最も時間を食う「ブール演算(溶接・トリム・交差)」をVBAで制御し、一瞬で複雑なパスを生成する極意を伝授します。

1. ブール演算の要:ShapeRangeの概念を理解せよ

CorelDRAW VBAでブール演算を行う際、避けて通れないのが `ShapeRange` オブジェクトです。

単一の `Shape` ではなく、複数のオブジェクトを束ねた `ShapeRange` を生成し、そこに演算メソッドを適用する。これがCorelDRAWの基本流儀です。

陥りやすい罠:単体操作と範囲操作の違い

初心者の多くは、個別の `Shape` に対して `Weld` メソッドなどを呼ぼうとしてエラーを吐きます。ブール演算は「ターゲット(ベース)」に対して「ソース(演算対象)」をぶつける処理です。

2. 実践:高度なブール演算の自動化コード

以下のコードは、選択した複数のオブジェクトを「溶接(Weld)」し、その結果から特定の図形を「トリム(Trim)」する、実務で頻出の処理です。

Sub AdvancedBooleanOperations()
‘ ドキュメント内に選択されたオブジェクトがあるか確認
If ActiveSelectionRange.Count < 2 Then MsgBox "演算には最低2つのオブジェクトを選択してください。", vbExclamation Exit Sub End If Dim sr As ShapeRange Set sr = ActiveSelectionRange ' 最背面のオブジェクトをターゲット(ベース)にする Dim targetShape As Shape Set targetShape = sr.Last ' 選択順序の最後が重なり順の最背面 ' ターゲット以外の残りをソースにする Dim sourceShapes As ShapeRange Set sourceShapes = sr.RemoveRange(sr.Count, 1) ' 【処理の核心】 ' 1. Weld (溶接): すべての選択範囲を結合 ' 2. Trim (トリム): 重なった部分を切り抜く ' ここではソースをターゲットに溶接する例 Dim resultShape As Shape Set resultShape = targetShape.Weld(sourceShapes, True, True) ' 処理後のクリーンアップ resultShape.CreateSelection MsgBox "ブール演算が完了しました。" End Sub

コードの解説

  • `ActiveSelectionRange`: 選択中のオブジェクトを操作するための強力な武器です。
  • `RemoveRange`: 特定のオブジェクトを除外することで、演算のベースと演算材料を柔軟に切り分けます。
  • 第2引数・第3引数 (`True, True`): これらは「元オブジェクトを削除するか」「結果をどう扱うか」を指定するブール値です。ここを `False` にすると、元図形が残ってしまい、ファイルサイズが肥大化する原因になります。

3. なぜ「CreateShapeRangeFromExclusion」なのか?

上級者を目指すなら、メソッドの選択肢を広げましょう。特に `CreateShapeRangeFromExclusion` は、重なり合った領域を特定し、その「除外領域」から新たなパスを生成する非常に強力な関数です。

これを使えば、「重なっている部分だけをくり抜く」といった複雑な処理も、たった数行で実装できます。

安定して動作させるための鉄則

1. レイヤーの固定を解除: `Layer.Locked = False` であることを事前に確認すること。
2. グループ化の解除: 複雑なグループ化が含まれていると、演算は失敗しやすくなります。`UngroupAll` で一度フラットにするのが安全です。
3. エラーハンドリング: `On Error Resume Next` を活用し、演算不可能なパス(テキストやビットマップなど)が混入した際のクラッシュを防ぎましょう。

4. エンジニアへのアドバイス:マクロ記録の先へ

ここまで読み進めたあなたなら、もう「記録したコード」に縛られる必要はありません。

CorelDRAWのVBAは、オブジェクトのプロパティを直接叩くことで、手動操作よりも数倍速いレスポンスを実現できます。特に、数千個のパスを処理するような大規模なデータであれば、画面の再描画を止める `Optimization = True` を処理の冒頭に入れるだけで、劇的な速度向上が見込めます。

「自動化とは、手作業の置き換えではなく、手作業では不可能な解法を見つけることである」

この言葉を胸に、ぜひあなたの業務にCorelDRAW VBAの魔法をかけてみてください。何か詰まったら、いつでも戻ってきてください。私たちは常にコードの深淵で待っています。


Happy Coding! 次回は、さらに高度な「ノード解析」によるパスの自動修正について解説します。

タイトルとURLをコピーしました