GetSiteData メソッド

構文

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);