構文
void GetSiteData (VARIANT * pSiteData);
敷地の頂点座標や辺の情報を返します。
複数の敷地がある場合、選択している先頭の敷地の情報を返します。
パラメータ
pSiteData
頂点・辺情報を持つSITEDATA構造体の配列。型は、VT_ARRAY。あらかじめ、pSiteData->parray
に頂点数分のメモリを確保して下さい。
SITEDATA 構造体
typedef [uuid(7A8DC8A8-67DD-480F-96D9-EED3D1AB99B7)] struct{
double x;
double y;
double z;
double width;
BYTE byType;
} SITEDATA;
x
X座標。
y
Y座標。
z
高さ。
width
道路が設定されていれば、その幅。単位ミリ。
byType
辺の種類。次のいずれかの値です。
- 0隣地との境界線。
- 1道路。
- 2隅切り。
使用例
// 間取りオブジェクトへ接続
CMadoriDoc * m_MadoriDoc = new CMadoriDoc();
CLSIDFromProgID (L"MyHomeDesignerMadori.MadoriDoc", &clsid);
GetActiveObject (clsid, NULL, &pUnk);
pUnk->QueryInterface (IID_IDispatch, (void**)(&pDisp));
m_MadoriDoc->AttachDispatch (pDisp);
static const GUID UUID_SITEDATA =
{ 0x7A8DC8A8, 0x67DD, 0x480F, { 0x96, 0xD9, 0xEE, 0xD3, 0xD1, 0xAB, 0x99, 0xB7 } };
// 敷地情報を取得
unsigned short uCount = m_MadoriDoc->GetSitePoints();
if(uCount == 0){
// エラー
return;
}
LPTYPEINFO pTypeInfo = NULL;
LPTYPELIB pTypeLib = NULL;
IRecordInfo* pRecInfo = NULL;
HRESULT hr = LoadRegTypeLib(LIBID_MADORI, 0, 9, 0, &pTypeLib);
hr = pTypeLib->GetTypeInfoOfGuid(UUID_SITEDATA, &pTypeInfo);
hr = GetRecordInfoFromTypeInfo(pTypeInfo, &pRecInfo);
pTypeLib->Release();
pTypeInfo->Release();
SAFEARRAYBOUND bound[1];
bound[0].cElements = uCount;
bound[0].lLbound = 0;
SAFEARRAY * pArray = SafeArrayCreateEx(VT_RECORD, 1, bound, pRecInfo);
pRecInfo->Release();
VARIANT v;
v.vt = VT_RECORD | VT_ARRAY;
v.parray = pArray;
m_MadoriDoc->GetSiteData(&v);
SITEDATA * pVar;
hr = SafeArrayAccessData(v.parray, reinterpret_cast<PVOID*>(&pVar));
for(int u=0; u < uCount; ++u){
// なんか処理
CString strMsg;
strMsg.Format(TEXT("%u[%lf,%lf,%lf]w[%lf]type[%x]"),
u, pVar[u].x, pVar[u].y, pVar[u].z, pVar[u].width, pVar[u].byType);
AfxMessageBox(strMsg, MB_ICONINFORMATION);
}
SafeArrayUnaccessData(pArray);
SafeArrayDestroy(pArray);
// JavaScript sample
// 構造体の定義
function SITEDATA(x,y,z,w,type){
this.x = x;
this.y = y;
this.z = z;
this.width = w;
this.byType = type;
}
var doc = new CMadoriDoc();
// 頂点数
var num = doc.GetSitePoints();
alert(num);
// 頂点情報用のエリア確保
var data = new Array(num);
var i;
for(i = 0; i < num; ++i){
data[i] = new SITEDATA(0.0,0.0,0.0,0.0,0);
}
// 頂点情報取得
doc.GetSiteData(data);
for(i = 0; i < num; ++i){
var msg = "x:" + data[i].x + " y:" + data[i].y + " z:" + data[i].z
+ " w:" + data[i].width + " t:" + data[i].byType;
alert(msg);
}