NX Journal 図面を開いてレイヤを非表示

CSVからID、リビジョン、図面名を取得して図面を開く、レイヤを非表示を繰り返すプログラムを作成しました。



import NXOpen
import NXOpen.Annotations
import NXOpen.Layer
import NXOpen.UF
import csv

def main():
    theSession  = NXOpen.Session.GetSession()
    
    # csvを開く
    dicts = open_csv()

    # 開けなければ終了
    if dicts is None:
        return
    
    # 文字列入力
    ret = input_string("Hidden layer number", "Hidden layer number")
    layer_number = int(ret[0])

    for d in dicts:

        # 図面のファイル名を作成
        dwg_filename = "@DB/" + d["ID"] + "/" + d["リビジョン"] + "/specification/"  + d["図面名"]
        
        # ファイルを開く
        workPart = openPart(theSession, dwg_filename)
        
        # アプリケーションの切り替え
        theSession.ApplicationSwitchImmediate("UG_APP_DRAFTING")

        # レイヤを変更
        hiddenLayer(workPart, layer_number)

def hiddenLayer(workPart, layer_number):
    # レイヤを非表示にする
    stateArray = [NXOpen.Layer.StateInfo(layer_number, NXOpen.Layer.State.Hidden)]
    workPart.Layers.ChangeStates(stateArray, False)

def input_string(title, default_string):
    # ret[0] : input string
    # ret[1] : 1 = Back, 2 = Cancel, 3 = OK (Accept default ), 5 = Data entered, 8 = Disallowed state
    theUfSession  = NXOpen.UF.UFSession.GetUFSession()
    theUI = NXOpen.UI.GetUI()
    theUI.LockAccess()
    ret = theUfSession.Ui.AskStringInput(title, default_string)
    theUI.UnlockAccess()
    return ret

def viewUpdate(workPart):
    # ビューの更新
    try:
        workPart.Views.WorkView.UpdateCustomSymbols()
        views = [ view for view in workPart.DraftingViews ]
        workPart.DraftingViews.UpdateViews(views)
    except Exception as e:
        pass

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()

コメント

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