【入門編】【図面レイヤー管理】LayerMgrを使った製図規格準拠のレイヤー自動振り分けと線の太さ制御 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは。SolidWorks APIの世界へようこそ。

私はこれまで、数えきれないほどの設計現場で「マクロの記録」から卒業し、真の自動化を志すエンジニアたちを導いてきました。今日は、図面作成業務において最も退屈で、かつ最もミスが許されない作業の一つ、「図面レイヤー(画層)管理」の自動化についてお話ししましょう。

「寸法線が外形線レイヤーに入っている」「中心線の太さがバラバラだ」……。こうした些細な不備が、図面の信頼性を損ないます。しかし、これらを一つずつ手動で直すのは、エンジニアの貴重な時間の浪費です。

この記事を読み終える頃には、あなたは`LayerMgr`を掌握し、ワンクリックで社内基準に完璧に準拠した図面を生成する力を手にしているはずです。

—

1. 概念の掌握:SolidWorksにおけるレイヤーの正体

VBAを書く前に、まずは「オブジェクトの構造」を理解しましょう。ここが、マクロの記録から脱却するための最大の関門です。

SolidWorksの図面(Drawing)において、レイヤーを司るのは`LayerMgr`オブジェクトです。
APIの階層構造は以下のようになっています。

1. SldWorks: アプリケーション本体
2. ModelDoc2: 開いているドキュメント(図面)
3. LayerMgr: レイヤー管理の司令塔
4. Layer: 個別のレイヤー設定(色、太さ、線種)

この構造を意識するだけで、コードの書き方は劇的に整理されます。

—

2. 秘伝のソースコード:レイヤー自動振り分けマクロ

では、実用的なコードを見ていきましょう。このマクロは、「必要なレイヤーを自動生成し、図面内の要素(寸法、中心線、注記)を適切な場所へ振り分ける」という、実務で最も求められる機能を凝縮したものです。

‘
‘ SolidWorks VBA Drawing Layer Organizer
‘ テーマ: 製図規格に準拠したレイヤー自動生成と要素の自動振り分け
‘

Option Explicit

Sub Main()
‘ — オブジェクト宣言 —
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swLayerMgr As SldWorks.LayerMgr
Dim swView As SldWorks.View
Dim swAnn As SldWorks.Annotation

‘ SolidWorksに接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ ドキュメントが図面かどうかをチェック
If swModel Is Nothing Or swModel.GetType <> swDocDRAWING Then
MsgBox “図面を開いた状態で実行してください。”, vbExclamation
Exit Sub
End If

Set swDraw = swModel
Set swLayerMgr = swModel.GetLayerManager

‘ — ステップ1: レイヤーの定義と作成 —
‘ ここで社内規定のレイヤーを定義します
‘ CreateLayer(LayerMgr, 名前, 色(RGB), 線種, 太さ)
CreateStandardLayers swLayerMgr

‘ — ステップ2: 全てのビューを走査して要素を振り分ける —
‘ アクティブなシートから順にアノテートアイテムを取得
Set swView = swDraw.GetFirstView ‘ 最初は「シート」そのものが取得される

Do While Not swView Is Nothing
‘ ビュー内の最初のアノテートアイテム(注釈・寸法・中心線など)を取得
Set swAnn = swView.GetFirstAnnotation2

Do While Not swAnn Is Nothing
‘ 要素の種類(Type)に応じてレイヤーを変更
Select Case swAnn.GetType
Case swAnnotationType_e.swDimension, swAnnotationType_e.swDisplayDimension
‘ 寸法線
swAnn.Layer = “DIM_寸法”
Case swAnnotationType_e.swCenterMark, swAnnotationType_e.swCenterLine
‘ 中心線
swAnn.Layer = “CENTER_中心線”
Case swAnnotationType_e.swNote
‘ 注記
swAnn.Layer = “NOTE_注記”
End Select

Set swAnn = swAnn.GetNext2
Loop

Set swView = swView.GetNextView
Loop

‘ 最後に再描画
swModel.GraphicsRedraw2

MsgBox “レイヤーの整理が完了しました。美しい図面ですね!”, vbInformation
End Sub

‘ ——————————————————————————
‘ サブ関数:レイヤー作成の自動化
‘ ——————————————————————————
Sub CreateStandardLayers(ByRef mgr As SldWorks.LayerMgr)
‘ 既存のレイヤーがあればスキップ、なければ作成
‘ 第5引数の太さ:0.18mm=1, 0.25mm=2, 0.35mm=3, 0.5mm=4 (標準定義による)

‘ 名前, 色(RGB), 線種(0=実線), 太さ(1=細線)
AddLayerIfMissing mgr, “DIM_寸法”, RGB(0, 255, 0), 0, 1
AddLayerIfMissing mgr, “CENTER_中心線”, RGB(255, 0, 0), 2, 1 ‘ 2=一点鎖線
AddLayerIfMissing mgr, “NOTE_注記”, RGB(255, 255, 0), 0, 1
End Sub

Sub AddLayerIfMissing(ByRef mgr As SldWorks.LayerMgr, name As String, color As Long, style As Long, width As Long)
‘ レイヤーが存在するか確認し、なければ作成
If mgr.GetLayer(name) Is Nothing Then
‘ AddLayer(名前, 説明, 色, 線種, 太さ)
mgr.AddLayer name, “AutoGenerated”, color, style, width
End If
End Sub

—

3. このコードに込めた「極限の知見」:解説とポイント

初心者の方が陥りやすい罠と、プロの設計思想をいくつか解説します。

① 「マクロの記録」が教えてくれない `Select` の排除

マクロの記録を使うと、必ず `Select4`(要素を選択する)というコードが出てきます。しかし、大量の図面要素を扱う場合、選択処理は画面描画を伴うため非常に低速です。
今回のコードでは、`GetFirstAnnotation2` と `GetNext2` を使い、「選択せずにオブジェクトを直接掴んで操作」しています。これが爆速マクロへの第一歩です。

② `LayerMgr` の堅牢な操作

レイヤーを操作する際、もし指定した名前のレイヤーが存在しないと、APIはエラーを吐いて停止します。
`AddLayerIfMissing` というサブ関数を作っているのは、「なければ作る、あればそれを使う」というべき論理をカプセル化し、エラーを未然に防ぐためです。

③ 線の太さと線種のコントロール

`mgr.AddLayer` の引数には、数値(Integer)が入ります。

  • 線種: `0` (実線), `1` (破線), `2` (一点鎖線)
  • 太さ: SolidWorksのシステム設定で定義されたインデックス値

これらをマスターすることで、社内の製図標準(JISやISO)をコードレベルで完全に担保できるようになります。

—

4. 陥りやすいエラーと対策

1. 「オブジェクト変数または With ブロック変数が設定されていません」

  • 原因:図面ではないドキュメント(部品やアセンブリ)で実行している可能性があります。冒頭の `swModel.GetType` チェックは必須です。

2. 要素が動かない

  • 原因:`swAnn.Layer = “名前”` の際、名前に誤字脱字があると無反応になることがあります。定数や変数を使い、文字列の直接入力を最小限にするのがコツです。

—

最後に:エンジニアとして次のステップへ

図面レイヤーの自動化は、SolidWorks VBAの基本であると同時に、「データの標準化」という大きなテーマへの入り口です。

ここをクリアすれば、次は「図枠の自動置換」や「DXFへの一括書き出し」など、さらに高度な自動化が見えてきます。手作業で10分かかる作業を、0.5秒のコードに変える。その快感を知ったとき、あなたはただの設計者から、「設計環境を創造するエンジニア」へと進化します。

このコードをベースに、ぜひあなたの会社の規格に合わせてカスタマイズしてみてください。分からないことがあれば、いつでもまた聞きに来てくださいね。

一歩ずつ、確実に。あなたの自動化の旅を応援しています。

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