GetDimension メソッド

構文

BOOL GetDimension(BYTE * byDimType, BYTE * byDimStyle, BYTE * byDimWidth, BYTE * byStrAttr, double * dStrHeight,
    OLE_COLOR * crDimColor, OLE_COLOR * crStrColor, BSTR * szStr, BOOL * bStringLock, BSTR * szFontName,
    VARIANT * vPos);

カレントのオブジェクトが、寸法線の場合、その情報を取得します。

パラメータ

byDimType
寸法線のタイプ。次のいずれかの値です。
  • 0水平。
  • 1垂直。
  • 2平行。
byDimStyle
寸法線の線種。次のいずれかの値です。
  • 0実線。
  • 1破線。
  • 2点線。
  • 3一点破線。
  • 4二点破線。
  • 5なし。
byDimWidth
寸法線の線幅。
byStrAttr
寸法文字の属性。次のフラグの任意の組み合わせです。
  • 1斜体。
  • 2太字。
  • 4下線。
dStrHeight
寸法文字のサイズ。
crDimColor
寸法線の色。
crStrColor
寸法文字の色。
szStr
文字列。
bStringLock
文字列をロックするかどうか。1でロックします。
szFontName
フォント名。
vPos
配置位置。(x, y)の 頂点列。型は VT_R8 | VT_ARRAY にしてください。vPos.parrayは不要になったら、SafeArrayDestroyで解放してください。
  • 0始点。
  • 1終点。
  • 2予約。
  • 3始点側の、寸法線の足の、図形側の点。
  • 4始点側の、寸法線の足の、寸法線側の点。
  • 5終点側の、寸法線の足の、図形側の点。
  • 6終点側の、寸法線の足の、寸法線側の点。
  • 7寸法線と足の交点。始点側。
  • 8予約。
  • 9寸法線と足の交点。終点側。
  • 10予約。
  • 11文字位置。

戻り値

寸法線の情報を取得できた場合 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("何もない");

while(lRet){
	ULONG uType = m_MadoriDoc->GetCurrentObjectType();
	short nLayer = m_MadoriDoc->GetCurrentObjectLayer();
	CString strMsg;
	strMsg.Format("[%X]type[%d]layer[%d]", lRet, uType,nLayer);
	AfxMessageBox(strMsg);

	switch(uType){
	case 9: // dimension
		{
		unsigned char byDimType, byDimStyle, byDimWidth, byStrAttr;
		double dStrHeight;
		unsigned long ocDimColor, ocStrColor;
		BSTR szStr = NULL;
		unsigned short bStringLock;
		BSTR szFontName = NULL;
		VARIANT vPos;
		vPos.vt = VT_R8 | VT_ARRAY;
		vPos.parray = NULL;
		m_MadoriDoc->GetDimension(&byDimType, &byDimStyle, &byDimWidth, &byStrAttr, 
			&dStrHeight, &ocDimColor, &ocStrColor, &szStr, &bStringLock, &szFontName,
			&vPos);
		CString strStr, strFontName;
		AfxBSTR2CString(&strStr, szStr);
		AfxBSTR2CString(&strFontName, szFontName);
		ULONG uPos = 0;
		if(vPos.parray){
			uPos = vPos.parray->rgsabound[0].cElements;
		}
		strMsg.Format("Dimension type[%d]style[%d]w[%d]attr[%d]"
			"h[%lf]col[%x]strCol[%x]str[%s]lock[%d]font[%s]",
			byDimType, byDimStyle, byDimWidth, byStrAttr, 
			dStrHeight, ocDimColor, ocStrColor, strStr, bStringLock, strFontName);
		AfxMessageBox(strMsg);
		if(uPos > 0){
			double * pVar;
			SafeArrayAccessData(vPos.parray, (void**)&pVar);
			for(ULONG u = 0; u < uPos; u+=2){
				strMsg.Format("Vertex %u[%lf,%lf]", u/2, pVar[u], pVar[u+1]);
				AfxMessageBox(strMsg);
			}
			SafeArrayUnaccessData(vPos.parray);
		}
		if(vPos.parray) SafeArrayDestroy(vPos.parray);
		if(szStr){
			::SysFreeString(szStr);
		}
		if(szFontName){
			::SysFreeString(szFontName);
		}

		}
		break;
	}
	lRet = m_MadoriDoc->GetNextObject();
}