iCAx开思工具箱

标题: 关于NX连续打印图纸程序的源代码 [打印本页]

作者: xichulaishi    时间: 2014-6-5 10:46
标题: 关于NX连续打印图纸程序的源代码
首先我要说明的是,打印程序和遍历文件夹程序都是网上找别人的,可是整合不好,所以发上来跟大家讨论讨论问题出在哪里
能遍历所有的文件了,就是只能打印第一个,打印第二个就会出错,所以可能问题是出在打印程序上,但是小弟实在不知道如何DEBUG,所以发上来跟大家探讨探讨
//先把打印功能写下来
        void print(TCHAR filefullpath[MAX_PATH])

{                 UF_PLOT_job_options_t    job_options;
                 UF_PLOT_banner_options_t banner_options;
                 char      *job_name;
                 int       copies;
                 tag_t         display_part;
                 tag_t         drawing_sheet;
                 UF_PART_load_status_t error_status;


                //然后判断当前是否有打开的prt

                display_part = UF_PART_ask_display_part();
                if (display_part == NULL_TAG)
                {
                        /*return;*/
               

                //如果没有,则打开路径上的prt

            UF_PART_open(filefullpath,&display_part,&error_status);

                }
         /*  If no part is displayed, do nothing.  */

               

        /*
                Get the default job options and banner options for use in
                the "print" call for each sheet
        */
                UF_CALL( UF_PLOT_ask_default_job_options( &job_options) );
                UF_CALL( UF_PLOT_ask_default_banner_options( &banner_options ) );

                copies = 1;

                drawing_sheet = NULL_TAG;
                while ((UF_CALL(UF_OBJ_cycle_objs_in_part(display_part,
                                                                                                  UF_drawing_type,
                                                                                                  &drawing_sheet)) == ERROR_OK) &&
                           (drawing_sheet != NULL_TAG))
                {

                         /*  Supplying a drawing sheet tag causes the default job
                                name to have the sheet name appended to it
                        */
          UF_CALL( UF_PLOT_ask_default_job_name( drawing_sheet, &job_name ) );

                        /*  Print the sheet. The "Printer One" printer MUST be
                                defined in the default Printer group for your system.
                                The "<System Profile>" profile is the default SDI
                                profile. You can alter these two parameters to match
                                your installation.
                        */
                        UF_CALL( UF_PLOT_print( drawing_sheet, &job_options, job_name,
                                                                        &banner_options, "PDFCreator",
                                                                        "A4", copies ) );
          UF_free( job_name );
                }

}                       
       




作者: xichulaishi    时间: 2014-6-5 10:46
/*遍历文件夹下以.prt结尾的文件*/


BOOL IsRoot(LPCTSTR lpszPath)
{
TCHAR szRoot[4];
wsprintf(szRoot, "%c:\\", lpszPath[0]);
return (lstrcmp(szRoot, lpszPath) == 0);
}

void FindInAll(:PCTSTR lpszPath)
{

        TCHAR szFind[MAX_PATH];
        lstrcpy(szFind, lpszPath);
        if (!IsRoot(szFind))
        lstrcat(szFind, "\\");
        lstrcat(szFind, "*.prt"); // 找以prt结尾的文件
        WIN32_FIND_DATA wfd;
        HANDLE hFind = FindFirstFile(szFind, &wfd);
        if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败
        return;

        do
        {
                if (wfd.cFileName[0] == '.')
                continue; // 过滤这两个目录
                if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                        {
                        TCHAR szFile[MAX_PATH];
                        if (IsRoot(lpszPath))
                        wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
                        else
                        wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
                        FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归
                        }
                        else
                        {

                        }
                {
                TCHAR szFile[MAX_PATH];
                if (IsRoot(lpszPath))
                wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
                else
                wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
                printf("%s\n",szFile);

                // 对文件进行操作

                print(szFile);

                }
        }
        while (FindNextFile(hFind, &wfd));
        FindClose(hFind); // 关闭查找句柄

}
作者: xichulaishi    时间: 2014-6-5 10:46
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
{
               
        /* Initialize the API environment */
                if( UF_CALL(UF_initialize()) )
                {
                        /* Failed to initialize */
                        return;
                }
                TCHAR filepath[MAX_PATH];
                /*先得到prt文件所在的路径,调用上面的函数*/
                printf("Please input the path like (c:\\windows):\n");
                scanf_s("%s",filepath);
                FindInAll(filepath);
               
    /* Terminate the API environment */
    UF_CALL(UF_terminate());
}

/*****************************************************************************
**  Utilities
*****************************************************************************/

/* Unload Handler
**     This function specifies when to unload your application from Unigraphics.
**     If your application registers a callback (from a MenuScript item or a
**     User Defined Object for example), this function MUST return
**     "UF_UNLOAD_UG_TERMINATE". */
extern int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_IMMEDIATELY );
}

作者: xichulaishi    时间: 2014-6-5 10:49
用VS的F11来找问题吧,直接就是跳出来成功,实在没法看到程序的运行问题,所以发上来求DEBUG方法
作者: jimk    时间: 2014-11-13 08:37
学习一下,谢谢





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