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! 次回は、さらに高度な「ノード解析」によるパスの自動修正について解説します。
