|
- int CGetInputUtil::GetPointReturnCode(const AcGePoint3d & basePoint, const TCHAR * prompt, AcGePoint3d & point)
- {
- AcGePoint3d ucsBasePoint = CConvertUtil::WcsToUcsPoint(basePoint);
- //basePoint从WCS(世界坐标系)转换为UCS(用户坐标系)
- int nReturn = acedGetPoint(asDblArray(ucsBasePoint), prompt, asDblArray(point));//asDblArray将pnt返回为三个双精度数组
- /*这一行代码调用AutoCAD的API函数acedGetPoint,获取用户输入的点。
- 这个函数需要三个参数:一个点的数组(我们前面已经将basePoint转换为UCS,所以这里传入ucsBasePoint),
- 一个提示字符串(prompt),和一个点的数组(用于存储用户输入的点,我们传入的是point)*/
- if (nReturn == RTNORM) {
-
- point = CConvertUtil::UcsToWcsPoint(point);
- }
- //如果返回值是RTNORM(这通常表示正常的结束状态),那么就将用户输入的点从UCS转换为WCS。
- return nReturn;
-
-
- }
-
- int CGetInputUtil::GetPointReturnCode(const TCHAR * prompt, AcGePoint3d & point)
- {
- int nReturn = acedGetPoint(NULL, prompt, asDblArray(point));
-
- if (nReturn == RTNORM) {
- point = CConvertUtil::UcsToWcsPoint(point);
- }
- return nReturn;
-
- }
-
- bool CGetInputUtil::GetPoint(const AcGePoint3d & basePoint, const TCHAR * prompt, AcGePoint3d & point)
- {
- if (GetPointReturnCode(basePoint, prompt, point) == RTNORM)
- {
- acutPrintf(采用T("\n用户成功输入了一个点"))
- return true;
- }
- else
- {
- return false;
- }
- }
-
- bool CGetInputUtil::GetPoint(const TCHAR * prompt, AcGePoint3d & point)
- {
- if (GetPointReturnCode(prompt, point) == RTNORM)
- {
- acutPrintf(采用T("\n用户成功输入了一个点"))
- return true;
- }
- else
- {
- return false;
- }
- }
- //获取关键词的函数(提示字符串,关键词字符串,默认关键词字符串,默认关键词索引,指向整数的引用)
- bool CGetInputUtil::GetKeyword(const TCHAR * prompt, const TCHAR * keywords, const TCHAR * firstDefault, int defaultKeyIndex, int & nRet)
- {
- int rc;//整数变量rc,用于存储函数acedGetKword的返回值
-
- TCHAR kword[20];//字符数组kword,用于存储用户输入的关键词
- //firstDefault参数输入NULL表示不予许直接按ENTER键
- acedInitGet(firstDefault == NULL ? 1 : 0, keywords);
- //调用acedInitGet函数初始化获取关键词的环境。如果firstDefault为NULL,则第一个参数为1,否则为0。第二个参数是关键词字符串。
- CString strPrompt = prompt;
-
- if (firstDefault != NULL) {
- //在提示字符串后添加"<"、firstDefault和">:"
- strPrompt += L"<";
- strPrompt += firstDefault;
- strPrompt += ">:";
-
- }
- else {
- strPrompt += L":";
- }
- rc = acedGetKword(strPrompt, kword);
- // 调用acedGetKword函数获取用户输入的关键词,并存储在kword中
- switch (rc) {
-
- case RTCAN:
- return false;//按下esc
-
- case RTNONE://按enter
- nRet = defaultKeyIndex;
- return true;
-
- case RTNORM:
- {
- std::vector<CString>items;
-
- CStringUtil::Split(keywords, TEXT(" "), items);
-
- for (int i = 0; i < (int)items.size(); i++)
- {
-
- if (items[i].CompareNoCase(kword) == 0) {
-
- nRet = i;
- break;
- }
- }
- return true;
- }
- default:
- return false;
-
- }
- }
- //提示用户输入一个实数。如果用户输入了一个有效的实数,或者没有输入而直接按回车(即默认值),则函数返回true。否则,返回false
- bool CGetInputUtil::GetReal(const TCHAR * prompt, double defaultVal, int precision, double & ret)
- {//参数(提示用户输入的字符串,默认的实数值d,表示精度的整数,用于保存用户输入的实数的引用)
- CString strPrompt = prompt;
- strPrompt.TrimRight();//去掉字符串末尾的空格。
- strPrompt.TrimRight(TEXT(":"));// 去掉字符串末尾的冒号。
- CString strDefaultValue;// 创建一个新的CString对象strDefaultValue
- strDefaultValue.Format(TEXT("<%%.%df>:"), precision);
- /* 使用Format方法格式化字符串,其中<%%.%df>:是一个占位符,
- %d表示整数部分,%f表示小数部分,precision表示小数点后的位数。
- 例如,如果精度为3,那么占位符将被替换为<%%.3f>。*/
- strPrompt.Format(strPrompt + strDefaultValue, defaultVal);//将格式化的默认值添加到提示字符串中。
- ret = defaultVal;//将默认值赋给函数的引用参数ret
- int rc = acedGetReal(strPrompt, &ret);//获取用户的实数输入,并将结果存储在变量rc中
-
- if (rc == RTNORM || rc == RTNONE) {
-
- return true;
- }
- else {
- return false;
- }
-
- }
复制代码 |
|