当初、DelphiでTekla Structuresと統合することを計画していました。 ただし、この方向でいくつかの作業が行われた後、c#に切り替えることが決定されました(
Tekla Structure API(c#):オブジェクトのツリーの接続と受信を参照 )。
Delphiで作業するときに得られた結果を誰かが役に立つかもしれません。
Tekla Structuresライブラリの接続
Tekla Structuresプログラムが正しくインストールされている場合、
[プロジェクト]-> [タイプライブラリのインポート]で次のことがわかります。
- Tekla_Structures(バージョン__)
- Tekla_Structures_Model(バージョン__)
ほとんどの場合、それらはすぐにはインストールされず、いくつかの
クラス名を変更する必要があります。 使用中の
Tekla_Structures_TLBと
Tekla_Structures_Model_TLBをプロジェクトに接続することを忘れないでください。
Tekla Structuresに接続する
接続するには、Tekla Structuresが起動され、必要なモデルが開かれている必要があります。
procedure TeklaConnect; var appModel: TModel; pi: ProjectInfo; mi: ModelInfo; mainInfo: String; begin appModel := TModel.Create(self);
モデルオブジェクトの取得
モデルからオブジェクトを取得するには、いくつかのオプションがあります。
procedure TeklaConnect; var objEnum: ModelObjectEnumerator; appModel: TModel; mainInfo: String; begin ... objEnum := appModel.GetModelObjectSelector.GetAllObjects;
すべての場合において、モデル要素は繰り返して取得されることに注意してください。 アセンブリK-1がモデルで5回見つかった場合、objEnumで何度も会います。
得られたモデルオブジェクトの分析
procedure TeklaConnect; var appModel: TModel; objEnum, objEnumChild: ModelObjectEnumerator; objModel: ModelObject; BeamObject: Beam; objectInfo: String; p: Profile; m: Material; profile, material: WideString; length,profile_width: Double; begin objEnum := appModel.GetModelObjectSelector.GetAllObjects; while (objEnum.MoveNext) do begin if objEnum.Current <> nil then begin objModel := objEnum.Current; profile := ''; objModel.GetReportProperty('PROFILE',profile);
コードを作成する際、Tekla Structuresで配布されているAPIヘルプを使用しました。