構文
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); // 敷地情報を取得 unsigned short uCount = m_MadoriDoc->GetSitePoints(); if(uCount == 0){ // エラー return; } LPTYPEINFO pTypeInfo = NULL; LPTYPELIB pTypeLib = NULL; IRecordInfo* pRecInfo = NULL; HRESULT hr = LoadRegTypeLib(LIBID_MADORI, 1, 0, 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(); SITEDATA * pVar; SafeArrayAccessData(pArray, reinterpret_cast<PVOID*>(&pVar)); SafeArrayUnaccessData(pArray); VARIANT v; v.vt = VT_RECORD | VT_ARRAY; v.parray = pArray; m_MadoriDoc->GetSiteData(&v); SafeArrayAccessData(pArray, reinterpret_cast<PVOID*>(&pVar)); for(int u=0; u < uPoints; ++u){ // なんか処理 strMsg.Format("%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);