構文
BOOL GetGable(VARIANT* vVertex1, VARIANT* vVertex2, double* dWidth, double* dTangent, long* uStyle,
double* dThick, long* uHanakakushiStyle);
(JavaScript用) string GetGableJS();
カレントのオブジェクトが部分切妻の場合、その情報を取得します。
パラメータ
vVertex1
(x, y) 部分切妻の1つめの屋根面の形状の頂点列。型は VT_R8 | VT_ARRAY にしてください。
vVertex2
(x, y) 部分切妻の2つめの屋根面の形状の頂点列。型は VT_R8 | VT_ARRAY にしてください。
dWidth
部分切妻の幅(軒側から見た幅)。
dTangent
部分切妻の屋根の勾配。
uStyle
軒天のタイプ。以下のいずれかの値です。
- 0軒天なし
- 1勾配軒天
- 2水平軒天
dThick
軒天の厚さ。
uHanakakushiStyle
鼻隠しのタイプ。以下のいずれかの値です。
- 0傾斜
- 1鉛直
- 2水平鉛直
戻り値
部分切妻の情報を取得できた場合 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 62: // gable
{
VARIANT vVertex1;
vVertex1.vt = VT_R8 | VT_ARRAY;
vVertex1.parray = NULL;
VARIANT vVertex2;
vVertex2.vt = VT_R8 | VT_ARRAY;
vVertex2.parray = NULL;
double dWidth, dTangent, dThick;
long uStyle, uHanakakushiStyle;
m_MadoriDoc->GetUsage(&vVertex1, &vVertex2, &dWidth, &dTangent, &uStyle,
&dThick, &uHanakakushiStyle);
ULONG uVertex1 = 0;
if(vVertex1.parray){
uVertex1 = vVertex1.parray->rgsabound[0].cElements;
}
ULONG uVertex2 = 0;
if(vVertex2.parray){
uVertex2 = vVertex2.parray->rgsabound[0].cElements;
}
strMsg.Format(TEXT("Usage vertex1[%d]vertex2[%d]width[%lf]tangent[%lf]"), uVertex1, uVertex2,
dWidth, dTangent);
AfxMessageBox(strMsg);
if(uVertex1 > 0){
double * pVar;
SafeArrayAccessData(vVertex1.parray, (void**)&pVar);
for(ULONG u = 0; u < uVertex1; u+=2){
strMsg.Format(TEXT("Vertex1 %u[%lf,%lf]"), u/2, pVar[u], pVar[u+1]);
AfxMessageBox(strMsg);
}
SafeArrayUnaccessData(vVertex1.parray);
}
if(vVertex1.parray) SafeArrayDestroy(vVertex1.parray);
if(uVertex2 > 0){
double * pVar;
SafeArrayAccessData(vVertex2.parray, (void**)&pVar);
for(ULONG u = 0; u < uVertex2; u+=2){
strMsg.Format(TEXT("Vertex2 %u[%lf,%lf]"), u/2, pVar[u], pVar[u+1]);
AfxMessageBox(strMsg);
}
SafeArrayUnaccessData(vVertex2.parray);
}
if(vVertex2.parray) SafeArrayDestroy(vVertex2.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 62: // gable
var data2 = eval( doc.GetGableJS() );
var msg2 = " Width[" + data2.Width + "]\r\n";
msg2 += " Tangent[" + data2.Tangent + "]\r\n";
msg2 += " Style[" + data2.Style + "]\r\n";
msg2 += " Thick[" + data2.Thick + "]\r\n";
msg2 += " HanakakushiStyle[" + data2.HanakakushiStyle + "]";
alert(msg2);
break;
}
lRet = doc.GetNextObject();
}