【NX二次开发】指定矢量控件,记住上次选择的方向

block UI控件如果有RetainValue属性,就用这个属性。没有这个属性可以参考下面这种方法。以矢量控件为例:

 1.在apply_cb回调中,将控件值保存到文本中

double TopForTextDir[3] = { 0.0,0.0,0.0 };
Vector3d vec = this->vector0->GetProperties()->GetVector("Vector");
TopForTextDir[0] = vec.X;
TopForTextDir[1] = vec.Y;
TopForTextDir[2] = vec.Z;
            
string strFile = "D:\haha\temp\k_cam_BoosCupFace_vector0.temp";
FILE *fp = NULL;
errno_t err = fopen_s(&fp, strFile.c_str(), "w");
fprintf(fp, "%f,%f,%f", TopForTextDir[0], TopForTextDir[1], TopForTextDir[2]);
fclose(fp);

2.在initialize_cb回调中,从文本中读取,设置控件值

    string strFile = "D:\haha\temp\k_cam_BoosCupFace_vector0.temp";
    FILE *fp = NULL;
    errno_t err = fopen_s(&fp, strFile.c_str(), "r");
    if (fp != NULL)
    {
        char szLineContentTemp[501] = "";
        fgets(szLineContentTemp, 500, fp);
        if (strlen(szLineContentTemp) > 3)
        {
            if (szLineContentTemp[strlen(szLineContentTemp) - 1] == '
') szLineContentTemp[strlen(szLineContentTemp) - 1] = '';
            string strLineTemp = szLineContentTemp;
            if (strLineTemp.find(",") != strLineTemp.npos)
            {
                vector<string> vecTemp;
                splitString(strLineTemp, vecTemp, ",");
                if (vecTemp.size() == 3)
                {
                    double douDir[3] = { 0.0,0.0,0.0 };
                    douDir[0] = atof(vecTemp[0].c_str());
                    douDir[1] = atof(vecTemp[1].c_str());
                    douDir[2] = atof(vecTemp[2].c_str());
                    Vector3d vecDir(douDir[0], douDir[1], douDir[2]);
                    this->vector0->GetProperties()->SetVector("Vector", vecDir);
                }
            }
        }
    }
    fclose(fp);

其他方法,先记录一下以后再说吧:

你把值读出来,写到部件属性里,在打开工具对话框去部件属性里读出来啊

除了这个方法还有方法,自己做个UDO把那个值 自定义数据管理起来

UDO 再次弹出对话框的时候,就把那个值 显示到 对话框里了

原文地址:https://www.cnblogs.com/KMould/p/14282770.html