吾爱光设

 找回密码
 注册
会员须知
会员须知
实用帮助
实用帮助
查看: 2832|回复: 1

[求助] 关于ZEMAX-API analysis分析接口 C++一段代码报错的请教

[复制链接]
  • TA的每日心情
    无聊
    2024-5-29 14:24
  • 签到天数: 209 天

    [LV.7]常住居民III

    14

    主题

    56

    回帖

    0

    积分

    小白

    积分
    0
    发表于 2022-11-8 11:07 | 显示全部楼层 |阅读模式
    最近学习zemax api,
    https://mp.weixin.qq.com/s/AdjUB2yT1i_Pp7C9yc2MlA
    上述链内容是一段zemax api analysis 分析代码,代码是C#写的,此为前提;
    然后我用C++跟着写了一遍,但是编译报错;请各位专家指点迷津;
    // Add your custom code here...
        IOpticalSystemPtr TheSystem = TheApplication->PrimarySystem;
        /*cout << "my code begin running..." << endl;*/
        ILensDataEditorPtr TheLDE = TheSystem->LDE;
        ILDERowPtr surf6 = TheLDE->GetSurfaceAt(6);
        double *MTFs30 = new double[201];
        double *MTFs40 = new double[201];
        double  *MTFs50 = new double[201];
        double *surf6Thi = new double[201];
        IMeritFunctionEditorPtr TheMFE = TheSystem->MFE;
        IMFERowPtr Operand1 = TheMFE->AddOperand();
        Operand1->ChangeType(MeritOperandType_MTFS);
        IEditorCellPtr Op1Samp = Operand1->GetOperandCell(MeritColumn_Param2);
        Op1Samp->IntegerValue = 2;
        IEditorCellPtr Op1Freq = Operand1->GetOperandCell(MeritColumn_Param4);
        Op1Freq->DoubleValue = 30;
        IMFERowPtr Operand2 = TheMFE->AddOperand();
        Operand2->ChangeType(MeritOperandType_MTFS);
        IEditorCellPtr Op2Samp = Operand2->GetOperandCell(MeritColumn_Param2);
        Op1Samp->IntegerValue = 2;
        IEditorCellPtr Op2Freq = Operand2->GetOperandCell(MeritColumn_Param4);
        Op2Freq->DoubleValue = 40;
        IMFERowPtr Operand3 = TheMFE->AddOperand();
        Operand3->ChangeType(MeritOperandType_MTFS);
        IEditorCellPtr Op3Samp = Operand3->GetOperandCell(MeritColumn_Param2);
        Op3Samp->IntegerValue = 2;
        IEditorCellPtr Op3Freq = Operand3->GetOperandCell(MeritColumn_Param4);
        Op3Freq->DoubleValue = 50;
        double step = 0.01;
        surf6->Thickness = surf6->Thickness - 100 * step;
        for (int i = 0; i < 201; i++) {
            surf6->Thickness = surf6->Thickness + step;
            surf6Thi = surf6->Thickness;
            //quick focus
            IQuickFocusPtr quickFocus = TheSystem->Tools->OpenQuickFocus();
            QuickFocusCriterion QuickFocusCriterion_SpotSizeRadial;
            quickFocus->UseCentroid = true;
    ISystemToolPtr baseTool = quickFocus;
            baseTool->RunAndWaitForCompletion();
            baseTool->Close();
            TheMFE->CalculateMeritFunction();
            MTFs30=Operand1->Value;
            MTFs40 = Operand2->Value;
            MTFs50 = Operand3->Value;
        }
        //plot the result
        IUser2DLineDataPtr LinePlot;
        //cout << "my code running to the plot file...." << endl;
        LinePlot->AddSeries("MTF 30 cycles/mm", ZemaxColor_Color1, 201, MTFs30);
        LinePlot->AddSeries("MTF 40 cycles/mm", ZemaxColor_Color2, 201, MTFs40);
        LinePlot->AddSeries("MTF 50 cycles/mm", ZemaxColor_Color3, 201, MTFs50);
        LinePlot->XLabel = "surface 6 thickness [mm]";
        LinePlot->YLabel = "MTF";
        delete[] MTFs30;
        delete[] MTFs40;
        delete[] MTFs50;
        delete[] surf6Thi;
    编译报错图片:


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    ×
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2024-5-29 14:24
  • 签到天数: 209 天

    [LV.7]常住居民III

    14

    主题

    56

    回帖

    0

    积分

    小白

    积分
    0
     楼主| 发表于 2022-11-8 11:15 | 显示全部楼层
    还有一段C#代码,始终没找到用C++正确的写法;
    按照帮助文件里面的内容,make2dplot函数应该是有三个参数的;
    但是我要是写成
    IUser2DLineDataPtr LinePlot = iUserAnalysisData::Make2DLinePlot("MTF VS Surface6 thickness",201,surf6Thi),也会报错,请各位专家指点;

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    ×
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    联系我们|本论坛只支持PC端注册|手机版|小黑屋|吾爱光设 ( 粤ICP备15067533号 )

    GMT+8, 2024-11-27 16:34 , Processed in 0.109375 second(s), 25 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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