したがって、最初のタスクは、モデルオブジェクトのツリーを取得することです。 ツリーは、モデル->アセンブリ( Assembly )の形式である必要があります。モデルの構成->アセンブリ( Part )の詳細。 オブジェクトツリーは、既存の図面から取得する必要があります。 図面リストのプリズムを使用してモデルを分解します(不明瞭に聞こえますが、記事の過程ですべてが明らかになります)。
使用されている開発システムVisual Studio 2013コミュニティ、c#言語。
Tekla Structureには独自のapiがあり、特別なスタートアップパッケージ (サイトに登録した後にダウンロードできます)がインストールされています。
新しいプロジェクトを作成したら、まず、必要な* .dllをReferencesに追加します。 現在のタスクには、次のものが必要です。
- Tekla.Structures.dll(一般的な機能)
- Tekla.Structures.Model.dll(モデル自体の操作用)
- 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();
最初の問題は解決されました。
コードを記述するときに使用されるソース
- cadsupport.ru
- software-solutions-online.com
- topengineer.ru
- そしてもちろん、API、例、およびTekl自体が提供するその他のデータに関するヘルプ