找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 254|回复: 0

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

[复制链接]

0

主题

0

回帖

28

积分

管理员

积分
28
发表于 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();
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-29 04:54 , Processed in 0.113505 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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