Creo二次开发:添加注释

在页面空白处放置一个注释,注释可以在界面中定义。

//创建注释
int UserNoteCreate(ProDrawing drawing,ProLine notestr,ProVector pos,ProModelitem modelitem,ProSelection* view_sel)
{
    ProError err;
    ProDtlnotetext text;
    ProDtlnoteline line;
    ProDtlnotedata ndata;
    ProView view;
    ProDtlattach attach;
    ProDtlnote note;
    ProSelection csys_sel;
    int pid;

    err=ProWindowCurrentGet(&pid);
    //为注释文本数据分配内存
    err=ProDtlnotetextAlloc(&text);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //将注释文本存入text中
    err=ProDtlnotetextStringSet(text,notestr);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //Allocate memory for the note text line data. User must free memory by ProDtlnotelineFree()
    err=ProDtlnotelineAlloc(&line);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //Add text to the note text line data.
    err=ProDtlnotelineTextAdd(line,text);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //Allocate and initialize memory for note data. User must release memory by ProDtlnotedataFree.
    err=ProDtlnotedataAlloc(drawing,&ndata);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //将一行文本加入到ndata中
    err=ProDtlnotedataLineAdd(ndata,line);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //分配和选择性的填充一个选择对象
    err=ProSelectionAlloc(NULL,&modelitem,&csys_sel);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //获得所选对象的视图句柄
    err=ProSelectionViewGet(view_sel[0],&view);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    err=ProSelectionViewSet(view,&csys_sel);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //Allocate and initialize the memory for a detail attachment. User must release the memory by ProDtlattachFree.
    err=ProDtlattachAlloc(PRO_DTLATTACHTYPE_FREE,view,pos,NULL,&attach);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //将特定的注释依附到我们所选择的对象上
    err=ProDtlnotedataAttachmentSet(ndata,attach);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //创建一个注释
    err=ProDtlnoteCreate(drawing,NULL,ndata,¬e);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    //显示创建的注释
    err=ProDtlnoteShow(¬e);
    if (err!=PRO_TK_NO_ERROR)
        return err;
    err=ProDtlnotedataFree(ndata);
    err=ProDtlattachFree(attach);
    err=ProSelectionFree(&csys_sel);
    err=ProDtlnotelineFree(line);
    err=ProDtlnotetextFree(text);
    //激活当前窗口
    ProWindowActivate(pid);

    return 0;
}
void CPart2DDlg::OnBnClickedBtnNoteAdd()
{
    // TODO: 在此添加控件通知处理程序代码
    UpdateData(TRUE);
    ProError err;
    ProDrawing drawing=NULL;
    ProLine notestr;
    ProMouseButton button_pressed;
    ProVector position;
    ProModelitem modelitem;
    ProSelection* sel;
    int n_sel;

    //获取当前模型
    err=ProMdlCurrentGet((ProMdl*)&drawing);
    if (err!=PRO_TK_NO_ERROR)
        return;
    //所需添加的注释内容
    wcscpy_s(notestr, m_strNoteText);

    //获取用户单击鼠标后获得的坐标位置(即注释将要放置的位置)
    if (ProMousePickGet(PRO_ANY_BUTTON,&button_pressed,position)!=PRO_TK_NO_ERROR)
        return;
    //选择一个对象(注释所依附的对象)
    err=ProSelect((char*)"feature",1,NULL,NULL,NULL,NULL,&sel,&n_sel);
    if (err!=PRO_TK_NO_ERROR||n_sel<1)
        return;
    //从所选对象中获取模型项
    err=ProSelectionModelitemGet(sel[0],&modelitem);
    if (err!=PRO_TK_NO_ERROR)
        return;

    UserNoteCreate(drawing,notestr,position,modelitem,sel);
}

运行结果:

Creo二次开发:添加注释_第1张图片

你可能感兴趣的:(Creo二次开发:添加注释)