構文
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);
}