介绍

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. C# Task 多任务 限制Task并发数量

    LimitedTaskScheduler: using System; using System.Collections.Concurrent; using System.Collections.Ge ...

  2. Android几种多渠道打包

    1.什么是多渠道打包 在不同的应用市场可能有不同的统计需求,需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包.在安装包中添加不同的标识,以此区分各个渠道,方便统计app在市场的 ...

  3. SolrCloud 高可用集群搭建

    1.1 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...

  4. DSP编程与调试总结

    (1)error: can't allocate .ebss, size 000c450d (page 1) in DXINTFRAM2 (avail: 00010000) error: errors ...

  5. OS X 下 OpenGL 4.x 环境配置

    配置: OS X 10.10 + CMake 3.2.2 + GLFW 3.1.1 + OpenGL 4.1 + Xcode 6.0 本文主要介绍如何在 OS X 系统下进行环境配置,使得 Xcode ...

  6. sublime相关操作

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

  7. openstack-neutron安装与配置

    一.实验目的: 1.理解neutron服务在OpenStack中的作用 2.掌握在控制节点上安装配置neutron的方法和步骤 3.掌握在计算节点上安装与配置neutron的方法和步骤 二.实验步骤: ...

  8. [译]Vulkan教程(15)图形管道基础之RenderPass

    [译]Vulkan教程(15)图形管道基础之RenderPass Render passes Setup 设置 Before we can finish creating the pipeline, ...

  9. angularjs路由监听,uirouter感知路由变化,解决uirouter路由监听不生效的问题

     壹 ❀ 引 angularjs除了惊为天人的双向数据绑定外,路由也是出彩的一笔,通过路由配置,我们能在不发起页面跳转的情况下,对当前页内容进行整体更新,angularjs提供了ngRoute模块用于 ...

  10. view WITH CHECK OPTION where-clause violation(查看与检查选项where-子句违反)

    创建视图的语句是设置了 WITH CHECK OPTION 这个条件; 创建视图时,sql语句是这样写的: CREATE  OR  REPLACE  VIEW  RZ_TST_VIEW AS WHER ...