STL(3Dジオメトリ)ファイルを半透明なIV(3D-CAD形式)ファイルに変換する.
ジオメトリ情報のみのモデル(STLファイル)に対して,透明度というプロパティを追加し,.ivファイルとして保存する.
下記のPythonスクリプトを実行すると
(同じディレクトリにAsciiフォーマットのmonkey.stlがあること)
monkey_transparent40.iv という半透明モデルが同じディレクトリに出力される.
stl2iv_transparency.py
# coding: utf-8
import vtk
import os
# --- 実行に必要な定数 (ファイルの指定) ---
INPUT_FILE = "monkey.stl"
OUTPUT_FILE = "monkey_transparent40.iv"
TRANSPARENCY = 40 # 求める透明度 (40%)
# 関数の定義: ファイルパスを引数として受け取るように変更
def stl_to_iv_with_opacity(input_stl_path, output_iv_path, transparency_percent):
"""
STLファイルを読み込み、指定された透明度で.iv (Inventor)ファイルとして出力する。
"""
# 不透明度の計算 (透明度 40% は不透明度 0.6)
opacity = 1.0 - (transparency_percent / 100.0)
print(f"入力ファイル: {input_stl_path}")
print(f"出力ファイル: {output_iv_path}")
print(f"Opacity: {opacity:.2f} (透明度 {transparency_percent}%)")
# 2. STLファイルの読み込み
reader = vtk.vtkSTLReader()
reader.SetFileName(input_stl_path)
reader.Update()
# 3. ポリゴンデータからジオメトリを作成
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(reader.GetOutputPort())
# 4. アクター(メッシュ)の作成と不透明度の設定
actor = vtk.vtkActor()
actor.SetMapper(mapper)
prop = actor.GetProperty()
prop.SetOpacity(opacity)
prop.SetColor(1.0, 0.5, 0.0)
# 5. IV (Inventor) ファイルへの書き出し
writer = vtk.vtkIVWriter()
# --- 【NameError回避のため、rendererとrenderWindowの定義を復活】 ---
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
# -----------------------------------------------------------------
# アクターをレンダラーに登録
renderer.AddActor(actor)
# レンダリングを一度実行 (アクタープロパティを確定させる)
renderWindow.Render()
# SetInputConnection() を使って、エラーを回避し、IVファイルを生成することを最優先します。
writer.SetInputConnection(reader.GetOutputPort())
# ファイル名を設定
writer.SetFileName(output_iv_path)
# ファイルの書き出しを実行
writer.Write()
print("✅ 処理が完了しました。")
# --- 関数の呼び出し (スクリプトの実行) ---
stl_to_iv_with_opacity(INPUT_FILE, OUTPUT_FILE, TRANSPARENCY)
VTKパッケージの補足
VTK(Visualization Toolkit)は,画像処理・3Dグラフィックス・ボリュームレンダリング・データ可視化を行うためのPythonライブラリ.

