找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 492|回复: 4

[求助]:请教命令行的文本输出问题!!

[复制链接]
发表于 2003-11-5 11:31:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
最近做了一个遍历acdbTextStyleTable的程序,在遍历后在命令行输出时候为什么输出的数据的精度不能按照autoCAD的系统精度输出呢??请各位帮忙看看问题在哪里!谢谢!!
代码如下:
-----------------------------------------

  1.   [FONT=courier new]
  2. void cmdStyle::ListRecord()
  3. {

  4.         struct resbuf rb;
  5.         int rt;
  6.        
  7.         int iLunit, iLuPrec, iAunit, iAuPrec;
  8.        
  9.         rt = acedGetVar("LUNITS", &rb);
  10.         if(rt != RTNORM)
  11.                 return;
  12.         else
  13.         {
  14.                 if(rb.restype == RTSHORT)
  15.                         iLunit = rb.resval.rint;
  16.                 else
  17.                         return;//error
  18.         }
  19.        
  20.         rt = acedGetVar("LUPREC", &rb);
  21.         if(rt != RTNORM)
  22.                 return;
  23.         else
  24.         {
  25.                 if(rb.restype == RTSHORT)
  26.                         iLuPrec = rb.resval.rint;
  27.                 else
  28.                         return;//error
  29.         }
  30.        
  31.         rt = acedGetVar("AUNITS", &rb);
  32.         if(rt != RTNORM)
  33.                 return;
  34.         else
  35.         {
  36.                 if(rb.restype == RTSHORT)
  37.                         iAunit = rb.resval.rint;
  38.                 else
  39.                         return;//error
  40.         }
  41.        
  42.         rt = acedGetVar("AUPREC", &rb);
  43.         if(rt != RTNORM)
  44.                 return;
  45.         else
  46.         {
  47.                 if(rb.restype == RTSHORT)
  48.                         iAuPrec = rb.resval.rint;
  49.                 else
  50.                         return;//error
  51.         }

  52.         AcDbTextStyleTable *pStyleTable;       
  53.         if (m_pDb->getSymbolTable(pStyleTable, AcDb::kForRead) != Acad::eOk)
  54.         {
  55.                 pStyleTable->close();
  56.                 m_state = sEnd;
  57.                 return;               
  58.         }
  59.         else
  60.         {
  61.                 Acad::ErrorStatus es;
  62.                 AcDbTextStyleTableIterator *pTsIter;
  63.                 es = pStyleTable->newIterator(pTsIter);               
  64.                 if (es != Acad::eOk)
  65.                 {
  66.                         pStyleTable->close();
  67.                         m_state = sEnd;
  68.                         return;
  69.                 }

  70.                 while (!pTsIter->done())
  71.                 {
  72.             AcDbTextStyleTableRecord *pRecord = NULL;
  73.             if (pTsIter->getRecord(pRecord, AcDb::kForRead) != Acad::eOk)
  74.                         {
  75.                                 pRecord->close();
  76.                                 pStyleTable->close();
  77.                                 m_state = sEnd;
  78.                                 return;               
  79.             }       
  80.                         else
  81.                         {
  82.                                 char *RecordName=NULL;
  83.                                 pRecord->getName(RecordName);
  84.                                 acutPrintf("\n\n样式名: '%s'  ", RecordName);
  85.                                 char* pTypeface=NULL;                       
  86.                                 Adesk::Boolean bold;                               
  87.                                 Adesk::Boolean italic;                               
  88.                                 int charset;                               
  89.                                 int pitchAndFamily;
  90.                                 if (pRecord->font(pTypeface, bold, italic, charset, pitchAndFamily) == Acad::eOk)
  91.                                 {
  92.                                         if(*pTypeface != NULL)//如果是个TrueType字体样式
  93.                                         {
  94.                                                 acutPrintf("      字体: %s",pTypeface);                                               
  95.                                         }
  96.                                         else//SHX字体样式
  97.                                         {
  98.                                                 char *fileName =NULL;
  99.                                                 if (pRecord->fileName(fileName) == Acad::eOk)
  100.                                                 {
  101.                                                         acutPrintf("      字体文件: %s", fileName);
  102.                                                 }
  103.                                                 char *bigFontFileName;
  104.                                                 if (pRecord->bigFontFileName(bigFontFileName) == Acad::eOk)
  105.                                                 {
  106.                                                         acutPrintf(", %s", bigFontFileName);
  107.                                                 }                                       
  108.                                         }                                               
  109.                                 }
  110.                                 char Soutput[64];
  111.                                 double textSize;
  112.                                 textSize= pRecord->textSize();
  113.                                 acdbRToS(textSize, iLunit, iLuPrec, Soutput);
  114.                                 acutPrintf("\n    高度:  %s",Soutput);
  115.                                 double xScale;                                       
  116.                                 xScale = pRecord->xScale();
  117.                                 acdbRToS(xScale, iLunit, iLuPrec, Soutput);
  118.                                 acutPrintf("  宽度比例:  %s", Soutput);
  119.                                 double obliquingAngle;
  120.                                 obliquingAngle = pRecord->obliquingAngle();
  121.                                 acdbAngToS(obliquingAngle, iAunit, iAuPrec, Soutput);
  122.                                 acutPrintf("  倾斜角度: %s", Soutput);
  123.                                 Adesk::Boolean isVertical= pRecord->isVertical();
  124.                                 if(isVertical)
  125.                                         acedPrompt("\n    生成方式: 垂直");
  126.                                 else
  127.                                         acedPrompt("\n    生成方式: 常规");                                       
  128.                                 pRecord->close();
  129.                         }
  130.             pTsIter->step();
  131.         }
  132.                
  133.         }
  134.         pStyleTable->close();       
  135.         m_state = sEnd;
  136.         return;
  137. }

  138.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-11-5 11:39:13 | 显示全部楼层
控制符号不合适,你应该转换到双精度或浮点数用%.2lf等控制输出,而不能用%s控制!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-11-5 11:58:04 | 显示全部楼层
最初由 xux4618 发布
[B]控制符号不合适,你应该转换到双精度或浮点数用%.2lf等控制输出,而不能用%s控制! [/B]


谢谢回复!!
不过现在好像不能按照那种%.21f格式输出的,因为系统的当前精度有可能是三位小数,也有可能是五位小数,而且对于角度数值还有可能是度分秒格式,所以就要用字符串输出,这个怎么处理啊!!
在线等待!!
谢谢!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-5 14:22:11 | 显示全部楼层
不会有度分秒,你只需%lf ,即可
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-11-5 15:05:27 | 显示全部楼层
最初由 xux4618 发布
[B]不会有度分秒,你只需%lf ,即可 [/B]


完全会有度分秒的情况的,请看看autoCAD的style命令就知道了,我就是要实现类似于这种打印功能!!!
谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 08:05 , Processed in 0.308382 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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