iCAx开思工具箱

标题: 【求助】UG二次开发的高手来看一下,麻烦了 [打印本页]

作者: moshaocong    时间: 2005-1-7 17:28
标题: 【求助】UG二次开发的高手来看一下,麻烦了
我要用VC++的MFC编写个应用程序,功能是导入UG的DXF文件转换成DWG文件,我想问问大家MFC(exe)能不能做  
其中要用到UG的方法等,有哪些方法函数,比如UG中的打开文件,另存为等,怎么个用法,求高手指导一下,小弟这里先谢谢了
作者: zhjb113    时间: 2005-1-7 20:10
从DXF到DWG?
为什么不用Autocad阿,
另外DXF文件不是UG的文件格式,它是中性的文件格式,或者说是Autodesk提出的DWG的中性格式,和UG没有关系!
作者: Patton_icax    时间: 2005-1-8 10:59
MFC基本上不能实现UG的DXF文件转换成DWG文件,除非你有文件的格式接口不太现实),调用UGAPI可以做,但是比较麻烦.
作者: moshaocong    时间: 2005-1-10 09:05
先在这里谢谢~~~~~~~~~因为客户的需要,要在UG中运用DXF和DWG而且要批量转换,分别要在CAD,UG,PreE上实现,请问知道UG的对象函数吗??
比如UG中的打开,另存为等方法是什么函数,返回格式是什么?
先谢谢了
作者: moshaocong    时间: 2005-1-11 09:17
急啊~~~~~~~~~~~~~
作者: wgwang    时间: 2005-1-11 10:00
translator里不是有这个工具吗,干嘛还要自己弄?
作者: moshaocong    时间: 2005-1-13 14:34
因为工作的需要,要自己做一个,因为客户买的是正版软件,里面没有转换工具的,她们不用盗版的,所以必须我们公司提供
  
小样都看贴不回帖
作者: zzz    时间: 2005-1-18 22:08
moshaocong wrote:
因为工作的需要,要自己做一个,因为客户买的是正版软件,里面没有转换工具的,她们不用盗版的,所以必须我们公司提供  
  
  小样都看贴不回帖

  
几个问题:
不知你做的工具是要在用户的机子上用,还是在你们公司的机子上用。如果是在客户的机子用,客户买了UFUN的许可证了吗?如果没有的话,开发了也没用。因为没有许可证的话,用UFUN开发的东西,不能在用户的机子上运行。
买UFUN的许可证,应该比转换模块的许可证贵吧。
  
你自己的机子用的是正板UG吗?以前用D版UG生成的part在正版UG上打开会出问题,不知现在是不是还这样,好像没改吧
作者: moshaocong    时间: 2005-1-19 09:07
客户买的是正版的,我开发是用的盗版的^_^  二次开发啦,哪有成本再去买正版软件,又不是专做UG
现在差不多了
如果我的东西在一个没有UG的机器上运行,让他自己检测跳出“该机器没有安装UG”这个入口在哪里找,UF_terminate();后设置吗?
作者: zzz    时间: 2005-1-19 11:51
你没看懂我的问题吧?如果用户没有购买二次开发的许可证,你开发的东西他们不能运行。
作者: moshaocong    时间: 2005-1-21 09:04
这当然是购买了许可证的,不是卖给用户,是卖给公司
UF_PART_open(const char * part_name  
tag_t * part  
UF_PART_load_status_t * error_status );
请问一下,这个函数中第二,第三个参数是什么参数啊?
我指定打开单个文件,用这个判断
if(part==NULL_TAG)
{   
AfxMessageBox("a");
}else{
AfxMessageBox("b");
}
再UF_PART_save_as(".....");一个文件
  
发现一个问题,在不同的文件夹中,会打印出相同的b值
在相同的文件夹中,会打印出先b后a
所以不知道这两个参数到底是什么意思
是函数体错还是方法错误啊?
作者: moshaocong    时间: 2005-1-21 09:06
补充一下
上面连续指定打开2个文件
和批量打开差不多
批量打开在相同文件夹下的文件转换会打印先b后面都是a的情况
作者: moshaocong    时间: 2005-1-25 11:30
UF_part_open()函数只能用于打开部件文件
UF_part_save as()用于保存
为什么我open函数第一次可以打开dxf文件,转换格式成功
打开第二个文件就不能打开了呢
open函数不能用于dxf文件打开,索性都不能打开
为什么第一个可以打开的呢
我实行批量转换的时候,有是会转换成功就是说文件都能打开
可是大部分时候都不能打开,会报错,open返回值是3420007
有人知道这是怎么回事吗?
作者: zzz    时间: 2005-1-25 13:54
如果可以的话,把你的代码传上来看,一部分也行,看得更清楚。
根据你上面讲的来看,问题应该是你的part已经打开了,第二次打开不行。
作者: moshaocong    时间: 2005-1-25 15:18
void ProgressShow::CreateFolder(CString cstrSFolder, CString cstrDFolder)
{
  structFPath  sFPath;
  CString      cstrTemp;
  CString sFileName,dFileName,sFile;
  
  UF_PART_load_status_t error_status;
  
  int unit=1;  
    tag_t part1;
  int scope=1;
  int mode=1;
  
    CArray<structFPath,structFPath[$> myArray]
  
  CString sPath=cstrSFolder;
  
    CFileFind tempFind;   //声明一个CFileFind类变量,以用来搜索
    char tempFileFind[200]; //用于定义搜索格式
    sprintf(tempFileFind,"%s\\*.*",cstrSFolder);//匹配格式为*.*,即该目录下的所有文件  
  
    BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);//查找第一个文件
    while(IsFinded)
  {
      IsFinded=(BOOL)tempFind.FindNextFile();//递归搜索其他的文件  
      if(!tempFind.IsDots())//如果不是"."目录
    {
    cstrSFolder=tempFind.GetFilePath();
        cstrTemp=cstrDFolder + "\\" + tempFind.GetFileTitle();
    if (tempFind.IsDirectory())
    {
      LPTSTR lprCopyTo=new char[255];
            lstrcpy(lprCopyTo,cstrTemp);//目标文件夹
      sPath=lprCopyTo;
      CreateDirectory(lprCopyTo,NULL);
            sFPath.SPath=cstrSFolder;
      sFPath.DPath=cstrTemp;
      myArray.Add(sFPath);
    }
    else
    {
      CString FileTitle=tempFind.GetFileTitle();
  
            sFileName=tempFind.GetFilePath();
      sFile=tempFind.GetFileName();
      dFileName=cstrDFolder + "\\" + sFile;
      if (equalDxf(sFileName))
      {
          int err=UF_PART_open(sFileName,[$part1,&error_status)]
          if(err==0)
        {
          UF_PART_save_as(dFileName);
        }
        else
        {
          DealError(CurPath,sFileName);
        }
  
        CString tempFile=FileTitle+"_dxf.prt";
        CString filePath=sPath+"\\"+tempFile;      
          deleteFile(filePath);
        CString fileLog=sPath+"\\"+FileTitle+".log";
        deleteFile(fileLog);
        CString fileSummary=sPath+"\\"+FileTitle+"_dxf_summary.log";
        deleteFile(fileSummary);
  
        iCurFileNum=iCurFileNum+1;
        m_CurFile.SetWindowText(sFileName);
        DealProgress();
  
      }
    }
    }
    CheckMessageQueue();
  }
    tempFind.Close();
    CheckMessageQueue();
  while (myArray.GetSize()!=0)
  {
       sFPath=myArray.GetAt(0);
     myArray.RemoveAt(0,1);
       CreateFolder(sFPath.SPath,sFPath.DPath);
  }
}
这是我的一个按钮转换函数,涉及UG的是从open以后开始的
作者: moshaocong    时间: 2005-1-25 15:20
为什么只能打开一个DXF文件,而对于prt文件都可以打开,是不是open只对prt文件有用因为是ug自身的函数.
不过我open也打开了一个dxf文件了呀,为什么别的打开不了了啊
作者: moshaocong    时间: 2005-1-25 15:26
初始化UF_initialize();和结束UF_terminate();都是分别做在应用程序启动和关闭的地方的
作者: zzz    时间: 2005-1-25 21:44
既然你有错误号,可以用UF_get_fail_message()来查看一下错误的含义嘛。
作者: moshaocong    时间: 2005-1-26 08:41
含义就是dxfdwg错,晕




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3