在页面空白处放置一个注释,注释可以在界面中定义。
//创建注释 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); }
运行结果:
