【入門編】【中級者向け】大量のベクターイラストレーションのストローク(線)を一括してアウトラインオブジェクトに変換し、拡大縮小時の変形崩れを防止 – CorelDRAW VBA解析バイブル

スポンサーリンク

CorelDRAW VBAの極意:線の「呪縛」を解き放ち、デザインの整合性を守るアウトライン化術

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

マクロの記録ボタンを押して終わりの日々は今日で卒業です。CorelDRAW VBAの真髄は、「オブジェクトの背後にあるデータ構造」を理解し、それを意のままに操ることにあります。

今回は、実務の現場で誰もが一度は頭を抱える「拡大縮小で線の太さが崩れる問題」を、VBAを使って一瞬で解決する手法を伝授します。

—

なぜ「ストローク」をアウトライン化する必要があるのか?

デザインの現場では、線幅(ストローク)を持ったオブジェクトは、拡大縮小した瞬間に「線の太さの比率」が崩れ、設計意図と異なる見た目になるリスクを孕んでいます。これを回避する最強の手段が「ストロークのアウトライン化(Convert Outline to Object)」です。

しかし、数百のオブジェクトを一つずつ手作業で処理するのは非効率の極み。VBAを使って、ドキュメント内の全ベクター線を一括で「塗り」のオブジェクトへと昇華させましょう。

—

【実戦コード】全ベクター線を一括アウトライン化

このスクリプトは、ドキュメント内の全ページ・全レイヤーを巡回し、ストロークを持つすべてのオブジェクトをパスへと変換します。

Sub ConvertAllOutlinesToObjects()
Dim p As Page
Dim s As Shape

‘ 処理の高速化:画面描画を停止する(これだけで体感速度が数倍変わります)
Application.Optimization = True

‘ 全ページをループ
For Each p In ActiveDocument.Pages
p.Activate
‘ ページ内の全オブジェクトを再帰的に検索
‘ FindShapesメソッドは、複雑なドキュメントをさばくための鍵です
For Each s In p.FindShapes(Query:=”@outline.width > 0″)
‘ 線幅が0より大きいものだけをターゲットにする
If s.Outline.Type <> cdrNoOutline Then
‘ ConvertToCurves は「パス化」だが、Outline変換には専用のメソッドを使う
s.Outline.ConvertOutlineToObject
End If
Next s
Next p

‘ 処理完了、画面描画を再開
Application.Optimization = False
ActiveWindow.Refresh

MsgBox “すべてのストロークがアウトライン化されました。”, vbInformation
End Sub

—

コードの核心:なぜこう書くのか?

1. `Application.Optimization = True` の重み

CorelDRAWのVBAにおいて、最も重い処理は「描画の更新」です。オブジェクトを一つ変換するたびに画面を再描画させていては、数千個のオブジェクトを処理する際にPCがフリーズしかねません。この一行は、プロのエンジニアが必ず仕込む「沈黙の高速化」です。

2. `FindShapes` という魔法

初心者はよく `For Each s In ActivePage.Shapes` と書きますが、これではグループ化された中のオブジェクトに手が届きません。`FindShapes` を使い、クエリ(条件式)を指定することで、奥深くに眠る線データまでピンポイントで捕捉できます。

3. `Outline.ConvertOutlineToObject`

これが今回の主役です。単純な `ConvertToCurves`(曲線化)と混同しないでください。`ConvertOutlineToObject` は、線の太さや角の形状(Join)を維持したまま、単なる「線」から「塗りを持つオブジェクト」へと変換します。これにより、拡大縮小してもデザインが一切崩れなくなります。

—

よくある落とし穴と対策

Q: 「オブジェクトがロックされています」というエラーが出る

A: `Locked` プロパティを確認してください。VBAはロックされたオブジェクトを触ろうとすると例外を吐きます。ループ内で `If s.Locked = False Then` というチェックを入れるだけで、堅牢性は格段に上がります。

Q: 複雑なグループ化が解除されてしまうのでは?

A: このスクリプトはオブジェクトの「属性」のみを変換するため、グループ構造は維持されます。安心して運用してください。

—

さあ、次のステップへ

今回のスクリプトをマスターしたあなたは、もう「手作業の奴隷」ではありません。CorelDRAW VBAの面白さは、このように「面倒な作業を、一瞬で終わるロジックに置き換える」快感にあります。

このコードをベースに、例えば「特定の線幅以下のものだけを抽出する」といった条件分岐を加えてみてください。それが、あなただけの自動化エンジンを構築する第一歩です。

何か分からないことがあれば、またいつでも聞きに来てください。あなたのクリエイティブを加速させるためなら、いつでも力になりますよ。頑張ってくださいね!

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