解決したい課題(背景)
- 質量の桁数がバラバラで標題欄が見にくい。
- 小さい部品(g)と重いアセンブリ(kg)が混在し、手動修正はミスの元。
- 「気合の検図」を減らし、設計を論理的に自動化したい。
「設定で変えられる」という言葉に潜む、設計の停滞
会社の規定で「質量の有効桁数は3桁」と決まっています。
しかし、私たちが扱う部品は100kgを超える大物から、わずか0.01gの精密部品まで多岐にわたります。
ある人が聞きました。
「テンプレートのデフォルトだと質量が××.××××になりますが、どうしたら良いのでしょう?」
そして会議でリーダーが自慢げにこう言いました。
「標題欄のパラメータの精度設定をその都度書き換えれば、3桁で表示できるよ!ホラッ」
たしかにその通りです。
でも、私はあることがとても気になりました。
「毎回、標題欄のために手作業で設定をいじるのは、設計の本質だろうか?」
「似ても似つかない過去図面を流用して、設定を引き継ぐような『綱渡り』をいつまで続けるのか?」
毎回数クリックの手間をかける「内職」を、設計者に強いてはいけない。
100kgでも0.01gでも、図面を開いた瞬間に「正しいルール(3桁)」で「読みやすい単位(g/kg)」に整っている。 この「当たり前の基準」をシステムとして保証することこそが、本当の設計DXだと考えたのです。
iLogicコード(コピペエリア)
単位を自動で切り替え、常に有効桁数3桁で表示するためのiLogicコードを作成しました。
- 「g」:質量 < 1kg(未満)
- 「kg」:質量 >= 1kg(以上)
このコードは、数値の大きさに応じて小数点の位置を調整し、常に「3桁の数字+単位」という文字列を生成します。
質量自動切替コード
' ==========================================================
' 【iLogic】質量表示の有効桁数3桁化 & 単位(g/kg)自動切替
' ==========================================================
' このルールは、モデルの質量を読み取り、
' 「有効桁数3桁」に整えた文字列をカスタムプロパティに書き出します。
' ----------------------------------------------------------
' 1. モデルから現在の質量を取得(Inventor標準はkg単位)
Dim m As Double = iProperties.Mass
Dim displayMass As String = ""
' 質量が0の場合は処理をスキップまたは0を表示
If m <= 0 Then
displayMass = "0 g"
Else
' --- 単位の判定と換算 ---
Dim targetValue As Double
Dim unitStr As String
If m < 1 Then
' 1kg未満ならグラム(g)に換算
targetValue = m * 1000
unitStr = " g"
Else
' 1kg以上ならキログラム(kg)のまま
targetValue = m
unitStr = " kg"
End If
' --- 有効桁数3桁への丸め処理 ---
' 数値の桁数(ログ)を取得して、どの位置で丸めるかを計算
Dim digits As Double = Math.Floor(Math.Log10(Math.Abs(targetValue)))
Dim scale As Double = Math.Pow(10, digits - 2)
Dim roundedValue As Double = Math.Round(targetValue / scale) * scale
' --- 文字列の整形 ---
' 「G3」書式を使うことで、常に有効桁数3桁で表示
displayMass = roundedValue.ToString("G3") & unitStr
End If
' 2. カスタムプロパティ「DisplayMass」に書き込み
' ※図面枠(標題欄)では、この「DisplayMass」という名前を参照してください。
iProperties.Value("Custom", "DisplayMass") = displayMass
' 3. 図面へ即座に反映させるための更新コマンド
InventorVb.DocumentUpdate()このコードによる表示例
- 0.001234 kg の場合 → 「1.23 g」
- 0.05678 kg の場合 → 「56.8 g」
- 1.2345 kg の場合 → 「1.23 kg」
- 12.345 kg の場合 → 「12.3 kg」
- 123.45 kg の場合 → 「123 kg」
- 1234.5 kg の場合 → 「1230 kg」
「初心者向け補足」のポイント
どこに貼ればいいの?
- Inventorの「iLogicブラウザ」を開き、右クリックで「ルールを追加」を選択。
- 適当な名前(例:
質量自動計算)をつけて、上のコードを全部消して貼り付けるだけ!
図面(標題欄)での設定方法は?
- 図面テンプレートの「標題欄」のテキスト編集画面で、以下の設定にする。
- タイプ:カスタムプロパティ – モデル
- プロパティ:DisplayMass(手入力して「追加」ボタンを押す)
自動で動かすには?
- 「管理」タブ > 「イベントトリガー」 を開く。
- 「ドキュメントの保存前」 にこのルールを指定する。
- これで、「保存」を押すたびに自動で質量が最新になります!
逆引きのカスタマイズ解説
単位の間にスペースを入れたくない:unitStr = " g" のスペースを消せばOK
有効桁数を4桁にしたい:digits - 2 を digits - 3 にすれば4桁になる
イベントトリガー: 「管理」タブ > 「イベントトリガー」から、「保存前」や「モデルの状態変化時」にこのルールが実行されるように設定してください。
これにより、設計変更時に標題欄の数値が自動で更新されます。
図面テンプレート: 図面(idw/dwg)の標題欄で、テキストの参照先を「モデルのカスタムプロパティ」から DisplayMass に設定しておけば、すべての図面でこの「3桁表示」が適用されます。
手動での単位換算や桁数の調整を自動化することで、計算ミスや転記ミスといった「ヒューマンエラー」を構造的に排除できるようになります。ぜひお試しください。
ページ番号表示コード
手順
- 図面のカスタムプロパティに
PageTextという項目を作ります。 - 図面側のiLogicルールに以下のコードを記述し、イベントトリガーの「シート変更時」や「保存前」に設定します。
- 標題欄のテキストに、このカスタムプロパティ
<PageText>を配置します
' 全シート数を確認
Dim totalSheets As Integer = ThisDoc.Document.Sheets.Count
Dim currentSheet As Integer = 0
' 現在のシート番号を取得
For i As Integer = 1 To totalSheets
If ThisDoc.Document.Sheets.Item(i).Name = ActiveSheet.Sheet.Name Then
currentSheet = i
Exit For
End If
Next
' 1枚だけの時は空文字、複数枚の時は「1/2」などの形式にする
If totalSheets > 1 Then
iProperties.Value("Custom", "PageText") = currentSheet & " / " & totalSheets
Else
iProperties.Value("Custom", "PageText") = "" ' 1枚のみの場合は何も表示しない
End If| 項目 | 修正前 (Before) | 修正後 (After) |
|---|---|---|
| 表示精度 | 1.234567kg (バラバラ) | 1.23kg (有効桁3桁) |
| 単位 | kg固定 (0.001kg) | g/kg 自動切替 (1.0g) |
| 操作 | 手動でプロパティ変更 | iLogicで完全自動 |
「条件によって表示・非表示を切り替える賢い標題欄」を1つ作っておけば、図面枚数が嵩むことが多いものでもこのテンプレートを使えばミスは起きないと言うことになります。
実装のステップ
以下の手順を箇条書きにしておきます。
- 外部ルールの保存: 共有サーバのパス(例:
S:\...)をメモ。 - イベントトリガーの設定: 「保存前」に設定することを強調。
- 図面枠(標題欄)の編集: カスタムプロパティ
DisplayMassとPageTextをテキストボックスにリンクさせる手順。
手順:
- iLogicブラウザの「外部ルール」タブを右クリックし、「外部ルールディレクトリを構成」を選択。
共有フォルダ(例:S:\Design_Standard\iLogic\)を登録します。
そこに作成したコードを保存します(例:Mass_AutoUnit.vb)。
メリット: * 管理者がコードを1箇所書き換えるだけで、全員分が同時にアップデートされます。
各個人のPCに設定をコピーする必要がありません。 - 2. 「イベントトリガー」をテンプレートに仕込む
「保存前」に外部ルールを実行する設定を、**パーツ(.ipt)、アセンブリ(.iam)、図面(.idw)の「テンプレートファイル」**自体に持たせます。
設定方法:
テンプレートファイル(新規作成時に開く元ファイル)を開きます。
「イベントトリガー」を開き、「ドキュメントの保存前」を選択。
「外部ルール」の中から、共有フォルダに置いたMass_AutoUnitを指定します。
結果:
メンバーが「新規作成」で設計を始める。
保存するたびに、裏で自動的に共有フォルダのコードが読み込まれ、質量やページ番号が更新される。
メンバーはiLogicの存在すら意識せず、正しく管理された図面が出来上がる。
システム部門がプロジェクトファイル(.ipj)を管理していて、個人の裁量で編集できないという状況は、大企業やセキュリティの厳しい現場では「あるある」ですね。
プロジェクトファイルが触れない場合、「ユーザー単位の設定」または「テンプレートへの埋め込み」で対応するのが現実的です。
以下の3つのステップで進めるのがスムーズです。
外部ルールのパスを通す(ユーザー設定)
プロジェクトファイルで指定できない場合は、個々のPCのInventor設定で「外部ルールの参照先」を追加します。これならシステム担当の手を煩わせることなく、各自で設定可能です。
- 手順:
- ツール > オプション > iLogic 設定 を開く。
- 「外部ルールディレクトリ」の「+」ボタンを押し、共有フォルダ(例:
S:\設計標準\iLogic\)を追加する。
- メリット: 一度設定すれば、どのプロジェクトファイルを開いていても共通のルールが使えます。
テンプレートに「ルール実行」を仕込む
プロジェクトファイルが触れなくても、「図面テンプレート(.idw)」や「パーツテンプレート(.ipt)」**は触れるはずです。
- イベントトリガーの活用:あらかじめ共有フォルダの外部ルールを呼び出す設定をしたテンプレートを配布します。
- 配布方法:システムが管理している公式テンプレートフォルダとは別に、「DesignDX用テンプレート」としてフォルダを共有し、そこから新規作成してもらうように運用します。
将来の自分への「一言」
年数回のミスを『たまにあること』と笑うか、『仕組みの欠陥』と捉えるか。
その意識の差が、設計現場をDX(変革)できるかどうかの境界線である。
「計算や転記といった『人間がやらなくていい作業』をロジックに任せることで、エンジニアは本来の『創造的な設計』に集中できる。


コメント