找回密码
 立即注册

QQ登录

只需一步,快速开始

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

通过用户交互界面获取输入

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-3-6 11:45:31 | 显示全部楼层 |阅读模式
  1. int CGetInputUtil::GetPointReturnCode(const AcGePoint3d & basePoint, const TCHAR * prompt, AcGePoint3d & point)
  2. {
  3.         AcGePoint3d ucsBasePoint = CConvertUtil::WcsToUcsPoint(basePoint);
  4.         //basePoint从WCS(世界坐标系)转换为UCS(用户坐标系)
  5.         int nReturn = acedGetPoint(asDblArray(ucsBasePoint), prompt, asDblArray(point));//asDblArray将pnt返回为三个双精度数组
  6.         /*这一行代码调用AutoCAD的API函数acedGetPoint,获取用户输入的点。
  7.         这个函数需要三个参数:一个点的数组(我们前面已经将basePoint转换为UCS,所以这里传入ucsBasePoint),
  8.         一个提示字符串(prompt),和一个点的数组(用于存储用户输入的点,我们传入的是point)*/
  9.         if (nReturn == RTNORM) {
  10.                 point = CConvertUtil::UcsToWcsPoint(point);
  11.         }
  12.         //如果返回值是RTNORM(这通常表示正常的结束状态),那么就将用户输入的点从UCS转换为WCS。
  13.         return nReturn;
  14. }
  15. int CGetInputUtil::GetPointReturnCode(const TCHAR * prompt, AcGePoint3d & point)
  16. {
  17.         int nReturn = acedGetPoint(NULL, prompt, asDblArray(point));
  18.         if (nReturn == RTNORM) {
  19.                 point = CConvertUtil::UcsToWcsPoint(point);
  20.         }
  21.         return nReturn;
  22. }
  23. bool CGetInputUtil::GetPoint(const AcGePoint3d & basePoint, const TCHAR * prompt, AcGePoint3d & point)
  24. {
  25.         if (GetPointReturnCode(basePoint, prompt, point) == RTNORM)
  26.         {
  27.                 acutPrintf(采用T("\n用户成功输入了一个点"))
  28.                         return true;
  29.         }
  30.         else
  31.         {
  32.                 return false;
  33.         }
  34. }
  35. bool CGetInputUtil::GetPoint(const TCHAR * prompt, AcGePoint3d & point)
  36. {
  37.         if (GetPointReturnCode(prompt, point) == RTNORM)
  38.         {
  39.                 acutPrintf(采用T("\n用户成功输入了一个点"))
  40.                         return true;
  41.         }
  42.         else
  43.         {
  44.                 return false;
  45.         }
  46. }
  47. //获取关键词的函数(提示字符串,关键词字符串,默认关键词字符串,默认关键词索引,指向整数的引用)
  48. bool CGetInputUtil::GetKeyword(const TCHAR * prompt, const TCHAR * keywords, const TCHAR * firstDefault, int defaultKeyIndex, int & nRet)
  49. {
  50.         int rc;//整数变量rc,用于存储函数acedGetKword的返回值
  51.         TCHAR kword[20];//字符数组kword,用于存储用户输入的关键词
  52.         //firstDefault参数输入NULL表示不予许直接按ENTER键
  53.         acedInitGet(firstDefault == NULL ? 1 : 0, keywords);
  54.         //调用acedInitGet函数初始化获取关键词的环境。如果firstDefault为NULL,则第一个参数为1,否则为0。第二个参数是关键词字符串。
  55.         CString strPrompt = prompt;
  56.         if (firstDefault != NULL) {
  57.                 //在提示字符串后添加"<"、firstDefault和">:"
  58.                 strPrompt += L"<";
  59.                 strPrompt += firstDefault;
  60.                 strPrompt += ">:";
  61.         }
  62.         else {
  63.                 strPrompt += L":";
  64.         }
  65.         rc = acedGetKword(strPrompt, kword);
  66.         // 调用acedGetKword函数获取用户输入的关键词,并存储在kword中
  67.         switch (rc) {
  68.         case RTCAN:
  69.                 return false;//按下esc
  70.         case RTNONE://按enter
  71.                 nRet = defaultKeyIndex;
  72.                 return true;
  73.         case RTNORM:
  74.         {
  75.                 std::vector<CString>items;
  76.                 CStringUtil::Split(keywords, TEXT(" "), items);
  77.                 for (int i = 0; i < (int)items.size(); i++)
  78.                 {
  79.                         if (items[i].CompareNoCase(kword) == 0) {
  80.                                 nRet = i;
  81.                                 break;
  82.                         }
  83.                 }
  84.                 return true;
  85.         }
  86.         default:
  87.                 return false;
  88.         }
  89. }
  90. //提示用户输入一个实数。如果用户输入了一个有效的实数,或者没有输入而直接按回车(即默认值),则函数返回true。否则,返回false
  91. bool CGetInputUtil::GetReal(const TCHAR * prompt, double defaultVal, int precision, double & ret)
  92. {//参数(提示用户输入的字符串,默认的实数值d,表示精度的整数,用于保存用户输入的实数的引用)
  93.         CString strPrompt = prompt;
  94.         strPrompt.TrimRight();//去掉字符串末尾的空格。
  95.         strPrompt.TrimRight(TEXT(":"));// 去掉字符串末尾的冒号。
  96.         CString strDefaultValue;// 创建一个新的CString对象strDefaultValue
  97.         strDefaultValue.Format(TEXT("<%%.%df>:"), precision);
  98.         /* 使用Format方法格式化字符串,其中<%%.%df>:是一个占位符,
  99.         %d表示整数部分,%f表示小数部分,precision表示小数点后的位数。
  100.         例如,如果精度为3,那么占位符将被替换为<%%.3f>。*/
  101.         strPrompt.Format(strPrompt + strDefaultValue, defaultVal);//将格式化的默认值添加到提示字符串中。
  102.         ret = defaultVal;//将默认值赋给函数的引用参数ret
  103.         int rc = acedGetReal(strPrompt, &ret);//获取用户的实数输入,并将结果存储在变量rc中
  104.         if (rc == RTNORM || rc == RTNONE) {
  105.                 return true;
  106.         }
  107.         else {
  108.                 return false;
  109.         }
  110. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-28 14:39 , Processed in 0.138077 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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