天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 16|回复: 0

Arx中文字的三维显示(修改版)

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    AutoCAD中,文字的显示是通过文字位置,所在平面,以及文字对应的角度,来确定文字如何显示。
    对于文字位置和所在的平面,可以很容易的确定。那对于文字的角度呢?它是X轴与文字方向的夹角吗?如果文字应该在的方向是个三维向量,那AcDbText::setRotation() 的角度到底应该是多少?

    以下将文字所在的平面向量称为 normal,文字的角度称为 angle,文字实际显示的方向向量为 vt。

    在二维平面中,即 normal==AcGeVector3d::kZAxis 时,angle为 X轴与文字方向的夹角,即 angle=AcGeVector3d::kXAxis.angleTo(vt);

    在三维平面中,文字的角度如何确定呢?
    AcDbText::setRotation() 的函数帮助中有这样一句话:

    The rotation angle is relative to the X axis of the text's OCS, with positive angles going counterclockwise when looking down the Z axis toward the origin.
    看了以上的说明,还是有点不明白,text的角度是 OCX 下的 X 轴在从 Z 轴俯视下的逆时针的角度。而 OCS X轴,在三维下是如何确定的呢?

    The OCS X axis is determined by using the text's normal vector, the WCS Z axis, and the arbitrary axis algorithm.
    text的OCS下的 X轴是由 text的平面向量,世界坐标系的Z轴,以及任意轴算法确定。

    看到这里,好像有点明白了,不过什么是任意轴算法?上AutoCAD的网站上查了一下,终于是彻底明白了。

    任意轴算法是AutoCAD内部用于生成实体坐标系的一种算法。
    通过一个给定的单位向量即normal向量,作为坐标系的 Z轴,生成对应的 X轴向量,Y轴向量通过右手法则确定。

    如下是具体的算法:

      AcGeVector3d Ax;
      if ((fabs (normal.x) < 1.0/64) && (fabs (normal.y) < 1.0/64) )
       Ax = AcGeVector3d::kYAxis.crossProduct(normal);
      else
       Ax = AcGeVector3d::kZAxis.crossProduct(normal);
      Ax.normalize();
      angle=Ax.angleTo(vt);
    说明:1/64是AutoCAD用来判断平面向量是否接近世界坐标系的Z轴的边界条件

    这样就可以正确求出文字在OCX下的角度值了

     

     

     

     

    Arx中文字的三维显示(修改版)
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:47 , Processed in 0.057751 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表