介绍

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. Fibonacci数Python的四种解法

    1: # 计算Fibonacci数: # Naive版本,时间效率O(1.618^n) # 记忆化版本(增加line8.10.13),时间效率O(n) # 注意:当n超过1000,可能超过系统允许的最 ...

  2. Pick of the Week'19 | 图数据库 Nebula 第 47 周看点-- insert 的二三事

    每周五 Nebula 为你播报每周看点,每周看点由本周大事件.用户问答.Nebula 产品动态和推荐阅读构成. 今天是 2019 年第 47 个工作周的周五,来和 Nebula 看看本周有什么图数据库 ...

  3. Skulpt在线模拟运行Python工具

    1. Skulpt是一个完全依靠浏览器端模拟实现Python运行的工具 2. 不需要预处理.插件或服务器端支持,只需编写python并重新载入即可. 3. 由于代码完全是在浏览器中运行的,所以不必担心 ...

  4. Lucene&Solr框架之第三篇

    1.SolrCore的配置 a)schma.xml文件 b)配置中文分析器 2.配置业务域和批量索引导入 a)配置业务域 b)批量索引导入 c)Solrj复杂查询(用Query页面复杂查询.用程序实现 ...

  5. 关于js的for in循环,慎用

    参考:http://www.cftea.com/c/2014/08/6290.asp作者:vkvi 如题我看到也有点诧异,测试了真的有这个问题,上代码 Array.prototype.a = func ...

  6. 提速企业应用开发,Ntaub 3极速开发平台发布

    企业管理系统搞了这么多年,还是以表单.数据增删改这些功能为主.唯一的变化就是“变化”,企业的业务模式和流程越来越多样化,开发需求变更越来越频繁,开发周期却要求越来越短. 无代码.低代码开发平台开始流行 ...

  7. web项目的初始搭建和intellij的tomcat的配置

    点击web application

  8. 初级模拟电路:3-11 BJT实现电流源

    回到目录 1. 恒流源 (1)简易恒流源 用BJT晶体管可以构造一个简易的恒流源,实现电路如下: 图3-11.01 前面我们在射极放大电路的分压偏置时讲过,分压偏置具有非常好的稳定性,几乎不受晶体管的 ...

  9. buildroot教程

    什么是buildroot Buildroot是Linux平台上一个开源的嵌入式Linux系统自动构建框架. 0.下载buildroot Buildroot版本每2个月,2月,5月,8月和11月发布一次 ...

  10. spring boot 2.2.0开始freemarker模板默认扩展名改为ftlh了

    2.2.0这个版本刚发布的时候更新到了这个版本,然后使用freemarker 的webapp运行报错. 查了spring boot的changelog,搜freemarker查到了这条.ftlh,使f ...