ホーム

SFPDll使用方法

概要

写真の2次元座標から3次元座標の計算ロジックなどを外部参照可能して他のプログラムからでも使用できるようにしました。

 

共通事項

(1)関数はC言語のインターフェースです。

(2)LoadLibraryGetProcAddressを用いた明示的リンクで関数の呼び出しします。関数名を文字列にしたものをGetProcAddressの第二パラメータに指定して、関数のポインタを取得します。

例(VCでのC++でコーディング)

 

      //静的変数として定義

      const char* (*pMake3DFromNearCameraC)( SSFPMake3DFromNearCameraCParam *)=0;

 

      //初期化の一部

      HMODULE hm=0;

      hm=LoadLibrary("SFPDll");

     pMake3DFromNearCameraC=(char*(*)(SSFPMake3DFromNearCameraCParam*))GetProcAddress(hm," SFPMake3DFromNearCameraC");

 

 

      //呼び出し

      SSFPMake3DFromNearCameraCParam param=

      {

                 sizeof param,

                 &pictures,

                 &cameras

      };

char* result=pMake3DFromNearCameraC(&param);

 

左のフレームのソースの中のSFPDllDriverのプロジェクト内のソースで同じようなことを行っているので参照願います。

 

(3)関数はパラメータを1つ持ちます。そのパラメータは関数毎に定めている構造体へのポインタです。その構造体はtypedefで指定し、関数名の後にParamを付加したものです。

(4)関数はchar*の戻り値を持ちます。戻り値が0の場合は正常です。0以外の場合はエラーのメッセージを示します。

(5)パラメータの構造体の最初のメンバはパラメータの構造体のバイトサイズです。パラメータのサイズが期待しているサイズと等しいか調べる関数があります(調べない関数もあります)。

(6)パラメータの構造体のメンバは共通で使用する共通構造体を使用しています。

(7)パラメータの構造体のメンバでデータが可変個数のものは、データの個数とデータへの二重ポインタとしています。一つ一つのデータのメモリ領域を確保して、そのデータへのポインタを配列で持ち、配列の先頭アドレスをメンバに設定します。

      struct SSFPPicture

      {

                 unsigned PointCount;//in

                 //対応点の組の数

                 struct SSFPCoordinateWithMeaningFlag**picture;//in

                 //座標

      };

   

(8)関数は出力の可変個数のデータのためにメモリ領域をアロケートしません。呼び出し側で十分な領域を確保してください。(7)で示すポインタも設定してください。

 

 

 

関数一覧

番号

関数名

機能

1

SFPMake3DFromNearCameraC

カメラ位置・姿勢・倍率を標準で求める

2

SFPRegulateNearCameraC

カメラ位置・姿勢・倍率の精度を向上する

3

SFPMakePolygonC

ポリゴンを作成する

4

SFPAddPhotoNumbersC

全てのポリゴンに写真番号を追加する

5

SFPGetCoordinateQuickC

3次元座標を求める

6

SFPVRMLC

VRML出力をする

一部省略しています。

 

共通構造体

番号

構造体名

内容

1

SSFPCoordinateWithMeaningFlag

2次元又は3次元の座標

2

SSFPPictures

写真上の対応点の座標(2次元座標)

3

SSFPPicture

対応点の3次元座標

4

SSFPCameraSystem

カメラの位置・姿勢・倍率を示す行列

5

SSFPCameraSystems

複数のカメラの位置・姿勢・倍率を示す行列

6

SSFPTriangleWithNumber

ポリゴン(三角形)

7

SSFPTriangleWithNumbers

複数のポリゴン(三角形)

8

SSFPUnsignedChars

文字列等のバイトデータ

9

SSFPUnsignedCharss

複数の文字列等のバイトデータ

10

SSFPImageRgb

RGB形式の画像データ

11

SSFPImagesRgb

複数のRGB形式の画像データ

一部省略しています。

 

 

呼び出し順序の例

 対応点の入力が完了してVRMLファイルを出力する場合、次の順序で関数を呼び出す必要があります。

(1)Make3DFromNearCameraC   カメラ位置、姿勢、倍率を求める

(2)GetCoordinateQuickC          3次元座標を求める

(3)MakePolygonC                    ポリゴンを作成する

(4)AddPhotoNumbersC            全てのポリゴンに写真番号を追加する

(5)VRMLC                             VRML出力をする

 

 

ホーム