- UID
- 76860
- 积分
- 129
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-9-3
- 最后登录
- 1970-1-1
|
发表于 2003-10-22 14:34:37
|
显示全部楼层
我觉得这个函数不好,文字如果是倾斜的,怎么版。 那得到只是包围文字的一个正矩形。
矩形的角度,不能随文字的角度倾斜的。对不对。
下面代码是我写的得到文字的外边框。
其中dPt1X,dPt2X 为文字外框的第一个点的值,
剩下的点一次类推,
dN 是文字大概有几个字,MinUnit_E是常量,
这个可能不能得到文字的真正边界,因为是 人为 设定边框大小的,
不过得到的四个点的坐标,其倾斜角度和文字是一样的。
希望对你有帮助
void CalculateForPoint(int dN,double &dPt1X,double &dPt1Y,
double &dPt2X,double &dPt2Y,double &dPt3X,double &dPt3Y,double &dPt4X,double &dPt4Y,char* chrText,AcGePoint3d GePoi3d,double dRotaion)
{
dA = dN * 8.0 * MinUnit_E + (dN - 1) * 1.0 * MinUnit_E+2*MinUnit_E;
double dC = 0.0;
dB = 18.0* MinUnit_N;
double dD2 ;
double dP1 ;
dC = 16.0*MinUnit_N+9.0*MinUnit_N;
dD2 = sqrt((dA/2)*(dA/2)+dC*dC);
dP1 = atan(dC/(dA/2.0));
dD = (sqrt(dA * dA + dB * dB)) / 2;
dP = acos(dA / (dD * 2));
AcGePoint3d GePoi3dTmp;
acutPolar(asDblArray(GePoi3d), PI + (dRotaion + dP), dD, asDblArray(GePoi3dTmp));
dPt1X= GePoi3dTmp.x;
dPt1Y= GePoi3dTmp.y;
acutPolar(asDblArray(GePoi3d), (dRotaion - dP), dD, asDblArray(GePoi3dTmp));
dPt4X= GePoi3dTmp.x;
dPt4Y= GePoi3dTmp.y;
acutPolar(asDblArray(GePoi3d), PI + (dRotaion - dP1), dD2, asDblArray(GePoi3dTmp));
dPt2X= GePoi3dTmp.x;
dPt2Y= GePoi3dTmp.y;
acutPolar(asDblArray(GePoi3d), (dRotaion + dP1), dD2, asDblArray(GePoi3dTmp));
dPt3X= GePoi3dTmp.x;
dPt3Y= GePoi3dTmp.y;
} |
|