Creo二次开发:查找和替换指定文件夹下的所有工程图中的注释文本
来源:互联网 发布:oracle rowid修改数据 编辑:程序博客网 时间:2024/06/05 15:49
1、查找
查找工程图中的注释文本主要涉及到注释的遍历函数ProDrawingDtlNoteVisit,通过动作函数将遍历到的注释存入向量容器中,再通过循环获取注释的文本,与需要查找的注释文本进行比较,相等即可找到,并且将该注释所在的工程图名称显示在列表框中,运行结果如图所示:
代码如下:
//动作函数
ProError UserNoteVisitAct(ProDtlitem *note,ProError status,ProAppData data)
{
vector<ProDtlitem>* p_note=(vector<ProDtlitem>*)data;
p_note->push_back(*note);
return PRO_TK_NO_ERROR;
}
void CSearchAndReplace::OnBnClickedBtnSearchNext()
{
// TODO: 在此添加控件通知处理程序代码
//更新控件,获取用户输入的值
UpdateData(TRUE);
ProError status;
ProName name;
ProStringToWstring(name,"D:\\demo");
ProPath *file_list,*dir_list;
status=ProArrayAlloc(0,sizeof(ProPath),1,(ProArray*)&file_list);
status=ProArrayAlloc(0,sizeof(ProPath),1,(ProArray*)&dir_list);
//将路径下所有drw格式的文件存入file_list中
status=ProFilesList(name,L"*.drw",PRO_FILE_LIST_LATEST,&file_list,&dir_list);
if (PRO_TK_NO_ERROR!=status)
{
return;
}
int size=0;
//获取数组大小(即工程图的个数)
ProArraySizeGet((ProArray)file_list,&size);
//清空列表框
m_listBox.ResetContent();
int num=0;
ProMdl mdl;
ProName mdl_name;
//在工程图之间循环
for (int j=0;j<size;j++)
{
//加载第j个工程图
status=ProMdlLoad(file_list[j],PRO_MDL_DRAWING,PRO_B_FALSE,&mdl);
status=ProMdlDisplay(mdl);
/*status=ProMdlCurrentGet((ProMdl*)&mdl);
if (PRO_TK_NO_ERROR!=status)
{
return;
}*/
ProDtlnotedata notedata;
vector<ProDtlitem> noteItem;
//遍历该工程图中的全部注释
status=ProDrawingDtlnoteVisit((ProDrawing)mdl,NULL,1,(ProDtlitemVisitAction)UserNoteVisitAct,NULL,¬eItem);
if (PRO_TK_NO_ERROR!=status)
{
return ;
}
//在该工程图中的所有注释之间循环
for (unsigned int i=0;i<noteItem.size();i++)
{
status=ProDtlnoteDataGet((ProDtlnote*)¬eItem[i],NULL,PRODISPMODE_NUMERIC,¬edata);
if (PRO_TK_NO_ERROR!=status)
{
return;
}
ProDtlnoteline *lines;
status=ProDtlnotedataLinesCollect(notedata,&lines);
int lcount;
status=ProArraySizeGet(lines,&lcount);
for (int m=0;m<lcount;m++)
{
ProDtlnotetext* texts;
status=ProDtlnotelineTextsCollect(lines[m],&texts);
int tcount;
status=ProArraySizeGet(texts,&tcount);
for (int n=0;n<tcount;n++)
{
ProLine lstring;
ProDtlnotetextStringGet(texts[n],lstring);
CString str,strMdlName;
str.Format(_T("%s"),lstring);
if (str==m_strSearchText)
{
//AfxMessageBox(_T("找到注释!"));
num++;
status=ProMdlNameGet(mdl,mdl_name);
strMdlName.Format(_T("%ws"),mdl_name);
m_listBox.AddString(strMdlName);
}
}
status=ProArrayFree((ProArray*)&texts);
}
status=ProArrayFree((ProArray*)&lines);
status=ProDtlnotedataFree(notedata);
}
}
if (0==num)
{
AfxMessageBox(_T("找不到该注释!"));
}
status=ProArrayFree((ProArray*)&file_list);
status=ProArrayFree((ProArray*)&dir_list);
}
2、替换
void CSearchAndReplace::OnBnClickedBtnReplace()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
ProError status;
ProName name;
ProStringToWstring(name,"D:\\demo");
ProPath *file_list,*dir_list;
status=ProArrayAlloc(0,sizeof(ProPath),1,(ProArray*)&file_list);
status=ProArrayAlloc(0,sizeof(ProPath),1,(ProArray*)&dir_list);
status=ProFilesList(name,L"*.drw",PRO_FILE_LIST_LATEST,&file_list,&dir_list);
if (PRO_TK_NO_ERROR!=status)
{
return;
}
ProMdl mdl;
int size=0;
ProArraySizeGet((ProArray)file_list,&size);
for (int j=0;j<size;j++)
{
status=ProMdlLoad(file_list[j],PRO_MDL_DRAWING,PRO_B_FALSE,&mdl);
status=ProMdlDisplay(mdl);
int window_id;
status=ProWindowCurrentGet(&window_id);
ProLine string;
wcscpy_s(string,m_strReplace);
ProDtlnotedata notedata;
vector<ProDtlitem> noteItem;
status=ProDrawingDtlnoteVisit((ProDrawing)mdl,NULL,1,(ProDtlitemVisitAction)UserNoteVisitAct,NULL,¬eItem);
if (PRO_TK_NO_ERROR!=status)
{
return ;
}
ProDtlnotetext* texts;
ProDtlnoteline *lines;
for (unsigned int i=0;i<noteItem.size();i++)
{
status=ProDtlnoteDataGet((ProDtlnote*)¬eItem[i],NULL,PRODISPMODE_NUMERIC,¬edata);
if (PRO_TK_NO_ERROR!=status)
{
return;
}
status=ProDtlnotedataLinesCollect(notedata,&lines);
int lcount;
ProArraySizeGet(lines,&lcount);
for (int m=0;m<lcount;m++)
{
status=ProDtlnotelineTextsCollect(lines[m],&texts);
int tcount;
status=ProArraySizeGet(texts,&tcount);
for (int n=0;n<tcount;n++)
{
ProLine lstring;
status=ProDtlnotetextStringGet(texts[n],lstring);
CString str;
str.Format(_T("%s"),lstring);
//判断是否为需要替换的注释文本
if (str==m_strSearchText)
{
//设置替换文本的内容
status=ProDtlnotetextStringSet(texts[n],string);
}
}
status=ProDtlnotelineTextsSet(lines[m],texts);
}
status=ProDtlnoteldataLinesSet(notedata,lines);
//擦除原来注释文本的内容
status=ProDtlnoteErase((ProDtlnote*)¬eItem[i]);
//用需要添加的注释文本修改原来的注释
status=ProDtlnoteModify((ProDtlnote*)¬eItem[i],NULL,notedata);
//显示
status=ProDtlnoteShow((ProDtlnote*)¬eItem[i]);
}
//status=ProWindowRefresh(window_id);
status=ProSolidRegenerate((ProSolid)mdl,PRO_REGEN_FORCE_REGEN);
status=ProArrayFree((ProArray*)&texts);
status=ProArrayFree((ProArray*)&lines);
status=ProDtlnotedataFree(notedata);
}
status=ProArrayFree((ProArray*)&file_list);
status=ProArrayFree((ProArray*)&dir_list);
}
运行结果:
替换前:
替换后:
- Creo二次开发:查找和替换指定文件夹下的所有工程图中的注释文本
- Creo二次开发:查找和替换指定文件夹下所有工程图中的符号
- Creo二次开发:根据参数在指定文件夹中查找模型
- Creo二次开发:批量生成工程图
- Creo二次开发:创建工程图,生成球标和明细表
- Creo二次开发:添加注释
- CFileFind类遍历查找文件夹下的所有文件,或者指定文件,并使用ofstream输出到制定文本
- vb查找指定文件夹下面的所有文件和其子目录下的文件
- Python 查找指定文件夹下的所有路径
- Creo二次开发:查找文件件下具有某种几何特征的模型
- C#中拷贝指定文件夹下的所有文件夹目录到指定文件夹中的方法
- 查找指定文件夹下的指定格式文件
- 查找文件夹下的所有文件内容中的特定单词
- C# 查找指定文件夹下 指定后缀名的所有文件(文件列表)
- 批处理怎样替换文件夹下所有文本内容?
- linux 命令替换文件夹下所有文件指定字符串为***
- linux 命令替换文件夹下所有文件指定字符串为***
- Java遍历文件夹下所有文件并替换指定字符串
- Android官方开发文档Training系列课程
- iOS开发——创建自己的Framework最完整教程
- 华为OJ——iNOC产品部--完全数计算
- C3P0连接池
- Android软键盘的控制以及更改软键盘
- Creo二次开发:查找和替换指定文件夹下的所有工程图中的注释文本
- APP三种开发模式
- Context全解析,让你的上下文明明白白
- 【牛客网】链表中倒数第k个结点
- Proud Merchants hd 3466
- datasource与session以及sessionFactory的联系
- JavaScript——Throw、Try 和 Catch
- 国产dwz jui使用心得
- 【USACO题库】1.2.2 Transformations方块转换