0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

STLファイルを半透明のIVファイルにPythonで変換する

Posted at

STL(3Dジオメトリ)ファイルを半透明なIV(3D-CAD形式)ファイルに変換する.

ジオメトリ情報のみのモデル(STLファイル)に対して,透明度というプロパティを追加し,.ivファイルとして保存する.
下記のPythonスクリプトを実行すると
(同じディレクトリにAsciiフォーマットのmonkey.stlがあること)
monkey_transparent40.iv という半透明モデルが同じディレクトリに出力される.

スクリーンショット 2025-10-05 6.37.50.jpg

Monkey半透明.jpg

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ライブラリ.

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?