CREO二次开发-打开同名工程图

一、实现功能

在组件下打开零部件的同名工程图,如无同名工程图则新建工程图。如选择的文件为组件则插入材料明细表。

二、新建命令

1、命令图标可不添加。

2、图标存放位置:D:\Program Files\PTC\Creo 7.0.7.0\Common Files\text\resource(根据CREO安装位置下修改)。

extern "C" int user_initialize()
{
    ProError     status;
    uiCmdCmdId   cmd_drw;
    ProFileName MsgFile;
    ProStringToWstring(MsgFile, "Message.txt");

    status = ProCmdActionAdd("cmd_create_drw", (uiCmdCmdActFn)Draw, uiCmdPrioDefault, AccessDefault, PRO_B_TRUE, PRO_B_TRUE, &cmd_drw);
    status = ProCmdIconSet(cmd_drw, "auto_drawing_large.png");//命令图标,32*32或16*16像素
    status = ProCmdDesignate(cmd_drw, "createdrw", "open or creat drw", "open or creat drw", MsgFile);
    return status;
}

三、程序主体

1、选择零部件

可使用ProSelect或ProSelbufferSelectionsGet获取选择的零部件。

ProError status;
ProSelection* sels;
int nb_sel;

status = ProSelect("prt_or_asm", 10, NULL, NULL, NULL, NULL, &sels, &nb_sel);
if (status != PRO_TK_NO_ERROR)
{
	return(status);
}

2、尝试打开工程图

ProMdlFiletypeLoad仅将工程图读取到内存中,并不打开窗口。可通过ProObjectwindowMdlnameCreate创建窗口。


status = ProSelectionModelitemGet(sels[i], &asmcomp);

ProMdl Model = asmcomp.owner;
ProMdl Drw_model;
ProMdldata mdldata;

ProMdlDataGet(Model, &mdldata);

ProMdlDirectoryPathGet(Model, path);//获取零部件路径
ProWstringConcatenate(mdldata.name, path, PRO_VALUE_UNUSED);
ProWstringConcatenate(_T(".drw"), path, PRO_VALUE_UNUSED);
status = ProMdlFiletypeLoad(path, PRO_MDLFILE_UNUSED, PRO_B_FALSE, &Drw_model);//读取工程图

3、新建工程图

ProMdlFiletypeLoad返回错误是就需新建工程图。ProDrawingFromTmpltCreate可根据模板创建新的工程图。

ProError status;
ProModel Model;
ProPath template_path = _T("...");//模板文件位置

ProMdlMdlnameGet(asmcomp.owner, Model.name);
ProMdlExtensionGet(asmcomp.owner, Model.type);

ProDrawing draw;
ProDwgcreateErrs err;

status = ProDrawingFromTmpltCreate(Model.name, template_path, &Model, PRODWGCREATE_DISPLAY_DRAWING, &draw, &err);//根据模板建立工程图
if (status != PRO_TK_NO_ERROR)
{
	AfxMessageBox(_T("图纸生成失败!"));
	return(status);
}

4、插入材料明细表

当选择的为组件是则需插入材料明细表。

if (asmcomp.type == PRO_ASSEMBLY)
{
	ProDwgtable table;
	ProPoint3d point = { 559.52,213.54,0 };//插入坐标位置

	status = ProDwgtableByOriginRetrieve(draw, _T("表名称"), _T("表存放位置"), 0, point, (ProSolid)asmcomp.owner, NULL, &table);//插入材料明细表,
	if (status != PRO_TK_NO_ERROR)
	{
		AfxMessageBox(_T("表格插入失败!"));
		return(status);
	}
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值