構文
BOOL GetWallEdit2(WORD* uKind, double* dXPos0, double* dYPos0, double* dXPos1, double* dYPos1,
double* dOpeningTop, double* dOpeningBottom, double* dThickL, double* dThickR,
double* dFrameThick, double* dDepth, VARIANT* vVertex, long* dwMDCDType,
double* xMDCDOfs, double* yMDCDOfs, double* dRes0, double* dRes1, double* dRes2,
double* dRes3);
(JavaScript用) string GetWallEdit2JS();
カレントのオブジェクトが壁編集系の場合、その情報を取得します。
パラメータ
uKind
壁開口の種類。次のいずれかの値です。
- 1壁削除
- 2壁開口
- 3壁高さ
- 4壁厚
- 5ニッチ
- 6付け棚
- 7任意形状開口
dXPos0
始点X座標。
dYPos0
始点Y座標。
dXPos1
終点X座標。
dYPos1
終点Y座標。
dOpeningTop
開口部の上端(壁の下端からの距離)。
dOpeningBottom
開口部の下端(壁の下端からの距離)。
dThickL
壁厚左側。
dThickR
壁厚右側。
dFrameThick
枠の厚み
dDepth
ニッチ・突き出しの奥行き
vVertex
(x, y) 形状の頂点列。型は VT_R8 | VT_ARRAY にしてください。
dwMDCDType
設置されたObjectのタイプ(四角形、円、棚横など…)
xMDCDOfs
壁芯までのオフセットのX値。
yMDCDOfs
壁芯までのオフセットのY値。
dRes0
予約値0
dRes1
予約値1
dRes2
予約値2
dRes3
予約値3
戻り値
壁編集オブジェクトの情報を取得できた場合 0 以外を返します。できなかった場合は 0 を返します。
使用例
// 間取りオブジェクトへ接続
CMadoriDoc * m_MadoriDoc = new CMadoriDoc();
CLSIDFromProgID (L"MyHomeDesignerMadori.MadoriDoc", &clsid);
GetActiveObject (clsid, NULL, &pUnk);
pUnk->QueryInterface (IID_IDispatch, (void**)(&pDisp));
m_MadoriDoc->AttachDispatch (pDisp);
// 列挙する
long lRet = m_MadoriDoc->GetTopObject();
if(lRet == 0) AfxMessageBox(TEXT("何もない"));
while(lRet){
ULONG uType = m_MadoriDoc->GetCurrentObjectType();
short nLayer = m_MadoriDoc->GetCurrentObjectLayer();
CString strMsg;
strMsg.Format(TEXT("[%X]type[%d]layer[%d]"), lRet, uType,nLayer);
AfxMessageBox(strMsg);
switch(uType){
case 21: // no wall
case 22: // opening
case 23: // height
case 48: // thick
case 57: // niche
case 58: // shelf
case 59: // customshape
{
VARIANT vVertex;
vVertex.vt = VT_R8 | VT_ARRAY;
vVertex.parray = NULL;
WORD uKind;
double dXPos0, dYPos0, dXPos1, dYPos1, dOpeningTop, dOpeningBottom, dThickL, dThickR;
double dFrameThick, dDepth, xMDCDOfs, yMDCDOfs, dRes0, dRes1, dRes2, dRes3;
long dwMDCDType;
m_MadoriDoc->GetWallEdit2(uKind, dXPos0, dYPos0, dXPos1, dYPos1,
dOpeningTop, dOpeningBottom, dThickL, dThickR, dFrameThick, dDepth, vVertex,
dwMDCDType, xMDCDOfs, yMDCDOfs, dRes0, dRes1, dRes2, dRes3);
ULONG uVertex = 0;
if(vVertex.parray){
uVertex = vVertex.parray->rgsabound[0].cElements;
}
strMsg.Format(TEXT("kind[%d]vertex[%d]"), uKind, uVertex);
AfxMessageBox(strMsg);
if(uVertex > 0){
double * pVar;
SafeArrayAccessData(vVertex.parray, (void**)&pVar);
for(ULONG u = 0; u < uVertex; u+=2){
strMsg.Format(TEXT("Vertex %u[%lf,%lf]"), u/2, pVar[u], pVar[u+1]);
AfxMessageBox(strMsg);
}
SafeArrayUnaccessData(vVertex.parray);
}
if(vVertex.parray) SafeArrayDestroy(vVertex.parray);
}
break;
}
lRet = m_MadoriDoc->GetNextObject();
}
// JavaScript sample
var doc = new CMadoriDoc();
var lRet = doc.GetTopObject();
while(lRet){
var uType =doc.GetCurrentObjectType();
alert(uType);
switch (uType){
case 21: // no wall
case 22: // opening
case 23: // height
case 48: // thick
case 57: // niche
case 58: // shelf
case 59: // customshape
var data = eval( doc.GetWallEdit2JS() );
var msg = " Result[" + data.Result + "]";
alert(msg);
var msg = " Kind[" + data.Kind + "]\n" +
" XPos0[" + data.XPos0 + "]\n" +
" YPos0[" + data.YPos0 + "]\n" +
" XPos1[" + data.XPos1 + "]\n" +
" YPos1[" + data.YPos1 + "]\n" +
" Top[" + data.Top + "]\n" +
" Bottom[" + data.Bottom + "]\n" +
" ThickL[" + data.ThickL + "]\n" +
" ThickR[" + data.ThickR + "]\n" +
" FrameThick[" + data.FrameThick + "]\n" +
" Depth[" + data.Depth + "]";
alert(msg);
var nPoints = data.Hole.length / 2;
alert( nPoints );
for( var i=0 ; i < nPoints ; i++ ){
alert( "Vertex:[" + data.Hole[i*2] + ", " + data.Hole[i*2+1] + "]" );
}
msg = " MDCDType[" + data.MDCDType + "]\n" +
" XMDCDOffset[" + data.XMDCDOffset + "]\n" +
" YMDCDOffset[" + data.YMDCDOffset + "]\n" +
" Res0[" + data.Res0 + "]\n" +
" Res1[" + data.Res1 + "]\n" +
" Res2[" + data.Res2 + "]\n" +
" Res3[" + data.Res3 + "]";
alert(msg);
break;
}
lRet = doc.GetNextObject();
}