天气与日历 切换到窄版

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

[每日一码] 计算文字在AutoCAD中所占的长度,和字体样式,字高

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

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-3-14 19:31:12 | 显示全部楼层 |阅读模式
    1. 在AutoCAD中,经常需要在一个创建一个文字实体之前,先要计算出它根据字体样式,字高和宽高比在图纸中所占的宽度,比如在一大段文字排版的时候很有用。于是整理封装了一下这个函数:
    2. double YgxGeometry::TextLength(LPCSTR str, double h, double wr)  
    3. {  
    4.     if(strlen(str) == 0) return(0.);  
    5.     struct resbuf *list = NULL;  
    6.     ads采用point bl,rt;  
    7.     char styleName[31] = {0};  
    8.     YgxAu()->CurrTextStyle(styleName);  
    9.     list = acutBuildList(RTDXF0,"text",1,str,7,styleName,40,h,41,wr,51,0.,NULL);  
    10.     acedTextBox(list,bl,rt);  
    11.     acutRelRb(list);  
    12.     return fabs(bl[0]-rt[0]);  
    13. }
    14. 其中YgxAu()->CurrTextStyle(styleName)是得到当前字体样式,函数如下:
    15. view plaincopy to clipboardprint?
    16. void YgxAcadUtil::CurrTextStyle(char styleName[])  
    17. {  
    18.     AcDbObjectId Id = CurrDB()->textstyle();  
    19.     AcDbTextStyleTableRecord* pStyleRecord;  
    20.     if(acdbOpenObject((AcDbObject *&)pStyleRecord, Id, AcDb::kForRead) == Acad::eOk) {  
    21.         const char *name;  
    22.         pStyleRecord->getName(name);  
    23.         strcpy(styleName, name);  
    24.         pStyleRecord->close();  
    25.     }  
    26.     else strcpy(styleName, "STANDARD");  
    27. }
    28. 其中CurrDB()就是得到当前数据库,acdbHostApplicationServices()->workingDatabase();
    复制代码

     

     

     

     

    [每日一码] 计算文字在AutoCAD中所占的长度,和字体样式,字高
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-11-1 13:35 , Processed in 0.144756 second(s), 28 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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