PythonでiCADを操る-SDK+ Tips 2021/7/4

目次

.icdモデルを開く。閉じる

はじめに

  iCADの「コマンド開発機能」のひとつであるSDK+をPythonで利用するための「Tips集」です。
  素人の書いたものなので、正確さに欠ける個所も多々あるかと思いますが、ご勘弁を。
  尚、詳細は「sxnet.chm」(SDK+のヘルプファイル)を参照願います。
  「Sample File」は保存フォルダー(C:\icadsx\etc\SXNET\SAMPLE\c#)以下のフォルダーとファイル名
  を記述しました。
  また、スクリプト冒頭の
  
  # -*- coding: UTF-8 -*-

  import clr
  clr.AddReference('sxnet')
  from sxnet import *
  SxSys.init(3999)    #システム初期化

は省略してあります。

.icdモデルを開く。閉じる

  Sample File:  \SxEnt\GetModel\GetModel.cs
                \SxFile\Sxfile\SxFile.cs
  
  ファイル操作用のクラスは
    SxFile クラス     モデルファイル、部品ファイル、記号ファイルの基底クラス
    SxFileModelクラス icd DXF STEP ParaSolid(x_b,x_t) を開く場合
    SxModel クラス   .icd モデル操作はこれ(開く以外)
  の三つがあります。

  sxnet Help(sxnet.chm)の解説には

  #SxFile クラス
    モデルファイル、部品ファイル、記号ファイルの基底クラス(抽象クラス)
    CADで取り扱う各ファイルへアクセスするための基本抽象クラスです。
    インスタンスは、本クラスから派生したクラスで生成して下さい。

  #SxFileModel クラス icd DXF STEP ParaSolid(x_b,x_t) を開く場合 
    図面(モデル)ファイルにアクセスするためのクラスです。
    SXpc,DXF,STEP,IGES等の図面変換コマンドでインポート可能なファイル、
    Parasolidトランスミットファイルも含みます。
    CAD上へのモデルファイルのロードや、情報取得処理を行います。

  #SxModel クラス .icd モデル操作はこれ(開く以外)
    CAD上に開かれている図面(モデル)
    CAD上のモデルにアクセスするためのクラスです。
    新規図面開設、保存、クローズ、出図、モデル情報の設定/取得、 モデル内のVS/WFの開設/問い合わせ
    、等の、開設済モデルに関連する処理を行う事ができます。
    ファイルからモデルをロードするには、SxFileModelクラスの、 openメソッドを参照して下さい。
    開設済みのモデルの取得は、本クラスの、getModelメソッド、 getModelListメソッドを参照して下さい。

  と書かれています。
  .icd Fileを開くには

  1. 関数のような開き方

    model = SxFileModel(fp_fn).open(False)     #  modelを開く ファイルを開く  読み取り専用OFF
                
2. fileインスタンスを介して開く

    path = 'c:/'      # 'c:\'でも可
    fn = 'test.icd'
    fp_fn = path + fn

    file = SxFileModel(path,fn) # もしくは  file = SxFileModel(fp_fn)

    try:
        model = file.open(True)     # icd Modelを開く 読み取り専用ONN
    except:
        print(fn + 'を開けませんでした')

    #fileを介してファイル情報が取得できる。
    inf_detail = file.getInfDetail();

    #!!!定番 モデルファイルを閉じる                
    model.delete(False)    #モデルを閉じる(保存確認メッセージを出さない)

といった感じになります。 あとあと更新日、図面コメント等のファイル情報を取得したい場合は「file」インスタンスを作成しておいた方が便利です。 開くだけなら「1」の関数みたいな使い方でもかまいません。 「model」インスタンスも作成せずに

    SxFileModel(fp_fn).open(False)     #  modelを開く ファイルを開く  読み取り専用OFF

でも開くことは可能ですが、閉じることができなくなります。 ファイルを「開く」と「閉じる」でクラスが違うというところに違和感があったのですが、 使っているとそれなりの理由があるんだ、と思うようになりました。 「try:」節はファイル読み込みに失敗した時にスクリプトが終了しないようにするためのエラー処理です。 エラー処理は充実している方がいいのでしょうが、全てを網羅するのは素人には難しいです。