Tekla Structure API(c#):オブジェクトツリーの接続と取得

Tekla Structureoff.siteを参照 )-建築設計のプロセスを自動化するシステム。 大企業で使用する場合、Teklを既存のエンタープライズ管理システムに統合したいのは自然なことです。



したがって、最初のタスクは、モデルオブジェクトのツリーを取得することです。 ツリーは、モデル->アセンブリ( Assembly )の形式である必要があります。モデルの構成->アセンブリ( Part )の詳細。 オブジェクトツリーは、既存の図面から取得する必要があります。 図面リストのプリズムを使用してモデルを分解します(不明瞭に聞こえますが、記事の過程ですべてが明らかになります)。



使用されている開発システムVisual Studio 2013コミュニティ、c#言語。



Tekla Structureには独自のapiがあり、特別なスタートアップパッケージ (サイトに登録した後にダウンロードできます)がインストールされています。



新しいプロジェクトを作成したら、まず、必要な* .dllをReferencesに追加します。 現在のタスクには、次のものが必要です。

  1. Tekla.Structures.dll(一般的な機能)
  2. Tekla.Structures.Model.dll(モデル自体の操作用)
  3. Tekla.Structures.Drawing.dll(図面の操作用)


Tekla Structureに接続

接続するには、Tekla Structureが起動され、目的のモデルが開かれている必要があります。



... using Tekla.Structures; using Tekla.Structures.Drawing; using Tekla.Structures.Model; ... Model model; DrawingHandler CurrentDrawingHandler; public MainForm() { model = new Model(); //    CurrentDrawingHandler = new DrawingHandler(); //    //    if (model.GetConnectionStatus() && CurrentDrawingHandler.GetConnectionStatus()) { InitializeComponent(); } else MessageBox.Show("Tekla Structures must be opened!"); }
      
      





図面のリストを取得する



リストを取得するために2つのオプションが開発されました。

  ... DrawingEnumerator drawingsEnum; if (rbSelectedDrawings.Checked) drawingsEnum = CurrentDrawingHandler.GetDrawingSelector().GetSelected(); // ,   else drawingsEnum = CurrentDrawingHandler.GetDrawings(); //    ...
      
      





木を造る



ここでは、モデル( Model )のオブジェクトとして描画オブジェクト( Drawing )を取得する方法に特に注目する価値があります。 すべての情報(組成、重量、長さ、ブランド、素材など)はモデルのオブジェクト内にあります。



ビルドするには:



 Assembly assembly = model.SelectModelObject(((drawingsEnum.Current as AssemblyDrawing)).AssemblyIdentifier) as Assembly;
      
      





詳細について:



 Tekla.Structures.Model.Part part = model.SelectModelObject((drawingsEnum.Current as SinglePartDrawing).PartIdentifier) as Tekla.Structures.Model.Part;
      
      





レポートからパラメーターを取得するには、次の方法を使用します:( 描画テンプレートを検討する場合、利用可能なすべてのパラメーターをTeklで表示できます



  int number = 0; assembly.GetReportProperty("MODEL_TOTAL", ref number); //    string assembly_pos = ""; assembly.GetReportProperty("ASSEMBLY_POS", ref assembly_pos); //    double thickness = 0.0; part.GetReportProperty("PROFILE.WIDTH", ref thickness); //   ...
      
      





ツリー自体の構築:



  ... NameElement = ""; ProjectInfo projectInfo = model.GetProjectInfo(); //    - , ,   .. ModelInfo modelInfo = model.GetInfo(); //    -      TreeNode parentNode = new TreeNode(); parentNode.Text = projectInfo.ProjectNumber; //   -   (  ) while (drawingsEnum.MoveNext()) //   { if (drawingsEnum.Current is AssemblyDrawing) //     { Assembly assembly = model.SelectModelObject(((drawingsEnum.Current as AssemblyDrawing)).AssemblyIdentifier) as Assembly; string assembly_pos = ""; assembly.GetReportProperty("ASSEMBLY_POS", ref assembly_pos); NameElement = assembly_pos; } else if (drawingsEnum.Current is SinglePartDrawing) //     { Tekla.Structures.Model.Part part = model.SelectModelObject((drawingsEnum.Current as SinglePartDrawing).PartIdentifier) as Tekla.Structures.Model.Part; string part_pos = ""; part.GetReportProperty("PART_POS", ref part_pos); NameElement = part_pos; } TreeNode drawingNode = new TreeNode(); drawingNode.Tag = drawingsEnum.Current; drawingNode.Text = NameElement; if (drawingsEnum.Current is AssemblyDrawing) AddChildDrawingObjectsToTreeNode(drawingNode, drawing as AssemblyDrawing); //      parentNode.Nodes.Add(drawingNode); } ...
      
      





アセンブリの詳細を取得する



アセンブリには、1つのメインパーツassembly.GetMainPart()と多くのセカンダリアセンブリ.GetSecondaries()があることに注意してください。 両方を手に入れる必要があります。



 private void AddChildDrawingObjectsToTreeNode(TreeNode parentNode, AssemblyDrawing parentDrawing) { Assembly assembly = model.SelectModelObject(parentDrawing.AssemblyIdentifier) as Assembly; Tekla.Structures.Model.Part part = assembly.GetMainPart() as Tekla.Structures.Model.Part; string part_pos = ""; part.GetReportProperty("PART_POS", ref part_pos); TreeNode objectNode = new TreeNode(); objectNode.Tag = part; objectNode.Text = part_pos; parentNode.Nodes.Add(objectNode); ArrayList secondaries = assembly.GetSecondaries(); for (int i = 0; i < secondaries.Count; i++) { Tekla.Structures.Model.ModelObject modelObject = secondaries[i] as Tekla.Structures.Model.ModelObject; part_pos = ""; modelObject.GetReportProperty("PART_POS", ref part_pos); objectNode = new TreeNode(); objectNode.Tag = modelObject; objectNode.Text = part_pos; parentNode.Nodes.Add(objectNode); } }
      
      





すべての詳細( パート )から、メソッドを使用して子を取得することもできます。



 ModelObjectEnumerator modelObjectEnum = part.GetChildren();
      
      





最初の問題は解決されました。



コードを記述するときに使用されるソース



  1. cadsupport.ru
  2. software-solutions-online.com
  3. topengineer.ru
  4. そしてもちろん、API、例、およびTekl自体が提供するその他のデータに関するヘルプ



All Articles