admin 发表于 2024-3-6 11:45:31

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

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]
查看完整版本: 通过用户交互界面获取输入