• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            eryar

            PipeCAD - Plant Piping Design Software.
            RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
            posts - 603, comments - 590, trackbacks - 0, articles - 0

            OpenCASCADE Data Exchange - 3D PDF

            Posted on 2016-03-24 23:16 eryar 閱讀(3854) 評論(3)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            OpenCASCADE Data Exchange - 3D PDF

            eryar@163.com

            Abstract. Today most 3D engineering model data are save to 3D PDF files. Universal 3D(U3D) along side Product Representation Compact(PRC), U3D is the historical foundation used to embed 3D interactive data and models into a PDF file. But PRC is now the preferred and most feature-rich method to embed 3D data into a PDF file. So the paper is focus on to translate OpenCASCADE geometry data to 3D PDF by embedding PRC file.

            Key Words. PDF 3D, OpenCASCADE, U3D, PRC, libharu


            1.Introduction

            如今很多工程模型會轉(zhuǎn)換成3D PDF格式,這樣用戶可以使用免費(fèi)的Adobe Reader去查看模型,減輕用戶軟件授權(quán)費(fèi)用。3D PDF可用于工程設(shè)計(jì)、制造、數(shù)值造型、醫(yī)學(xué)、空間、地理及石油氣的探索,建筑工程和環(huán)境調(diào)查,也可作為CAM、CAE、PLM的數(shù)據(jù)交換文件。還可用于培訓(xùn)、市場、存檔及工程匯報(bào)等。

            那么問題來了,如何將三維模型導(dǎo)入PDF文件呢?Adobe提供了嵌入兩種文件格式U3D(Universal 3D)和PRC(Product Representation Compact)的方式來將三維模型導(dǎo)入PDF中。

            U3D出現(xiàn)的時(shí)間較早,在sourceforge上有個(gè)u3d的庫:

            https://sourceforge.net/projects/u3d/

            可用于將三維模型轉(zhuǎn)換成U3D格式。其中MeshLab就是使用了這個(gè)工具,先將三維網(wǎng)格模型轉(zhuǎn)換成IDTF格式,再調(diào)用IDTFConverter程序?qū)⑵滢D(zhuǎn)換成U3D格式。下載了u3d的源碼看了下,使用還比較復(fù)雜,而且軟件授權(quán)方式是GPL的。

            PRC是出現(xiàn)的比U3D要晚,所以PRC支持的幾何形狀比U3D要多,包括支持NURBS曲線曲面,還支持復(fù)雜的組合體。在網(wǎng)上找了下實(shí)現(xiàn)PRC文件讀寫的源碼存在于一款數(shù)學(xué)軟件Asymptote中,https://sourceforge.net/projects/asymptote

            發(fā)現(xiàn)這個(gè)庫使用起來相對U3D的要簡單,且支持NURBS曲線曲面。

            三維模型準(zhǔn)備好了,需要將這些模型文件嵌入到PDF中。在網(wǎng)上找了下有個(gè)開源庫libharu還是很不錯(cuò)的。

            綜上所述,準(zhǔn)備考慮使用PRC->3D PDF的套路來實(shí)現(xiàn)將OpenCASCADE中的幾何模型轉(zhuǎn)換成3D PDF文件。

            wps_clip_image-22938

            2.Code Example

            結(jié)合上述思路,下載相應(yīng)的庫并編譯通過,只需要如下簡單的代碼就可以將模型嵌入PDF中了,代碼如下:

             

            /*
            *    Copyright (c) 2016 Shing Liu All Rights Reserved.
            *
            *           File : main.cpp
            *         Author : Shing Liu(eryar@163.com)
            *           Date : 2016-03-24 21:00
            *        Version : OpenCASCADE6.9.0
            *
            *    Description : test embed 3d model into 3d pdf.
            */

            #include
            "oPrcFile.h"

            #include
            "hpdf.h"

            #pragma comment(lib,
            "libprc.lib")
            #pragma comment(lib,
            "libhpdfd.lib")

            void testPrc(void)
            {
                prc::oPRCFile aPrcFile(
            "test.prc");

                prc::PRCmaterial materialGreen(
                    prc::RGBAColour(
            0.0,0.18,0.0),
                    prc::RGBAColour(
            0.0,0.878431,0.0),
                    prc::RGBAColour(
            0.0,0.32,0.0),
                    prc::RGBAColour(
            0.0,0.072,0.0),
                   
            1.0,0.1);

               
            // Sphere
                aPrcFile.begingroup("Sphere");
                aPrcFile.addSphere(
            1.0, materialGreen);
                aPrcFile.endgroup();

                aPrcFile.addCylinder(
            0.8, 6.0, materialGreen);

                aPrcFile.finish();

               
            // embed prc file to pdf.
                HPDF_Doc aPdfDoc = HPDF_New (NULL, NULL);
               
            if (!aPdfDoc)
                {
                    printf(
            "error: cannot create PdfDoc object");
                   
            return;
                }

                HPDF_Rect aRect
            = {0, 0, 800, 800};
                HPDF_Page aPage
            = HPDF_AddPage(aPdfDoc);
                HPDF_Page_SetWidth(aPage, aRect.right);
                HPDF_Page_SetHeight(aPage,aRect.top);

                HPDF_U3D aU3D
            = HPDF_LoadU3DFromFile(aPdfDoc, "test.prc");
                HPDF_Annotation aAnnot
            = HPDF_Page_Create3DAnnot(aPage, aRect, HPDF_TRUE, HPDF_FALSE, aU3D, NULL);

                HPDF_SaveToFile(aPdfDoc,
            "test.pdf");

                HPDF_Free(aPdfDoc);
            }

            int main(int argc, char* argv[])
            {
                testPrc();

               
            return 0;
            }

            生成的test.pdf如下圖所示:

            wps_clip_image-20731 

            Download 3D PDF test.pdf


            3.Conclusion

            通過將三維模型轉(zhuǎn)換成U3D或PRC格式,就可以嵌入PDF中生成3D PDF。因?yàn)锳dobe Reader的免費(fèi)使用,所以可以減輕用戶軟件授權(quán)費(fèi)用。若三維軟件系統(tǒng)可以生成3D PDF也是一個(gè)功能亮點(diǎn)。

            本文詳細(xì)說明了如何將幾何模型嵌入3D PDF中,并給出了代碼示例。OpenCASCADE中的NURBS曲線曲面也可以直接轉(zhuǎn)換成PRC格式。雖然PRC中也有BREP體,但是正確轉(zhuǎn)換的前提是需要開發(fā)人員對兩者的BREP有清晰的認(rèn)識,難度較大。一種簡單的處理方法是將模型全部轉(zhuǎn)換成網(wǎng)格數(shù)據(jù),再轉(zhuǎn)換成PRC。

            4.References

            1. http://www.pdf3d.com/understanding-how-pdfe-u3d-and-prc-are-related-to-3d-pdf/

            2. http://www.pdf3d.com/about-prc/

            3. http://www.pdf3d.com/u3d/

            Feedback

            # re: OpenCASCADE Data Exchange - 3D PDF  回復(fù)  更多評論   

            2016-04-11 21:17 by zhaiht
            高手:Opencascade有大量的內(nèi)存泄露怎么處理

            # re: OpenCASCADE Data Exchange - 3D PDF  回復(fù)  更多評論   

            2016-04-11 21:18 by eryar
            @zhaiht
            這要自己debug處理了

            # re: OpenCASCADE Data Exchange - 3D PDF  回復(fù)  更多評論   

            2016-04-12 08:51 by zhaiht
            高手好,發(fā)現(xiàn)下面這兩句造成很多泄露,但是好像沒辦法消除,如何處理
            IMPLEMENT_STANDARD_HANDLE
            IMPLEMENT_STANDARD_RTTIEXT
            国产成人精品久久亚洲| 国产精品久久久久影院嫩草| 国产午夜福利精品久久2021| 一本色道久久综合狠狠躁篇| 精品国产乱码久久久久久浪潮| 国产精品久久国产精品99盘| 久久久久高潮毛片免费全部播放| 亚洲av日韩精品久久久久久a | 怡红院日本一道日本久久 | 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲伊人久久综合中文成人网| 99久久精品无码一区二区毛片| www.久久99| 久久成人国产精品二三区| 国产美女久久久| 成人a毛片久久免费播放| 久久99久久成人免费播放| 久久精品国产WWW456C0M| 久久人人爽人人爽人人片AV麻豆 | 中文字幕精品久久| 思思久久99热只有频精品66| 日产精品久久久久久久| 思思久久好好热精品国产| 久久精品国产99国产精品导航| 亚洲精品乱码久久久久久蜜桃图片| 色天使久久综合网天天| 色欲久久久天天天综合网| 人妻少妇久久中文字幕一区二区| 99久久人妻无码精品系列蜜桃| 久久精品国产亚洲一区二区| 久久久综合香蕉尹人综合网| 一本色道久久88综合日韩精品 | 久久亚洲av无码精品浪潮| 久久精品国产99国产精品导航 | 久久午夜伦鲁片免费无码| 国内精品久久久久久久涩爱| 亚洲午夜无码久久久久小说| 久久精品国产精品青草app| 久久香综合精品久久伊人| 好属妞这里只有精品久久| 99久久综合国产精品免费|