【入門編】【中級者向け】CreateShapeRangeFromExclusionなどの高度なブール演算メソッドをVBAから駆使する – CorelDRAW VBA解析バイブル

スポンサーリンク

【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)で眺めることから始まります。

今回のコードをベースに、次は「特定のレイヤーにある全オブジェクトをループして、全てを結合する」といった処理に挑戦してみてください。それができれば、あなたはもう初心者ではありません。

さあ、退屈な手作業を自動化し、クリエイティブな時間を取り戻しましょう。何か詰まったら、いつでも戻ってきてくださいね。応援しています。

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