NX Journal モデルのスクリーンショットを撮る
2020/01/15 categories:NX Journal| tags:NX Journal|Python|
モデルを開いてスクリーンショットを撮る処理を繰り返すプログラムを作成しました。パーツリストを作成したり、資料を作成するときに使えると思います。
今回はTeamcenter上のモデルを対象にしましたので、モデルを開くときはIDとリビジョンを指定して開くことになります。そこで処理対象のモデルをCSVから読み込むことにしました。CSVファイルの中身はヘッダーありでIDとリビジョンを羅列した内容にします。
画像は座標系とビューネームを非表示に、 投影はトリメトリックにしてビューにフィットさせて、背景は白としています。
Pythonコード
import NXOpen
import NXOpen.Gateway
import NXOpen.UF
import csv
import os
def main():
theSession = NXOpen.Session.GetSession()
# csvを開く
dicts = open_csv()
# 開けなければ終了
if dicts is None:
return
# NXoutputフォルダが存在するか
if not os.path.exists("D:\\NXoutput"):
os.mkdir("D:\\NXoutput")
for d in dicts:
# 図面のファイル名を作成
dwg_filename = "@DB/" + d["ID"] + "/" + d["リビジョン"]
# ファイルを開く
workPart = openPart(theSession, dwg_filename)
# アプリケーションの切り替え
theSession.ApplicationSwitchImmediate("UG_APP_MODELING")
# 座標系非表示
workPart.WCS.Visibility = False
# ビューネームの非表示
workPart.Preferences.NamesBorderVisualization.ShowModelViewNames = False
# データムの非表示
hiddenDatums(theSession, workPart)
# 不等角投影
view = workPart.ModelingViews.WorkView
view.Orient("ORIGINAL_TRIMETRIC", NXOpen.View.ScaleAdjustment.Fit)
# スクリーンショット
filename = "D:\\NXoutput\\" + workPart.GetStringAttribute("2_part_no") + ".png"
theUfSession = NXOpen.UF.UFSession.GetUFSession()
theSession.Preferences.ScreenVisualization.TriadVisibility = 0
exportPng(workPart, filename)
def exportPng(workPart, filename):
theUI = NXOpen.UI.GetUI()
imageExportBuilder1 = theUI.CreateImageExportBuilder()
imageCaptureBuilder1 = workPart.ImageCaptureManager.CreateImageCaptureBuilder()
imageCaptureBuilder1.Size = NXOpen.Gateway.ImageCaptureBuilder.ImageSize.Pixels128
imageExportBuilder1.SetCustomBackgroundColor([1.0, 1.0, 1.0])
imageExportBuilder1.RegionMode = False
imageExportBuilder1.SetRegionTopLeftPoint([0, 0])
imageExportBuilder1.RegionWidth = 1
imageExportBuilder1.RegionHeight = 1
imageExportBuilder1.FileFormat = NXOpen.Gateway.ImageExportBuilder.FileFormats.Png
imageExportBuilder1.FileName = filename
imageExportBuilder1.BackgroundOption = NXOpen.Gateway.ImageExportBuilder.BackgroundOptions.CustomColor
imageExportBuilder1.EnhanceEdges = False
nXObject1 = imageExportBuilder1.Commit()
imageExportBuilder1.Destroy()
imageCaptureBuilder1.Destroy()
def hiddenDatums(theSession, workPart):
objects = []
objects.extend(workPart.Datums)
objects.extend(workPart.CoordinateSystems)
theSession.DisplayManager.BlankObjects(objects)
workPart.ModelingViews.WorkView.FitAfterShowOrHide(NXOpen.View.ShowOrHideType.HideOnly)
def openPart(theSession, id):
try:
# 既にファイルを開いていれば表示パートを変える
part1 = theSession.Parts.FindObject(id)
status1, partLoadStatus1 = theSession.Parts.SetActiveDisplay(
part1,
NXOpen.DisplayPartOption.AllowAdditional,
NXOpen.PartDisplayPartWorkPartOption.UseLast
)
partLoadStatus1.Dispose()
except Exception as e:
# 見つからなければファイルを開く
status1 = theSession.Parts.OpenBaseDisplay(id)
return theSession.Parts.Work
def open_csv():
try:
# ファイル選択ダイアログ表示
theUfSession = NXOpen.UF.UFSession.GetUFSession()
theUI = NXOpen.UI.GetUI()
ret = theUfSession.Ui.CreateFilebox("", "CSVファイルを選択", "csv", "*.csv")
# CSVを辞書のリストに変換
with open(ret[1]) as f:
reader = csv.DictReader(f)
dicts = [row for row in reader]
return dicts
except:
return None
if __name__ == '__main__':
main()