- 积分
- 94
- 明经币
- 个
- 注册时间
- 2010-8-30
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
最近做个计算文本实体的文字长度的功能,用到AcAxGetBoundingBox这个函数,
但是函数返回一直失败(S_FALSE),有哪位朋友知道这个函数的标准用法的,
希望不吝赐教,万分感谢.
下面是我的部分代码
- bool CToolFunction::getTextLength(AcDbObjectId TextId, double& textlength)
- {
- VARIANT X1_VarTmp;
- SAFEARRAY * X1_ArrTmp;
- double * X1_buf;
- X1_ArrTmp = ::SafeArrayCreateVectorEx(VT_R8, 1, 2, NULL);
- X1_VarTmp.vt = VT_ARRAY | VT_R8;
- X1_VarTmp.parray = X1_ArrTmp;
- ::SafeArrayAccessData(X1_ArrTmp, (void **)&X1_buf);
- VARIANT X2_VarTmp;
- SAFEARRAY * X2_ArrTmp;
- double * X2_buf;
- X2_ArrTmp = ::SafeArrayCreateVectorEx(VT_R8, 1, 2, NULL);
- X2_VarTmp.vt = VT_ARRAY | VT_R8;
- X2_VarTmp.parray = X2_ArrTmp;
- ::SafeArrayAccessData(X2_ArrTmp, (void **)&X2_buf);
- HRESULT slt;
- slt = AcAxGetBoundingBox(TextId, &X1_VarTmp, &X2_VarTmp);
- AcGePoint3d ptMin;
- AcGePoint3d ptMax;
- if (slt)
- {
- ptMin = AcGePoint3d(X1_buf[0], X1_buf[1], 0.0);
- ptMax = AcGePoint3d(X2_buf[0], X2_buf[1], 0.0);
- textlength = abs(ptMax.x - ptMin.x);
- ::SafeArrayDestroy(X1_ArrTmp);
- ::SafeArrayDestroy(X2_ArrTmp);
- return true;
- }
- else
- {
- textlength = 0.0;
- ::SafeArrayDestroy(X1_ArrTmp);
- ::SafeArrayDestroy(X2_ArrTmp);
- return false;
- }
- }
|
|