用C#写的CGM解析程序

石油行业常用CGM(Computer Graphics Metafile)计算机图形元文件格式来保存一些图件,从参加工作没多久就遇到过许多的CGM读取和输出软件或工具。像SDI公司的cgmoffice等都可以很好地编辑cgm文件。由于cgm格式设计得较早,虽然许多理念很不错,设计的图形元素复杂,但还是有一些先天不足,其中最大的问题是对中文的支持,再就是支持多种版本(V1到V4),并且还可以定制,称为profile,而一些公司出于成本的考虑,通常只支持V1或V2,一些复杂的元素就不再考虑了。

这些CGM文件的版本低一些也是好事,至少我们做编程的可以少花些时间就可以读取一些构造图了。在石油行业应用中常用的CGM版本实际上还是V1,在构造图里,用到的CGM命令并不多,统计后可以有一些惊异的发现。所以自己用C#编程来解析CGM也是一个可能的任务了。

看到许多刚刚参加工作的学生很快就会遇到此类问题,估计也要动手尝试自己解析CGM格式,这里把一些主要思路介绍一下。

CGM的官方文档实际上就是三个:

(1)ISO_IEC_8632-1_1999(E).pdf,CGM的ISO规范part1,总体介绍

(2)ISO_IEC_8632-3_1999(E).pdf,CGM的ISO规范part3(注意第2部分被ISO组织作废了),二进制格式介绍

(3)ISO_IEC_8632-4_1999(E).pdf,CGM的ISO规范part4(文本格式介绍,实际应用中很少用,一般不用看)

另外军方的有一个规范(MIL-STD-2301-1993-CGM.doc )写得比较细,把二进制编码的排列方式都写出来了。

值得一提的是CGM PIP规范,如果要显示带地震剖面的图形的这类CGM文件时,这个PIP也要能读才行。

可以从网上借鉴的一些相关源代码有:

(1)cgmviewer-1.00-java.rar,一个人用JAVA的Applet写的浏览cgm的小程序,功能很弱

(2)ralcgm.rar 这个源代码内容很多很全,但确实不容易看懂,也不容易移植

(3)胜利油田的一个朋友在工作站上用c语言写的读写cgm的程序,代码较乱,注释也很少,可以输出cgm

(4)Larson的CGMLibrary,1998 larson公司做的一个开放源码的cgm library,从1998年后好像就不免费了,但源代码还是可以参考的,还有一个cgmlib3.pdf的API手册有200多页。

另外还可以参考的就是发表在期刊杂志上的与CGM有关的几篇论文,这些论文篇幅都不长,可以作为入门手册来读读。

CGM的测试文件由NIST提供过2个版本,一个是2.0,一个是3.0,见这个网址http://www.itl.nist.gov/div897/ctg/cgm_form.htm,谁能把这些内容都正确显示了,才能算是一个cgm的商业软件。

自己解析CGM的过程还是相当曲折的,最后用INT公司的Carnac.NET来显示所有解析出来的图元(Carnac.NET里面可以输出CGM文件,但不能读CGM),附整个程序的类图一张。

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2016-10-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阮一峰的网络日志

React 技术栈系列教程

上周中秋节,我待在家里,写完了 Redux 教程。 至此,《React 技术栈系列教程》算是比较完整了。 ? ES6 语法:教程 Babel:教程 Reac...

3165
来自专栏FreeBuf

走近科学:如何搞定各种各样的终端机

特别声明:本文提供一些绕过终端机的方法,仅用于安全学习及教学用图,禁止非法利用。本文旨在提高市面上终端机的安全性,避免其遭到恶意破坏。 定场诗 妖都地铁售票终端...

18110
来自专栏玄魂工作室

CTF实战13 逻辑漏洞

比如我们可以提交异常数据进行测试,包括了提交负数/超大转账金额,提交负数/超大积分,或者积分转换输入输出账户互换和转账输入输出账户互换

551
来自专栏Jackson0714

【博客美化】01.推荐和反对炫酷样式

32813
来自专栏王磊的博客

ReactNative实现图集功能

需求描述: 图片缩放、拖动、长按保存等基础图片查看的功能; 展示每张图片文本描述; 实现效果,如图: ? 实现步骤 使用第三方插件:react-nativ...

34815
来自专栏大数据钻研

给前端新人看的前端之路漫谈

前言 前端之路何其漫漫~ 说明:本篇文章原是写给学弟学妹的,但想来花的功夫确实不少,就把此篇文章当做自己的一个阶段性总结文章了,会保持长期更新。 HTML 总的...

3119
来自专栏腾讯社交用户体验设计

玩转HTML5移动页面(动效篇)- 腾讯ISUX

1323
来自专栏Crossin的编程教室

3分钟破译朋友圈测试小游戏

最近,朋友圈时不时会流行起某个测试类小游戏,比如你的性格图谱啦,你是三体中的哪个角色啦,你有什么超能力啦……昨天晚上在某个群里,又被一个测测你是什么书的小游戏刷...

3847
来自专栏沈唁志

网站F12显示一个有趣的 console.log 信息

2403
来自专栏星流全栈

相见恨晚的JavaScript包搜索工具 — JS.coach

1372

扫描关注云+社区