|
马上注册登录,享用更多网站功能!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
下面这段代码摘自一个二次开发的例子,在下有很多不明白的地方,希望哪位高手帮忙解释一下,越详细越好。先谢谢了!
// NewMdlDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "Ch2_Dlg2.h"
#include "NewMdlDlg.h"
#include <roToolkit.h>
#include <roUtil.h>
#include <roSolid.h>
#include <roMdl.h>
#include <roDrawing.h>
#include <roWindows.h>
// CNewMdlDlg 对话框
IMPLEMENT_DYNAMIC(CNewMdlDlg, CDialog)
CNewMdlDlg::CNewMdlDlg(CWnd* pParent)
: CDialog(CNewMdlDlg::IDD, pParent)
, m_nRadioBtn(0)
, m_csMdlName(_T(""))
{
}
CNewMdlDlg::~CNewMdlDlg()
{
}
void CNewMdlDlg:oDataExchange(CDataExchange* pDX)
{
CDialog:oDataExchange(pDX);
DDX_Radio(pDX, IDC_RADIO_PART, m_nRadioBtn);
DDX_Text(pDX, IDC_EDIT1, m_csMdlName);
}
BEGIN_MESSAGE_MAP(CNewMdlDlg, CDialog)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
END_MESSAGE_MAP()
// CNewMdlDlg 消息处理程序
/************************************************************************/
/* 【确定】的事务处理程序 */
/************************************************************************/
void CNewMdlDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if (!m_csMdlName.IsEmpty()) {
AfxMessageBox("请输入名称!");
return;
}
switch(m_nRadioBtn) {
case 0:
if (!NewPartMdl(m_csMdlName)) {
return;
}
break;
case 1:
if (!NewAsmMdl(m_csMdlName)) {
return;
}
break;
case 2:
if (!NewDrawingMdl(m_csMdlName)) {
return;
}
break;
default:
break;
}
OnOK();
}
/************************************************************************/
/*函数:NewPartMdl 新建零件模型 */
/************************************************************************/
bool CNewMdlDlg::NewPartMdl(CString csName)
{
ProError status;
ProLine buff;
ProMdl model;
int w_id;
ProStringToWstring(buff,csName.GetBuffer());
status = ProSolidCreate(buff, PRO_PART, (ProSolid *)&model);
if (status!=PRO_TK_NO_ERROR)
{
AfxMessageBox("文件已存在或文件名不合法!");
return false;
}
if (status==PRO_TK_NO_ERROR) {
ProMdlDisplay(model);
ProMdlWindowGet(model,&w_id);
ProWindowActivate(w_id);
}
return true;
}
/************************************************************************/
/*函数:NewAsmMdl 新建组件模型 */
/************************************************************************/
bool CNewMdlDlg::NewAsmMdl(CString csName)
{
ProError status;
ProLine buff;
ProMdl model;
int w_id;
ProStringToWstring(buff,csName.GetBuffer());
status = ProSolidCreate(buff,PRO_ASSEMBLY,(ProSolid *)&model);
if (status!=PRO_TK_NO_ERROR)
{
AfxMessageBox("文件已存在或文件名不合法!");
return false;
}
if (status==PRO_TK_NO_ERROR) {
ProMdlDisplay(model);
ProMdlWindowGet(model,&w_id);
ProWindowActivate(w_id);
}
}
/************************************************************************/
/*函数:NewAsmMdl 新建工程图模型 */
/************************************************************************/
bool CNewMdlDlg::NewDrawingMdl(CString csName)
{
ProMdl solid_mdl;
ProMdldata data;
ProModel model;
ProName dwg_template;
ProName name;
ProDrawing drawing;
ProError status;
ProDwgcreateOptions option=PRODWGCREATE_DISPLAY_DRAWING|PRODWGCRTERR_TEMPLATE_USED ;
ProDwgcreateErrs errors;
char strtmp[PRO_PATH_SIZE];
status=ProMdlCurrentGet(&solid_mdl);
if (status!=PRO_TK_NO_ERROR) {
AfxMessageBox("当前没有三维模型,不能生成二维模型!");
return false;
}
status=ProMdlDataGet(solid_mdl,&data);
ProWstringToString(strtmp,data.name);
ProStringToWstring(model.name,strtmp);
ProWstringToString(strtmp,data.type);
ProStringToWstring(model.type,strtmp);
//设置绘图模版名
ProStringToWstring(dwg_template,"c_drawing");
ProStringToWstring(name,csName.GetBuffer());
ProDrawingFromTmpltCreate(name,dwg_template,&model,option,&drawing,&errors);
return true;
} |
|