【CorelDRAW VBA道場】複雑なパス演算を「一瞬」で制する。ブール演算マスターへの道
こんにちは。CorelDRAWのオートメーションの世界へようこそ。
マクロの記録ボタンを押して、生成されたコードの羅列に呆然とした経験はありませんか? 「なぜこんなに長いコードになるのか」「なぜ狙ったオブジェクトが選択できないのか」。その悩み、今日で卒業しましょう。
今回は、手作業でやると数分かかる「複雑なパスの抜き・交差処理」を、VBAの強力なジオメトリ・エンジンを使って数ミリ秒で完結させる手法を伝授します。カッティングプロッター用のパス生成など、現場で即戦力となるテクニックです。
—
1. なぜ「手動操作」をコード化してはいけないのか?
多くの初心者が陥る罠は、「手動の操作(選択→ツール選択→実行)」をそのままコードに書き起こそうとすることです。
VBAの真髄は「UIを操作すること」ではなく、「オブジェクトモデルを直接叩くこと」にあります。特に、`CreateShapeRangeFromExclusion` や `Intersect` などのブール演算メソッドは、GUIを通さずメモリ上で完結するため、爆速かつ正確です。
核心となるメソッドたち
- `Shape.Intersect`: 重なり合った部分だけを残す(交差)
- `Shape.Exclude`: 重なり合った部分を切り抜く(抜き)
- `Shape.Weld`: 複数のパスを合体させる(結合)
これらを使いこなすには、CorelDRAWの「ShapeRange(図形の集合体)」という概念を理解することが不可欠です。
—
2. 実践:複雑な形状を「一瞬」で切り抜くコード
カッティングプロッター用のデータを作る際、枠線で不要なパスを切り抜く処理を例に挙げます。
Sub FastBooleanOperation()
Dim doc As Document
Dim sTarget As Shape, sTool As Shape
Dim sr As ShapeRange
Set doc = ActiveDocument
‘ 1. 処理対象のオブジェクトを特定(名前やIDで取得するのが鉄則)
‘ マクロの記録のように「選択」に依存させてはいけない
Set sTarget = doc.ActiveLayer.FindShape(Name:=”BaseShape”)
Set sTool = doc.ActiveLayer.FindShape(Name:=”CutterShape”)
‘ 2. ShapeRangeに格納(演算メソッドはRangeに対して使うのが定石)
Set sr = New ShapeRange
sr.Add sTarget
‘ 3. 実行:Exclude(抜き処理)
‘ sTargetからsToolの形状を切り抜く
‘ 成功すると、元の形状がsTargetに適用される
sTarget.Exclude sTool
‘ 4. 後処理:不要になったツールオブジェクトは削除
sTool.Delete
MsgBox “演算完了:カッティングデータ最適化完了!”, vbInformation
End Sub
—
3. 陥りやすい「3つの死の罠」
エンジニアとして、皆さんが必ずぶつかるであろう壁を先回りして解説します。
① 「オブジェクトが存在しない」エラー
`ActiveShape` を使うのはやめましょう。ユーザーが意図しない図形をクリックしているだけでエラーになります。必ず `FindShape` メソッドで名前を検索するか、レイヤー内のインデックスで特定してください。
② Undo(取り消し)の管理
VBAで大量の演算を行うと、Undoスタックが溢れてCorelDRAWがフリーズすることがあります。
‘ 処理の冒頭に記述
Optimization = True
‘ 処理の最後に記述
Optimization = False
doc.Refresh
この `Optimization` プロパティを挟むだけで、描画更新が停止され、処理速度が10倍以上向上します。
③ 閉じていないパスへの演算
ブール演算は「閉じたパス」同士でないと失敗します。コードの途中で `sTarget.Closed = True` を確認するロジックを入れるのが、堅牢なシステムを作るコツです。
—
4. プロの視点:なぜこれがカッティングプロッターに効くのか?
カッティングプロッターのデータを作る際、パスの重なり(オーバーラップ)は刃の摩耗や、誤カットの原因になります。
今回紹介した `Exclude` や `Weld` を駆使することで、「重なりを完全に除去し、外側のパスだけを抽出したクリーンな輪郭」を自動生成できます。これは手作業では数時間かかる作業ですが、コードなら一瞬です。
「マクロは作業を記録するもの」から「作業そのものを定義するもの」へ。視点を変えるだけで、あなたの生産性は劇的に向上します。
—
次のステップへ
CorelDRAW VBAの学習は、まず「オブジェクトに何ができるか」をドキュメント(Object Browser)で眺めることから始まります。
今回のコードをベースに、次は「特定のレイヤーにある全オブジェクトをループして、全てを結合する」といった処理に挑戦してみてください。それができれば、あなたはもう初心者ではありません。
さあ、退屈な手作業を自動化し、クリエイティブな時間を取り戻しましょう。何か詰まったら、いつでも戻ってきてくださいね。応援しています。
