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

如今很多工程模型会转换成3D PDF格式,这样用户可以使用免费的Adobe Reader去查看模型,减轻用户软件授权费用。3D PDF可用于工程设计、制造、数值造型、医学、空间、地理及石油气的探索,建筑工程和环境调查,也可作为CAM、CAE、PLM的数据交换文件。还可用于培训、市场、存档及工程汇报等。

那么问题来了,如何将三维模型导入PDF文件呢?Adobe提供了嵌入两种文件格式U3D(Universal 3D)和PRC(Product Representation Compact)的方式来将三维模型导入PDF中。

U3D出现的时间较早,在sourceforge上有个u3d的库:

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

可用于将三维模型转换成U3D格式。其中MeshLab就是使用了这个工具,先将三维网格模型转换成IDTF格式,再调用IDTFConverter程序将其转换成U3D格式。下载了u3d的源码看了下,使用还比较复杂,而且软件授权方式是GPL的。

PRC是出现的比U3D要晚,所以PRC支持的几何形状比U3D要多,包括支持NURBS曲线曲面,还支持复杂的组合体。在网上找了下实现PRC文件读写的源码存在于一款数学软件Asymptote中,https://sourceforge.net/projects/asymptote

发现这个库使用起来相对U3D的要简单,且支持NURBS曲线曲面。

三维模型准备好了,需要将这些模型文件嵌入到PDF中。在网上找了下有个开源库libharu还是很不错的。

综上所述,准备考虑使用PRC->3D PDF的套路来实现将OpenCASCADE中的几何模型转换成3D PDF文件。

2.Code Example

结合上述思路,下载相应的库并编译通过,只需要如下简单的代码就可以将模型嵌入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 = {, , , };
    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();

    ;
}

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

Download 3D PDF test.pdf

3.Conclusion

通过将三维模型转换成U3D或PRC格式,就可以嵌入PDF中生成3D PDF。因为Adobe Reader的免费使用,所以可以减轻用户软件授权费用。若三维软件系统可以生成3D PDF也是一个功能亮点。

本文详细说明了如何将几何模型嵌入3D PDF中,并给出了代码示例。OpenCASCADE中的NURBS曲线曲面也可以直接转换成PRC格式。虽然PRC中也有BREP体,但是正确转换的前提是需要开发人员对两者的BREP有清晰的认识,难度较大。一种简单的处理方法是将模型全部转换成网格数据,再转换成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/

OpenCASCADE Data Exchange - 3D PDF的更多相关文章

  1. Open Cascade Data Exchange STL

    Open Cascade Data Exchange STL eryar@163.com 摘要Abstract:介绍了三维数据交换格式STL的组成,以及Open Cascade中对STL的读写.并将O ...

  2. AVEVA Model Data Exchange Exports Structure Models

    AVEVA Model Data Exchange Exports Structure Modelseryar@163.com Use Model Data Exchange Addin to exp ...

  3. Open Cascade DataExchange IGES

    Open Cascade DataExchange IGES eryar@163.com 摘要Abstract:本文结合OpenCascade和Initial Graphics Exchange Sp ...

  4. A Simple OpenCASCADE Qt Demo-occQt

    A Simple OpenCASCADE Qt Demo-occQt eryar@163.com Abstract. OpenCASCADE have provided the Qt samples ...

  5. OpenNURBS to OpenCASCADE

    OpenNURBS to OpenCASCADE eryar@163.com Abstract. The OpenNURBS initiative provides CAD/CAM/CAE and c ...

  6. OpenCASCADE BRepTools

    OpenCASCADE BRepTools eryar@163.com Abstract. OpenCASCADE BRepTools provides utilities for BRep data ...

  7. Overview of OpenCascade Library

    Overview of OpenCascade Library eryar@163.com 摘要Abstract:对OpenCascade库的功能及其实现做简要介绍. 关键字Key Words:Ope ...

  8. OpenCascade简介

    OpenCascade简介   Overview of OpenCascade Library eryar@163.com 摘要Abstract:对OpenCascade库的功能及其实现做简要介绍. ...

  9. IsoAlgo3d - A PCF 3D Viewer for Desktop, Tablet and Smart phone

    IsoAlgo3d - A PCF 3D Viewer for Desktop, Tablet and Smart phone eryar@163.com Abstract. IsoAlgo3d 通过 ...

随机推荐

  1. 关于安卓工程导出带res资源文件的jar的总结

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 29.0px; font: 16.0px "Microsoft YaHei" ...

  2. ubuntu 14 谷歌拼音输入法

    帮人倒腾了下,顺便记录下: https://rivercitylabs.org/install-google-pinyin-on-ubuntu-14-04/ sudo apt-get install ...

  3. canvas实现钟表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. RGBa颜色 css3的Alpha通道支持

    CSS3中,RGBa 为颜色声明添加Alpha通道. RGB值被指定使用3个8位无符号整数(0 – 255)并分别代表红色.蓝色.和绿色.增加的一个alpha通道并不是一个颜色通道——它只是用来指定除 ...

  5. 让aspx页面也可以通过url路由进行访问

    参考文章:http://blog.csdn.net/zhanglong_longlong/article/details/8841030 这两天,在工作中需要将aspx的页面虚拟成url路径访问.比如 ...

  6. OpenJudge 2766 最大子矩阵

    1.链接: http://bailian.openjudge.cn/practice/2766 2.题目: 总Time Limit: 1000ms Memory Limit: 65536kB Desc ...

  7. java_ log4j的基本配置参数

    目标:  err级别发送邮件 ,要求美观 ,信息详细 开工: 材料: 三个jar ,版本不建议高,不能低. 方便起见,打包下载即可    http://pan.baidu.com/s/1mgmfyvY ...

  8. Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)

    例子: 定义泛型Store package javabased; public interface Store<T> { } 两个实现类StringStore,IntegerStore p ...

  9. Python系列之入门篇——HDFS

    Python系列之入门篇--HDFS 简介 HDFS (Hadoop Distributed File System) Hadoop分布式文件系统,具有高容错性,适合部署在廉价的机器上.Python ...

  10. pdf文件去掉广告,水印,背景和删除密码方法收藏

    对于学习资料中,pdf文件中的出现的频繁的广告内容真的让人看了很烦,怎么删除呢,后来发现有一款工具foxitphantom可以直接删除,具体操作是,先用该软件打开,然后选择Edit->Heade ...