MDMouseInputPoly メソッド

構文

LONG MDMouseInputPoly(VARIANT* vVertex, LONG lMaxPoints, LONG lFlags);

(JavaScript用) string MDMouseInputPolyJS(lMaxPoints, lFlags);

間取りの作業画面内で折れ線を書くと、各頂点の論理座標を取得します。
※クリックが終わるかキャンセルされるまで処理は戻りません。

パラメータ

vVertex
(x, y) 頂点列。型は VT_R8 | VT_ARRAY にしてください
lMaxPoints
最大頂点数
lFlags
フラグ。0で吸着なし、1で吸着あり。
※将来拡張する可能性があるので2以上の値を設定しないでください。

戻り値

次の値のいずれかが返ります。

  • 0マウス入力が(右クリック、ESCボタン押し下げ、他コマンド実行などで)キャンセルされました
  • 1マウス入力が正常に行われました

使用例

// C++ sample
// 間取りオブジェクトへ接続
CMadoriDoc * m_MadoriDoc = new CMadoriDoc();
CLSIDFromProgID (L"MyHomeDesignerMadori.MadoriDoc", &clsid);
GetActiveObject (clsid, NULL, &pUnk);
pUnk->QueryInterface (IID_IDispatch, (void**)(&pDisp));
m_MadoriDoc->AttachDispatch (pDisp);

AfxMessageBox(TEXT("間取りの作業画面内で折れ線を書くと、各頂点の論理座標を取得します。"));
VARIANT vVertex;
vVertex.vt = VT_R8 | VT_ARRAY;
vVertex.parray = NULL;
LONG lRet = m_MadoriDoc->MDMouseInputPoly(&vVertex, 100, 1);
ULONG uVertex = 0;
if (vVertex.parray)
	uVertex = vVertex.parray->rgsabound[0].cElements;
CString str;
CString strTmp;
strTmp.Format(TEXT("返値=%d 頂点数=%d\r\n"), lRet, uVertex / 2);
str += strTmp;
if (uVertex > 0)
{
	double* pVar;
	SafeArrayAccessData(vVertex.parray, (void**)&pVar);
	for (ULONG u = 0; u < uVertex; u += 2)
	{
		strTmp.Format(TEXT("(%.2lf,%.2lf)\r\n"), pVar[u], pVar[u + 1]);
		str += strTmp;
	}
	SafeArrayUnaccessData(vVertex.parray);
}
if (vVertex.parray) SafeArrayDestroy(vVertex.parray);
AfxMessageBox(str);
// JavaScript sample
var doc = new CMadoriDoc();
var data = eval( doc.MDMouseInputPolyJS(100, 1) );
var points = data.Vertex.length / 2;
var msg = "返値=" + data.Result + "\n";
for (var i = 0; i < points; i++) {
	msg = msg + "(" + data.Vertex[i*2] + ", " + data.Vertex[i*2+1] + ")\n";
}
alert(msg);