フレーム構造物のコンセプト設計・構造解析と最適化が行える統合ソフトウェアMultiframeでは、COMインタフェースによるオートメーションにより、VisualBasicなどを用いてアドインプログラムを開発し、Microsoft
OfficeやAutoCADに組み込むことができます。今回は、Multiframeオートメーションを利用したDelphiプログラム開発について紹介します。
|
オートメーションとは、異なるアプリケーションから利用できるようアプリケーションをオブジェクト化することです。
これにより、通常であればユーザがマウスやキーボードで処理することを、他のプログラムから制御することができるようになります。
ただし、すべてのプログラムがオートメーションによりコンロトールできるわけではなく、プログラム自体にオートメーションの機能を実装しておく必要があります。
なお、Multiframeのオートメーションのサンプルファイルは、下記にインストールされています。
C:\Program Files\Multiframe 12\Automation Samples
- 「Excel Samples」・・・Excel用サンプル
「Word Samples」・・・Word用サンプル
「Access Samples」・・・Access用サンプル
「AutoCad Samples」・・・AutoCAD 用サンプル
|
上位フォルダには、Word Samples、Access Samples、AutoCad Samplesが格納されているので、確認してみるとよいでしょう。まず、これらのサンプルが動作するかどうかを確認しておいてください。うまく動作しない場合は、アプリケーションを再セットアップするなどしてください。
まず最初に、Delphi2010でオートメーションを利用できるようにしておく必要があります。次の手順にしたがって、タイプライブラリをインポートします。
- Delphi2010でメニューから[コンポーネント]−[コンポーネントのインポート]ー[タイプライブラリ]を選択して、表示されたダイアログで[次へ]をクリックします。
- 検索ボックスに「Multiframe」と入力します。一覧に表示された「Multiframe1.3
ObjectLibrary」を選択して[次へ]をクリックします。
- パレットページ名とファイルの取り込み先のユニットディレクトリ名を指定します。ユニットディレクトリ名は、デフォルトでは「C:\DocumentsandSettings\(ユーザフォルダ)\MyDocuments\RADStudio\7.0\Imports\」となります。
- [次へ]をクリックします。
- [ユニットの作成]にチェックを入れて、[完了]をクリックします。
- 指定したディレクトリに”Multiframe_TLB.pas”ユニットファイルが出力されていることを確認しておきます。
ここで作成するツールの仕様は、下の図の通りとします。
Multiframe入力支援ツール(半球ドーム)
・平面的に円を何等分するか入力により決める
・鉛直方向に何等分するか入力により決める |
|
ここでは、具体的に以下のようなプログラムの記述を行っています。
■Multiframeを起動する
タイプライブラリをインポートすると、Delphi言語での書式に変更されたライブラリが生成されます。
なお、Multiframeアプリケーションクラスは、次の記述のように定義されています。
ここでは、サンプルプログラムで使用する入力データファイルの大まかな書式と、読み込みに使用するDelphiのクラスについて説明します。
CoApplication = class
class function Create: IApplication;
class function CreateRemote(const MachineName:
string): IApplication;
end; |
このためMultiframeを起動するには以下のように記述します。
IMFApp := Multiframe_TLB.CoApplication.Create;
|
起動すること自体はMultiframe_TLB.CoApplication.Create;のみで行えますが、作成したオブジェクトにアクセスする手段が必要なため、Multiframe_TLB.Application型のグローバル変数IMFAppにアドレスを代入しています。
■入力、座標とエレメントの設定処理
フォームで入力したパラメータを変数に代入します。
Radius := SpinEditRadius.Value;
thetaspace := SpinEditthetaspace.Value;
phispace := SpinEditphispace.Value; |
(1)座標算出用角度を計算する
座標は半径と角度から計算して求めることができます。上空から見た場合には円をThetaspace
等分、横から見た場合には90度をpsispace等分する必要があるので、下記のような式で求めます。
dtheta := 2 * pi / thetaspace;
dphi := pi / 2 / phispace; |
Delphi2010では、ラジアンで角度を処理します。piはユニットSystemで定義されている定数で、πの近似値(3.1415926535897932385)が定義されています。上記の式から刻み角が算出できます。
(2)座標をセットする
iのループとjのループを使用して、座標を計算してノードを登録します。
for i := 1 To phispace do
begin
phi := (i - 1) * dphi;
startnode := count + 1;
IMFApp.ScreenUpdating := False;
for j := 1 To thetaspace do
begin
count := count + 1;
theta := (j - 1) * dtheta;
x := Radius * Cos(theta) * Cos(phi);
z := Radius * Sin(theta) * Cos(phi);
y := Radius * Sin(phi);
IMFApp.frame.Nodes.AddNode(x, y, z); |
(3)エレメントをセットする
同じ階層のエレメントを登録します。jのループでは、j=1の場合とj=thetaspaceの場合のノードがつながらないので、追加でAddElementしています。
Title := Copy( Line, 11, 40 ); |
頂点の座標をセットして、頂上部分のエレメントを接続しています。
(4)底面をピン接合にセットする
底面をピン接合にセットします。
for i := 1 To thetaspace do
begin
myRest := IMFApp.frame.restraints.AddRestraint(i,
mfRestraintPinned)
end; |
■ Multiframeを終了する
終了するには、下記の関数を実行します。
作成したプログラムを実行すると、下の【図03】のような結果が得られます。
Multiframeでは、このほかにもさまざまな関数がサポートされています。これらの関数には、Windows
のスタートボタンからアクセスできます。
[スタート]−[プログラム]−[Multiframe 12]−[ヘルプ]−[オートメーションのヘルプ]
−[MFオートメーションのヘルプ]
なお、今回説明したプログラムでは、入力の一部の支援しか行っていません。実際に解析を行うには、エレメントの断面諸量の設定や加重条件等の入力を行う必要があります。これらの入力方法については、Multiframeのオートメーションサンプルを参考にしてください。
有償セミナーのお知らせ
エンジニアのプログラミング入門セミナー CPD認定6.2pt |
● 日時 |
2011 年 9 月15 日(木) 9:30 〜 17:00 |
● 受講費 |
1名様 15,750円(税込) |
● 本会場 |
フォーラムエイト東京本社 GTタワーセミナールーム
※TV会議システムにて東京・大阪・名古屋・福岡・仙台同時開催 |
|
|
(Up&Coming '11 盛夏の号掲載) |
|
|
>> 製品総合カタログ
>> プレミアム会員サービス
>> ファイナンシャルサポート
|