gpt4 book ai didi

NX二次开发:保存时导出PDF并打开

转载 作者:我是一只小鸟 更新时间:2023-03-24 22:31:15 25 4
gpt4 key购买 nike

该工程为在保存时执行开发的功能,函数入口点ufput。其他还有新建、打开、另存等都可以加入开发的操作,具体看UF_EXIT下的介绍.

用户出口是一个可选特性,允许你在NX中某些预定义的位置(或出口)自动运行Open C API程序。 如果你进入其中一个出口,NX会检查你是否定义了指向Open C API程序位置的指针。 如果定义了指针,NX将运行Open C API程序。 指针是一个环境变量.

注意:

一定要设置环境变量指向自己生成的DLL。例如:USER_FILE=E:\workspace\Infore\tcnx_project\application\tcnx_project.dll 。

                          
                              1
                          
                          
                            //
                          
                          
                             Mandatory UF Includes
                          
                          
                              2
                          
                           #include <uf.h>

                          
                              3
                          
                           #include <uf_object_types.h>

                          
                              4
                          
                           #include <uf_draw.h>

                          
                              5
                          
                           #include <uf_part.h>

                          
                              6
                          
                          
                              7
                          
                          
                            //
                          
                          
                             Internal+External Includes
                          
                          
                              8
                          
                           #include <NXOpen/Annotations.hxx>

                          
                              9
                          
                           #include <NXOpen/Assemblies_Component.hxx>

                          
                             10
                          
                           #include <NXOpen/Assemblies_ComponentAssembly.hxx>

                          
                             11
                          
                           #include <NXOpen/Body.hxx>

                          
                             12
                          
                           #include <NXOpen/BodyCollection.hxx>

                          
                             13
                          
                           #include <NXOpen/Face.hxx>

                          
                             14
                          
                           #include <NXOpen/Line.hxx>

                          
                             15
                          
                           #include <NXOpen/NXException.hxx>

                          
                             16
                          
                           #include <NXOpen/NXObject.hxx>

                          
                             17
                          
                           #include <NXOpen/Part.hxx>

                          
                             18
                          
                           #include <NXOpen/PartCollection.hxx>

                          
                             19
                          
                           #include <NXOpen/Session.hxx>

                          
                             20
                          
                          
                             21
                          
                           #include <NXOpen/PrintPDFBuilder.hxx>

                          
                             22
                          
                           #include <NXOpen/PlotManager.hxx>

                          
                             23
                          
                           #include <NXOpen/Drawings_DrawingSheet.hxx>

                          
                             24
                          
                           #include <NXOpen/NXObjectManager.hxx>

                          
                             25
                          
                          
                             26
                          
                          
                            //
                          
                          
                             Std C++ Includes
                          
                          
                             27
                          
                           #include <iostream>

                          
                             28
                          
                           #include <sstream>

                          
                             29
                          
                           #include <vector>

                          
                             30
                          
                           #include <
                          
                            string
                          
                          >

                          
                             31
                          
                           #include <algorithm>

                          
                             32
                          
                           #include <tchar.h>

                          
                             33
                          
                           #include <atlconv.h>

                          
                             34
                          
                           #include <shellapi.h>

                          
                             35
                          
                          
                             36
                          
                           #include <windows.h>

                          
                             37
                          
                          
                            #undef
                          
                           CreateDialog

                          
                             38
                          
                          
                            #pragma
                          
                           comment(lib,"shell32.lib")

                          
                             39
                          
                          
                             40
                          
                          
                            using
                          
                          
                            namespace
                          
                          
                             NXOpen;

                          
                          
                             41
                          
                          
                            using
                          
                           std::
                          
                            string
                          
                          
                            ;

                          
                          
                             42
                          
                          
                            using
                          
                          
                             std::exception;

                          
                          
                             43
                          
                          
                            using
                          
                          
                             std::stringstream;

                          
                          
                             44
                          
                          
                            using
                          
                          
                             std::endl;

                          
                          
                             45
                          
                          
                            using
                          
                          
                             std::cout;

                          
                          
                             46
                          
                          
                            using
                          
                          
                             std::cerr;

                          
                          
                             47
                          
                          
                             48
                          
                          
                             49
                          
                          
                            //
                          
                          
                            ------------------------------------------------------------------------------

                          
                          
                             50
                          
                          
                            //
                          
                          
                             Unload Handler

                          
                          
                             51
                          
                          
                            //
                          
                          
                            ------------------------------------------------------------------------------
                          
                          
                             52
                          
                          
                            extern
                          
                          
                            "
                          
                          
                            C
                          
                          
                            "
                          
                           DllExport 
                          
                            int
                          
                          
                             ufusr_ask_unload()

                          
                          
                             53
                          
                          
                            {

                          
                          
                             54
                          
                          
                            return
                          
                           (
                          
                            int
                          
                          )NXOpen::Session::LibraryUnloadOptionImmediately;
                          
                            //
                          
                          
                             调试用

                          
                          
                             55
                          
                          
                            //
                          
                          
                            return (int)NXOpen::Session::LibraryUnloadOptionAtTermination;
                          
                          
                            //
                          
                          
                             程序发布用

                          
                          
                             56
                          
                          
                            //
                          
                          
                            return (int)NXOpen::Session::LibraryUnloadOptionExplicitly;
                          
                          
                             57
                          
                          
                            }

                          
                          
                             58
                          
                          
                             59
                          
                          
                            int
                          
                           exportDwg2PDF(
                          
                            double
                          
                           &xDimension, 
                          
                            double
                          
                           &yDimension, std::
                          
                            string
                          
                           &waterRemark, tag_t &sheetTAG, std::
                          
                            string
                          
                           &exportPath, 
                          
                            bool
                          
                          
                             appendStatus)

                          
                          
                             60
                          
                          
                            {

                          
                          
                             61
                          
                          
                            try
                          
                          
                            {

                          
                          
                             62
                          
                          
                            if
                          
                           (xDimension < 
                          
                            200
                          
                           || yDimension < 
                          
                            200
                          
                           || sheetTAG == NULL_TAG || exportPath.empty() == 
                          
                            true
                          
                          
                            ) 

                          
                          
                             63
                          
                          
                            return
                          
                           -
                          
                            1
                          
                          
                            ;

                          
                          
                             64
                          
                          
                             65
                          
                                   NXOpen::Session *theSession =
                          
                             NXOpen::Session::GetSession();

                          
                          
                             66
                          
                                   NXOpen::Part *workPart(theSession->Parts()->
                          
                            Work());

                          
                          
                             67
                          
                                   NXOpen::Part *displayPart(theSession->Parts()->
                          
                            Display());

                          
                          
                             68
                          
                                   NXOpen::PrintPDFBuilder *
                          
                            printPDFBuilder1;

                          
                          
                             69
                          
                                   printPDFBuilder1 = workPart->PlotManager()->
                          
                            CreatePrintPdfbuilder();

                          
                          
                             70
                          
                          
                             71
                          
                                   printPDFBuilder1->SetScale(
                          
                            1.0
                          
                          
                            );

                          
                          
                             72
                          
                                   printPDFBuilder1->
                          
                            SetSize(NXOpen::PrintPDFBuilder::SizeOptionScaleFactor);

                          
                          
                             73
                          
                                   printPDFBuilder1->
                          
                            SetOutputText(NXOpen::PrintPDFBuilder::OutputTextOptionPolylines);

                          
                          
                             74
                          
                                   printPDFBuilder1->
                          
                            SetXDimension(xDimension);

                          
                          
                             75
                          
                                   printPDFBuilder1->
                          
                            SetYDimension(yDimension);

                          
                          
                             76
                          
                                   printPDFBuilder1->
                          
                            SetColors(NXOpen::PrintPDFBuilder::ColorBlackOnWhite);

                          
                          
                             77
                          
                                   printPDFBuilder1->
                          
                            SetWidths(NXOpen::PrintPDFBuilder::WidthCustomThreeWidths);

                          
                          
                             78
                          
                                   printPDFBuilder1->SetRasterImages(
                          
                            true
                          
                          
                            );

                          
                          
                             79
                          
                                   printPDFBuilder1->
                          
                            SetImageResolution(NXOpen::PrintPDFBuilder::ImageResolutionOptionHigh);

                          
                          
                             80
                          
                                   printPDFBuilder1->SetAddWatermark(
                          
                            true
                          
                          
                            );

                          
                          
                             81
                          
                                   printPDFBuilder1->
                          
                            SetWatermark(waterRemark.c_str());

                          
                          
                             82
                          
                                   printPDFBuilder1->
                          
                            SetAppend(appendStatus);

                          
                          
                             83
                          
                          
                             84
                          
                                   std::vector<NXOpen::NXObject *> sheets1(
                          
                            1
                          
                          
                            );

                          
                          
                             85
                          
                                   NXOpen::Drawings::DrawingSheet *drawingSheet1(dynamic_cast<NXOpen::Drawings::DrawingSheet *>
                          
                            (NXOpen::NXObjectManager::Get(sheetTAG)));

                          
                          
                             86
                          
                                   sheets1[
                          
                            0
                          
                          ] =
                          
                             drawingSheet1;

                          
                          
                             87
                          
                                   printPDFBuilder1->SourceBuilder()->
                          
                            SetSheets(sheets1);

                          
                          
                             88
                          
                                   printPDFBuilder1->
                          
                            SetFilename(exportPath);

                          
                          
                             89
                          
                          
                             90
                          
                                   NXOpen::NXObject *
                          
                            nXObject1;

                          
                          
                             91
                          
                                   nXObject1 = printPDFBuilder1->
                          
                            Commit();

                          
                          
                             92
                          
                                   printPDFBuilder1->
                          
                            Destroy();

                          
                          
                             93
                          
                          
                            return
                          
                          
                            0
                          
                          
                            ;

                          
                          
                             94
                          
                          
                                }

                          
                          
                             95
                          
                          
                            catch
                          
                           (
                          
                            const
                          
                           exception&
                          
                             e2){

                          
                          
                             96
                          
                                   UI::GetUI()->NXMessageBox()->Show(
                          
                            "
                          
                          
                            Exception
                          
                          
                            "
                          
                          
                            , NXOpen::NXMessageBox::DialogTypeError, e2.what());

                          
                          
                             97
                          
                          
                            throw
                          
                          
                            ;

                          
                          
                             98
                          
                          
                                }

                          
                          
                             99
                          
                          
                            }

                          
                          
                            100
                          
                          
                            101
                          
                          
                            int
                          
                          
                             getSheetInfos()

                          
                          
                            102
                          
                          
                            {

                          
                          
                            103
                          
                          
                            //
                          
                          
                             获取显示部件及图纸信息
                          
                          
                            104
                          
                          
                            int
                          
                           _errCode = 
                          
                            0
                          
                          
                            ;

                          
                          
                            105
                          
                               tag_t dispTAG =
                          
                             UF_PART_ask_display_part();

                          
                          
                            106
                          
                          
                            char
                          
                           part_fspec[MAX_FSPEC_BUFSIZE] = { 
                          
                            0
                          
                          
                             };

                          
                          
                            107
                          
                          
                            if
                          
                           (_errCode = UF_PART_ask_part_name(dispTAG, part_fspec) != 
                          
                            0
                          
                          ) 
                          
                            return
                          
                          
                             _errCode;

                          
                          
                            108
                          
                          
                            109
                          
                               std::
                          
                            string
                          
                          
                             strPartName(part_fspec);

                          
                          
                            110
                          
                          
                                transform(strPartName.begin(), strPartName.end(), strPartName.begin(), ::tolower);

                          
                          
                            111
                          
                          
                            if
                          
                           (strPartName.find(
                          
                            "
                          
                          
                            dwg
                          
                          
                            "
                          
                          ) == 
                          
                            string
                          
                          ::npos) 
                          
                            return
                          
                           -
                          
                            1
                          
                          
                            ;

                          
                          
                            112
                          
                          
                            113
                          
                          
                            int
                          
                           num_draws = 
                          
                            0
                          
                          
                            ;

                          
                          
                            114
                          
                               tag_t *drawTAGs =
                          
                             nullptr;

                          
                          
                            115
                          
                          
                            if
                          
                           (_errCode = UF_DRAW_ask_drawings(&num_draws, &drawTAGs) != 
                          
                            0
                          
                          
                            )

                          
                          
                            116
                          
                          
                            return
                          
                          
                             _errCode;

                          
                          
                            117
                          
                          
                            118
                          
                          
                            string
                          
                           export_path = strPartName.substr(
                          
                            0
                          
                          , strPartName.find_last_of(
                          
                            "
                          
                          
                            .
                          
                          
                            "
                          
                          
                            ));

                          
                          
                            119
                          
                          
                            for
                          
                           (
                          
                            int
                          
                           idx = 
                          
                            0
                          
                          ; idx < num_draws; idx++
                          
                            ){

                          
                          
                            120
                          
                          
                            //
                          
                          
                             导出PDF
                          
                          
                            121
                          
                          
                                    UF_DRAW_info_t drawInfos;

                          
                          
                            122
                          
                                   _errCode = UF_DRAW_ask_drawing_info(drawTAGs[
                          
                            0
                          
                          ], &
                          
                            drawInfos);

                          
                          
                            123
                          
                          
                            double
                          
                           xDimension = drawInfos.size.custom_size[
                          
                            0
                          
                          
                            ];

                          
                          
                            124
                          
                          
                            double
                          
                           yDimension = drawInfos.size.custom_size[
                          
                            1
                          
                          
                            ];

                          
                          
                            125
                          
                                   _errCode = exportDwg2PDF(xDimension, yDimension, 
                          
                            string
                          
                          (
                          
                            "
                          
                          
                            huangym1\r\n2023-03-25
                          
                          
                            "
                          
                          ), drawTAGs[idx], export_path + 
                          
                            "
                          
                          
                            .pdf
                          
                          
                            "
                          
                          , 
                          
                            false
                          
                          
                            );

                          
                          
                            126
                          
                          
                            string
                          
                           tempStr(export_path + 
                          
                            "
                          
                          
                            .pdf
                          
                          
                            "
                          
                          
                            );

                          
                          
                            127
                          
                          
                            128
                          
                          
                            //
                          
                          
                             打开PDF
                          
                          
                            129
                          
                          
                                    USES_CONVERSION;

                          
                          
                            130
                          
                          
                            const
                          
                           WCHAR * cLineChar =
                          
                             A2W(tempStr.c_str());

                          
                          
                            131
                          
                          
                            132
                          
                          
                                    SHELLEXECUTEINFO sei;

                          
                          
                            133
                          
                                   ZeroMemory(&sei, 
                          
                            sizeof
                          
                          (SHELLEXECUTEINFO));
                          
                            //
                          
                          
                            使用前最好清空
                          
                          
                            134
                          
                                   sei.cbSize = 
                          
                            sizeof
                          
                          (SHELLEXECUTEINFO);
                          
                            //
                          
                          
                            管理员权限执行cmd,最基本的使用与 ShellExecute 类似
                          
                          
                            135
                          
                                   sei.lpFile =
                          
                             cLineChar;

                          
                          
                            136
                          
                                   sei.nShow =
                          
                             SW_SHOW;

                          
                          
                            137
                          
                                   sei.lpVerb = _T(
                          
                            "
                          
                          
                            open
                          
                          
                            "
                          
                          
                            );

                          
                          
                            138
                          
                                   BOOL bResult = ShellExecuteEx(&
                          
                            sei);

                          
                          
                            139
                          
                          
                            if
                          
                           (bResult)
                          
                            //
                          
                          
                            执行成功
                          
                          
                            140
                          
                          
                                    {

                          
                          
                            141
                          
                          
                            if
                          
                           (sei.hProcess)
                          
                            //
                          
                          
                            指定 SEE_MASK_NOCLOSEPROCESS 并其成功执行,则 hProcess 将会返回执行成功的进程句柄
                          
                          
                            142
                          
                                           WaitForSingleObject(sei.hProcess, INFINITE);
                          
                            //
                          
                          
                            等待执行完毕
                          
                          
                            143
                          
                          
                                    }

                          
                          
                            144
                          
                          
                                }

                          
                          
                            145
                          
                          
                            if
                          
                          
                             (drawTAGs){

                          
                          
                            146
                          
                          
                                    UF_free(drawTAGs);

                          
                          
                            147
                          
                                   drawTAGs =
                          
                             nullptr;

                          
                          
                            148
                          
                          
                                }

                          
                          
                            149
                          
                          
                            return
                          
                          
                             _errCode;

                          
                          
                            150
                          
                          
                            }

                          
                          
                            151
                          
                          
                            152
                          
                          
                            //
                          
                          
                            ========================

                          
                          
                            153
                          
                          
                            //
                          
                          
                             保存操作入口点函数

                          
                          
                            154
                          
                          
                            //
                          
                          
                            ========================
                          
                          
                            155
                          
                          
                            extern
                          
                          
                            "
                          
                          
                            C
                          
                          
                            "
                          
                           DllExport 
                          
                            void
                          
                          
                             ufput()

                          
                          
                            156
                          
                          
                            {

                          
                          
                            157
                          
                          
                            try
                          
                          
                            {

                          
                          
                            158
                          
                          
                            if
                          
                           (UF_initialize()) 
                          
                            return
                          
                          
                            ;

                          
                          
                            159
                          
                          
                            160
                          
                          
                                    getSheetInfos();

                          
                          
                            161
                          
                          
                            162
                          
                          
                                    UF_terminate();

                          
                          
                            163
                          
                          
                                }

                          
                          
                            164
                          
                          
                            catch
                          
                           (
                          
                            const
                          
                           NXException&
                          
                             e1)

                          
                          
                            165
                          
                          
                                {

                          
                          
                            166
                          
                                   UI::GetUI()->NXMessageBox()->Show(
                          
                            "
                          
                          
                            NXException
                          
                          
                            "
                          
                          
                            , NXOpen::NXMessageBox::DialogTypeError, e1.Message());

                          
                          
                            167
                          
                          
                                }

                          
                          
                            168
                          
                          
                            catch
                          
                           (
                          
                            const
                          
                           exception&
                          
                             e2)

                          
                          
                            169
                          
                          
                                {

                          
                          
                            170
                          
                                   UI::GetUI()->NXMessageBox()->Show(
                          
                            "
                          
                          
                            Exception
                          
                          
                            "
                          
                          
                            , NXOpen::NXMessageBox::DialogTypeError, e2.what());

                          
                          
                            171
                          
                          
                                }

                          
                          
                            172
                          
                          
                            catch
                          
                          
                             (...)

                          
                          
                            173
                          
                          
                                {

                          
                          
                            174
                          
                                   UI::GetUI()->NXMessageBox()->Show(
                          
                            "
                          
                          
                            Exception
                          
                          
                            "
                          
                          , NXOpen::NXMessageBox::DialogTypeError, 
                          
                            "
                          
                          
                            Unknown Exception.
                          
                          
                            "
                          
                          
                            );

                          
                          
                            175
                          
                          
                                }

                          
                          
                            176
                          
                           }
                        

  。

GIF动图展示:

  。

最后此篇关于NX二次开发:保存时导出PDF并打开的文章就讲到这里了,如果你想了解更多关于NX二次开发:保存时导出PDF并打开的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com