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