GetSiteEdgeInfo メソッド

構文

void GetSiteEdgeInfo(VARIANT * pSiteData);

敷地の辺の情報を返します。

パラメータ

pSiteData
頂点・辺情報を持つSITE_EDGE_INFO構造体の配列。型は、VT_ARRAY。あらかじめ、pSiteData->parray に頂点数分のメモリを確保してください。

SITE_EDGE_INFO 構造体

typedef [uuid(4B75CEC8-067D-4EB3-9AA3-18905525DDF8)] struct{
	long		nEdgeType;
	double		dRoadWidth;
	double		dParkWidth;
	double		dAdjacentHeight;
	double		dMainRoadDist;
	double		dSetback;
	double		zPos;
} SITE_EDGE_INFO;
nEdgeType
辺の種類。次のいずれかの値です。
  • 0隣地との境界線。
  • 1道路。
  • 2隅切り。
dRoadWidth
道路幅。
dParkWidth
公園水路幅。
dAdjacentHeight
隣地高
dMainRoadDist
特定道路からの距離
dSetback
敷地辺からのセットバック
zPos
始点側の頂点の高さ

使用例

// 間取りオブジェクトへ接続
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_SITE_EDGE_INFO =
{ 0x4B75CEC8, 0x067D, 0x4EB3, { 0x9A, 0xA3, 0x18, 0x90, 0x55, 0x25, 0xDD, 0xF8 } };

// 敷地情報を取得
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_SITE_EDGE_INFO, &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();

SITE_EDGE_INFO * pVar;
SafeArrayAccessData(pArray, reinterpret_cast<PVOID*>(&pVar));
VARIANT v;
v.vt = VT_RECORD | VT_ARRAY;
v.parray = pArray;

m_MadoriDoc->GetSiteEdgeInfo(&v);
SafeArrayAccessData(pArray, reinterpret_cast<PVOID*>(&pVar));

for(int u=0; u < uPoints; ++u){
	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 SITE_EDGE_INFO(nEdgeType,dRoadWidth,dParkWidth,dAdjacentHeight,dMainRoadDist,dSetback,zPos){
	this.nEdgeType = nEdgeType;
	this.dRoadWidth = dRoadWidth;
	this.dParkWidth = dParkWidth;
	this.dAdjacentHeight = dAdjacentHeight;
	this.dMainRoadDist = dMainRoadDist;
	this.dSetback = dSetback;
	this.zPos = zPos;
} 
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 SITE_EDGE_INFO(0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
}
// 頂点情報取得
doc.GetSiteEdgeInfo(data);
for(i = 0; i < num; ++i){
	var msg = "EdgeType:" + data[i].nEdgeType + " RoadWidth:" + data[i].dRoadWidth + " ParkWidth:" + data[i].dParkWidth + " AdjacentHeight:" + data[i].dAdjacentHeight + " MainRoadDist:" + data[i].dMainRoadDist+ " Setback:" + data[i].dSetback + " ZPos:" + data[i].zPos;
	alert(msg);
}