野火论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始


查看: 5187|回复: 5

[求助] 从路径打开proe模型如何达到每次打开覆盖原有模型的效果?

[复制链接]

9

主题

29

回帖

1

威望

实习生

Rank: 1

积分
48
发表于 2018-6-15 16:16 | 显示全部楼层 |阅读模式
本帖最后由 ghjnwk@163.com 于 2018-6-15 16:42 编辑

我现在在开发一个功能,是将“产品代号”与“模型”关联,通过选中“产品代号”,点击响应按钮,可以打开保存的“模型”。问题是,当我从“当前模型”切换到别的“模型”时,效果不是覆盖,而是打开一个新的窗口,让我很困扰,没有找到好的办法。下面是代码。

  1.         // 这行代码初始化路径,在我的项目里边,是从数据库中读取
  2.         CString path = _T("D:\\vs2015_project\\Proe_Develop\\creo4\\prt0005.prt.9");   

  3.          // 这几行代码对字符的格式进行转换 从char*转到wchar_t*
  4.         std::string string_path = CT2A(path.GetBuffer());
  5.         char* pCStrKey = (char*)(string_path).c_str();
  6.         int pSize = MultiByteToWideChar(CP_UTF8, 0, pCStrKey, strlen(pCStrKey) + 1, NULL, 0);
  7.         wchar_t *pWCStrKey = new wchar_t[pSize];
  8.         MultiByteToWideChar(CP_UTF8, 0, pCStrKey, strlen(pCStrKey) + 1, pWCStrKey, pSize);
  9.         ProMdl model;

  10.         ProMdlFiletypeLoad(pWCStrKey, PRO_MDLFILE_PART, PRO_B_FALSE, &model);   // 将模型加载到内存中
  11.         delete[] pWCStrKey;            // 管理内存

  12.         ProObjectwindowMdlnameCreate(L"prt0005", PRO_PART, NULL);       // 创建一个窗口
  13.         ProObjectwindowMdlnameCreate(L"prt0005", PRO_PART, &window_id);    // 获取window id
  14.         ProMdlDisplay(model);     // 显示模型
  15.         ProWindowCurrentSet(window_id);     // 将模型设为当前窗口
  16.         ProWindowActivate(window_id);         // 激活窗口(不激活的化按钮是灰色的)
复制代码


希望达到的效果是“覆盖”原来窗口,而不是“新建”一个窗口  

求大佬解答

9

主题

29

回帖

1

威望

实习生

Rank: 1

积分
48
 楼主| 发表于 2018-6-15 16:42 | 显示全部楼层
大佬不来一下吗?  
回复 支持 反对

使用道具 举报

6

主题

338

回帖

4

威望

工程师

Rank: 3Rank: 3

积分
397
发表于 2018-6-15 22:13 | 显示全部楼层
所以这个功能有什么用呢
回复 支持 反对

使用道具 举报

9

主题

29

回帖

1

威望

实习生

Rank: 1

积分
48
 楼主| 发表于 2018-6-19 09:29 | 显示全部楼层
Nimery 发表于 2018-6-15 22:13
所以这个功能有什么用呢

作用是:将产品代号与模型关联起来,这样不用每次选中代号之后,手动打开模型。。。 尤其是在产品结构树比较复杂的时候,可能根本就不知道代号与模型之间的对应关系了  这个时候,这个功能就变成了必备功能了
回复 支持 反对

使用道具 举报

21

主题

310

回帖

6

威望

工程师

Rank: 3Rank: 3

积分
409
发表于 2018-6-22 09:33 | 显示全部楼层
ProWindowCurrentGet取当前窗口ID,再用ProMdlDisplay直接在当前窗口显示模型,最后用ProWindowActivate激活窗口
回复 支持 反对

使用道具 举报

9

主题

29

回帖

1

威望

实习生

Rank: 1

积分
48
 楼主| 发表于 2018-7-2 16:04 | 显示全部楼层
最后的解决方法是:首先调用 ProWindowClear()清理当前窗口,然后 ProMdlFiletypeLoad()加载模型,最后调用ProMdlDisPlay()和ProWindowActivate()显示模型,并激活前窗口  
回复 支持 反对

使用道具 举报

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

本版积分规则

本站为非营利性站点,部分资源为网友搜集或发布,仅供学习和研究使用,如用于商业用途,请购买正版。站内所发布的资源,如有侵犯你的权益,请联系我们,本站将立即改正或删除。

QQ|手机版|小黑屋|野火论坛(©2007~2024) ( 苏ICP备11036728号-2 )苏公网安备 32039102000103号

GMT+8, 2024-4-25 17:24 , Processed in 0.107168 second(s), 23 queries .

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