通过用户交互界面获取输入
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;//字符数组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.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;
}
}
页:
[1]