介绍

JT是西门子公司推出的PLM通用三维格式,设计为一个开放、高效率的、紧凑,持久性存储的产品数据格式,用于产品可视化、协作和CAD数据共享。JT文件格式包括多方面的数据,以及对曲面边的精准表示,产品和制造业的相关信息,元数据信息,这些信息都可以文件系统导出可以被产品数据管理系统(PDM)导入到软件里。它已被定为ISO标准(IS 14306-1), 能在PLM整个全生命周期中使用。更多信息,请访问https://www.plm.automation.siemens.com/en/products/open/jtopen/index.shtml

JT格式文件主要存储模型的可视化网格,并采用各种技术对网格进行压缩;但也支持存储精确几何数据BREP,或者存储与模型匹配的Parasolid格式内容(这样通用性更好),存入同一个文件。

其版本最开始或仅为内部使用,在 JT File Format 8.0 和8.1时有广泛使用(当前似乎已找不到比8.0更前的格式文件)。从版本8.1开始,可以在网上找到相应的格式说明文件。ISO14306-2012基于西门子JT9.5版本,最新发布的有JT10.0版本。

jt文件基本组织结构

文件的基本结构,如下图:

  • Data Segment 采用 GUID 来做标识,可以支持部分加载文件,不同类型的数据存储为不同的 Segment
  • LSG Segment 包含一系列对象(Elements)形成一种有向无环的图示结构。对应表述模型的可视化数据与属性,并按层次等级表述组件之间的关联。
  • Shape LOD Segment 对应LOD层次划分的几何模型定义数据,比如顶点,多边形,向量等。这部分会采用一些压缩算法对数据进行压缩。
  • JT B-Rep Segment 为jt格式自定义的B-Rep存储,比较少见到JT B-Rep段的存储。
  • XT B-Rep Segment 为Parasolid的B-Rep存储,对应精确几何数据,由于x_t更常用,所以通用性更好。
  • PMI Data Segment, Wireframe Segment, 等,这样可以保持和MCAD数据源的数据同步,这些数据也是以延迟加载特性存在的

jt格式内容解析,难点在于那些压缩算法的处理上,其它的或者是zlib,或者是lzma通用性压缩,处理上应该不是难点。

网格压缩

3D网格数据一般分为两部分,一部分为拓扑(哪些顶点组成三角形/多边形);另一部分为几何(顶点数据)。

Google的draco库介绍

谷歌开源3D数据压缩算法 Draco 在线看片再也不用缓冲了?,相比通用压缩算法,针对3D数据的特点而开发的压缩可以有更大比率的压缩,这一领域现在也已经被研究二三十年了。

draco 支持输入点云与网格,分别为ply,obj输入格式,压缩后变为draco自身的格式,可解压输出为ply,obj。在拓扑的压缩上,draco里边有一个非常经典 EdgeBreaker 编码过程,(draco还支持设置压缩程度,当最高为10时,似乎变换成为一种序列模式,这个是什么样的原理不大清楚),EdgeBreaker基于区域增长原理遍历网格,英文资料可以在https://www.cc.gatech.edu/~jarek/edgebreaker/内找到,此外这方面的国产论文也是满天飞的,资料很好找;在几何的压缩上,没有细看draco的处理模式,可能采用了有损的压缩方式。点云的特点是只有几何而没有拓扑,所以draco可以省略掉拓扑方面的处理。

Simens的jt

jt文件还支持装配、部件的组织结构,这是ply,obj,cml,...等等一系列文件所不具备的。jt8.0版本的没有对拓扑的专门处理,而9.0版开始采用了一种对偶网格(中文表述或不准确,英文名称为Dual Vertex-Facet Mesh,示范代码类名为DualVFMesh)的方法进行压缩,对偶网格方面的国产论文很少,只找到2~3篇提高对偶网格的,自身并不介绍该方法,相比EdgeBreaker,对偶网格除支持三角形网格之外,还同时支持四边形,五边形等多边的模式,搞不大清楚为什么对偶网格方面的论文会比较少,不过如果仅依靠论文,掌握这些算法估计很难。在其他方面,jt还采用位长度编码,算术编码,8.0版还有一个Huffman编码,此外在位长度压缩上,9.0版与8.0版有所不同。


Dual Vertex-Facet Mesh 大体上是这样的,比如一个矩形体,划分三角网格之后,一般是8个顶点,12个三角形;反过来,把三角形当成顶点,顶点当成面,示例图示如上,将这样表述后得到的东东压缩后存储。

没有去比较draco和jt的压缩能力,如前所述,二者所针对的行业与需求是有所差别的。

我认为draco格式相比jt,最大的缺点是不能表述装配组件,这样与CAD模型文件比较不能一一对应。

支持解析jt的库

  • 西门子自己的 JT Open Toolkit,提供60天试用版本,支持公司或者个人申请,价格不知道。
  • OCC提供的TKJT 提供的开源版本是2009年的,很久没有更新,最近发现opencascade-7.2.0里将TKJT作为高级库提供,支持jt文件读写,但是需要money方可得到。

可解析 jt格式文件 的osg插件

在文末提供一个我自己写的支持解析jt文件的osg插件,基于OpenSceneGraph 3.6.3开发,使用vs2017编译,不过还比较简陋,jt8.1版的支持度相对好一些,9.0~9.5版还缺少Chopper解码,测试也还不够,大批9.0以上的文件估计无法支持,当前主要特性如下:

  • 仅显示解析网格数据,未应用颜色
  • 尚不支持多线程,延迟加载网格数据
  • 代码架构与TKJT不同,理论上可以支持jt格式的写入,TKJT仅考虑显示jt
  • 在解码编码方面为规避TKJT的版权约束,采用jt iso文件所提供的代码为蓝本改进,这个过程有点蛋疼,不过可以不用理会TKJT开源许可证,理论上还可以做到支持编码压缩。

当前仅提供Debug版的插件,还只算是Demo级别,之所以现在就发出来,是因为准备暂时中止这一方面的探索,想对前面这好几个月在这方面的花费时间与精力做一个备份,以后再视情况与机会改进。

插件 基于OpenSceneGraph 3.6.3 VS2017编译

本插件已更新,具体见后边的文章
osgviewer_with_jt

使用方法:osgviewer butterflyvalve.jt

jt8版本 butterflyvalve.jt 图示

jt格式文件与3D数据压缩的更多相关文章

  1. jt格式文件与网格压缩

    jt格式文件与网格压缩 介绍 jt是一种3D数据格式,主要用于工业,产品可视化,数据交换,并且西门子在2012推动jt成为ISO国际标准.在文件尺寸方面,采用了不少专门的压缩方法,比较轻量化. jt文 ...

  2. jt格式文件读取,osg显示插件更新

    osgdb_jt 最近还是更新了一下 osgdb_jt 插件.解码jt格式核心库jt_toolkit,通过静态链接到Plugin jt产生osgdb_jt插件,使得osg可以可视化jt格式文件. 用法 ...

  3. BIM特点及格式文件说明

    BIM行业是建筑与IT结合而形成的一个新兴行业,既然能说是行业,说明它包含的内容非常丰富,懂一点和完全懂是两码事,就好像一滴水和一片大海的范围一样.现在国内有很多高校开设了BIM专业,并对口招收了学生 ...

  4. centos7 tar.xz格式文件的解压方法

    现在很多找到的软件都是tar.xz的格式的,xz 是一个使用 LZMA压缩算法的无损数据压缩文件格式. 和gzip与bzip2一样,同样支持多文件压缩,但是约定不能将多于一个的目标文件压缩进同一个档案 ...

  5. SpringBatch Sample (五)(复合格式文件的读、多文件的写)

    前面关于Spring Batch的文章,讲述了SpringBatch对CSV文件的读写操作.对XML文件的操作,以及对固定长格式文件的操作.这些事例,同一个Reader读取的都是相同格式的数据,最终写 ...

  6. SpringBatch Sample (四)(固定长格式文件读写)

    前篇关于Spring Batch的文章,讲述了Spring Batch 对XML文件的读写操作. 本文将通过一个完整的实例,与大家一起讨论运用Spring Batch对固定长格式文件的读写操作.实例延 ...

  7. tar.xz格式文件的解压方法(转载)

    转自:http://bbs.chinaunix.net/thread-3610738-1-1.html 现在很多找到的软件都是tar.xz的格式的,xz 是一个使用 LZMA压缩算法的无损数据压缩文件 ...

  8. [转]Linux下 tar.xz格式文件的解压方法

    现在很多找到的软件都是tar.xz的格式的,xz 是一个使用 LZMA压缩算法的无损数据压缩文件格式. 和gzip与bzip2一样,同样支持多文件压缩,但是约定不能将多于一个的目标文件压缩进同一个档案 ...

  9. 【NLP】Tika 文本预处理:抽取各种格式文件内容

    Tika常见格式文件抽取内容并做预处理 作者 白宁超 2016年3月30日18:57:08 摘要:本文主要针对自然语言处理(NLP)过程中,重要基础部分抽取文本内容的预处理.首先我们要意识到预处理的重 ...

随机推荐

  1. IT兄弟连 HTML5教程 CSS3属性特效 渐变3

    4  径向渐变 CSS3径向渐变是圆形或椭圆形渐变.颜色不再沿着一条直线轴变化,而是从一个起点朝所有方向混合.但相对线性渐变要比径向渐变复杂的多. 径向渐变的格式如下: radial-gradient ...

  2. 避免网络爬虫IP被封的策略

    背景 这两天一直在搞Java网络爬虫作为Java课程设计,目标是爬取豆瓣电影top250的影评,之后可能还需要进行情感分析,当然这就不是爬虫的内容了.我的爬虫程序在一开始只是一个页面一个页面的爬取信息 ...

  3. 为什么delete后磁盘空间没有释放而truncate会释放?

    背景 因项目需求,需要清理一批旧数据,腾出空间给新数据,让同事负责这件事.料想会很顺利,但很快找到我,并告知在postgresql中把一张大的数据表删除掉了,查询表的size并没有改变. 我震惊了,问 ...

  4. C#使用Linq to csv读取.csv文件数据2_处理含有非列名数据的方法(说明信息等)

    第一篇博客为:https://www.cnblogs.com/lxhbky/p/11884474.html 本文主要是为了解决上面博客遗留的一个含有不规范数据的一种方法,目前暂时没有从包里发现可以从第 ...

  5. 设计模式之单例模式(Java)

    单例模式 问题 多线程操作同一对象保证对象的一致性 解决思路 只有一次实例化过程,产生一个实例化对象,并提供返回该对象的方法. 单例模式的分类 1 饿汉式 在加载类的时候就产生实例对象 public ...

  6. Python3 中的Number

    Python3 支持 int.float.bool.complex(复数). 在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long. 像大多数语言一样,数 ...

  7. 以太网驱动的流程浅析(四)-以太网驱动probe流程【原创】

    以太网驱动的流程浅析(四)-以太网驱动probe流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<Lin ...

  8. sublime相关操作

    装插件 1,安装过Package Control ctrl + shift + p 输入install package 选择 Package Control: Install Package 搜索自己 ...

  9. cordova+vue混合式开发App

    应要求第一次使用cordova打包了一下vue写的app项目,期间遇到了不少问题,整理一下流程并记录一下常见问题吧.        cordova打包项目需要的环境配置啥的就不具体讲啦,百度一下很多教 ...

  10. C语言程序设计100例之(24):数制转换

    例24   数制转换 题目描述 请你编一程序实现两种不同进制之间的数据转换. 输入格式 共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用 ...