博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCASCADE Data Exchange - 3D PDF
阅读量:7112 次
发布时间:2019-06-28

本文共 2931 字,大约阅读时间需要 9 分钟。

OpenCASCADE Data Exchange - 3D PDF

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的库:

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

PRC是出现的比U3D要晚,所以PRC支持的几何形状比U3D要多,包括支持NURBS曲线曲面,还支持复杂的组合体。在网上找了下实现PRC文件读写的源码存在于一款数学软件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
=
{
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如下图所示:

 

Download 3D PDF

3.Conclusion

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

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

4.References

1.

2.

3.

转载地址:http://xwzel.baihongyu.com/

你可能感兴趣的文章
夜间模式的开启与关闭,父模板的制作
查看>>
ffmpeg为视频添加时间戳 - 手动编译ffmpeg
查看>>
C# ABP 配置连接数据库&创建表
查看>>
1189:Pell数列
查看>>
求水缸深度-深信服2019春招
查看>>
用vs2008编写的控制台程序怎么改exe文件的图标?(转)
查看>>
NSDate管理日期和时间
查看>>
MySQL存储过程(转)
查看>>
hadoop 集群跑的时候用到hbasejar 文件的引用问题
查看>>
大数据性能调优之HBase的RowKey设计
查看>>
BZOJ 1121 [POI2008]激光发射器SZK
查看>>
arc082E ConvexScore
查看>>
YOGA 710-14IKB 安装Ubuntu16.04笔记
查看>>
Windows - 程序猿应该熟记的CMD常用命令
查看>>
jdbc 占位符插入null值 NullPointerException
查看>>
C#中常见的系统内置委托用法详解(抄录)
查看>>
【Linux入门学习之】Linux关机命令总结
查看>>
Linux下mail/mailx命令发送邮件
查看>>
学术诚信与职业道德的思考
查看>>
对象大小对比之Comparable与Comparator
查看>>