iCAx开思网
标题:
请教UG OPEN三维图转二维图的问题
[打印本页]
作者:
orangelove
时间:
2007-9-5 21:40
标题:
请教UG OPEN三维图转二维图的问题
请高手指教。
在MFC下进行UG Open API三维图转二维图时结果中不是自己想要的。我的方法如下:
主要由两个函数实现:
//生成工程图
void CDn_1Dlg::Create_DxfDwg_File(CString file_path, CString prt_File, CString process_name)
//将生成的工程图后转成Dxf/Dwg文件
void CDn_1Dlg::Create_DxfDwg_File(CString file_path, CString prt_File, CString process_name)
对话框中两个按钮,
一个生成生成工程图,的响应函数为
void CDn_1Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
Create_2D_Drawing(1000,500);
}
一个转化为dwg图纸,响应函数为
void CDn_1Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
CString file_path, prt_file,process_name;
file_path="C:\\YTTest\\dwg";
prt_file="C:\\YTTest\\dwg\\caculate.prt";
process_name="lashen";
Create_DxfDwg_File(file_path, prt_file,process_name);
}
结果是会报错UF_VIEW_INVALID_VIEW_TAG,但能生成了一个.prt的ug二维视图和一个dwg二维图,但是都不是我想要的,应为我希望得到的是二维图的俯视图(TOP),而得到的却总是斜视的(Trimetric)。
错误应该是设置视图角度UF_VIEW_add_to_view_set,但我始终不知道该如何解决。请大侠帮忙,谢谢!
相关代码如下:
//将生成的工程图后转成Dxf/Dwg文件
void CDn_1Dlg::Create_DxfDwg_File(CString file_path, CString prt_File, CString process_name)
{
int ifail = 0;
tag_t drawing_sheet;
CString cmg_file, dwg_file;
cmg_file.Format(file_path + "\\drawing");
if( !ifail )
{
ifail = UF_DRAW_ask_current_drawing( &drawing_sheet );
//UF_CGM_export_options_p_t export_options;
UF_CGM_export_cgm (drawing_sheet, NULL, (LPSTR)(LPCTSTR)cmg_file);
int count;
tag_t * part_list;
int * error_list ;
UF_PART_save_all (&count, &part_list,&error_list );
UF_PART_close_all();
CString cmdfilename, UG_Dxf_filename, Dxf_filename;
UG_Dxf_filename.Format(file_path +"\\convert_part.prt");
Dxf_filename.Format(file_path +"\\" + process_name + ".dwg");
cmdfilename.Format(file_path +"\\convert.cmd");
CFileFind finder;
BOOL bWorking = finder.FindFile(UG_Dxf_filename);
if(bWorking==1)
{
CFile::Remove((LPSTR)(LPCTSTR)UG_Dxf_filename);//如果存在就删除
}
tag_t part_tag = NULL_TAG;
UF_PART_new ((LPSTR)(LPCTSTR)UG_Dxf_filename,1, &part_tag);
UF_PART_save();
cmg_file.Format(file_path + "\\drawing.cgm");
//UF_CGM_import_options_p_t import_options;
UF_CGM_import_cgm ((LPSTR)(LPCTSTR)cmg_file, NULL);
UF_VIEW_fit_view (NULL_TAG, 1.0);
tag_t work_view;
int reee=UF_VIEW_ask_work_view(&work_view);
if(reee==0)
AfxMessageBox("ok");
reee=UF_VIEW_add_to_view_set (
work_view,
UF_VIEW_STANDARD_ORIENTATION_TOP );
if(reee==ERROR_OK)
AfxMessageBox("set ok");
else if(reee==UF_VIEW_INVALID_OBJECT)
AfxMessageBox("UF_VIEW_INVALID_OBJECT");
else if(reee==UF_VIEW_INVALID_VIEW_TAG)
AfxMessageBox("UF_VIEW_INVALID_VIEW_TAG");
else if(reee==UF_VIEW_INVALID_ORIENTATION_TYPE)
AfxMessageBox("UF_VIEW_INVALID_ORIENTATION_TYPE");
UF_VIEW_save_all_active_views ( );
UF_PART_save_all (&count, &part_list,&error_list );
UF_PART_close_all();
UF_PART_export_options_t export_options;
export_options.new_part = TRUE;
export_options.params_mode = UF_PART_remove_params;
export_options.expression_mode = UF_PART_copy_exp_shallowly;
//判断文件是否存在,删除已有的文件
bWorking = finder.FindFile(Dxf_filename);
if(bWorking==1)
{
CFile::Remove((LPSTR)(LPCTSTR)Dxf_filename);//如果存在就删除
}
CString cmdtext;
CStdioFile cmdfile;
bWorking = finder.FindFile(cmdfilename);
if(bWorking==1)
{
CFile::Remove((LPSTR)(LPCTSTR)cmdfilename);//如果存在就删除
}
if(cmdfile.Open(cmdfilename,CFile::modeCreate|CFile::modeWrite|CFile::typeText)==0)
{
MessageBox("创建转换控制文件失败");
return;
}
cmdtext = "@echo off \n";
cmdfile.WriteString(cmdtext);
char *libvar;
libvar = getenv( "UGII_BASE_DIR" );
CString temp5 = "\"";
temp5 = temp5 + libvar;
CString temp1 = _T("\\dxfdwg\\dxfdwg\" ");
CString temp2 = _T("\"");
CString temp3 = _T(" o=\"");
CString temp4 = _T("\" d=");
CString temp6 = _T("\\dxfdwg\\dxfdwg.def\" l=\"convert.log\"");
cmdtext= temp5 + temp1 + temp2 + UG_Dxf_filename + temp2 + temp3 + Dxf_filename + temp4 + temp5 + temp6;
cmdfile.WriteString(cmdtext);
cmdfile.SetLength(cmdfile.GetPosition());
cmdfile.Close();
CString cmd_line = "\"" + cmdfilename + "\" -L -S";
WinExec(cmd_line,SW_SHOW);
}
else
{
::AfxMessageBox("请选择UG工程图!");
}
}
void CDn_1Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
Create_2D_Drawing(1000,500);
}
void CDn_1Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
CString file_path, prt_file,process_name;
file_path="C:\\YTTest\\dwg";
prt_file="C:\\YTTest\\dwg\\caculate.prt";
process_name="yadi";
Create_DxfDwg_File(file_path, prt_file,process_name);
}
作者:
orangelove
时间:
2007-9-5 21:57
呵呵,代码有点长,不过copy一下就可以试试啦,谢谢
欢迎光临 iCAx开思网 (https://www.icax.org/)
Powered by Discuz! X3.3