用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 条评论
登录 后参与评论

相关文章

来自专栏崔庆才的专栏

使用requests+正则表达式爬取猫眼电影排行

本节中,我们利用requests库和正则表达式来抓取猫眼电影TOP100的相关内容。requests比urllib使用更加方便,而且目前我们还没有系统学习HTM...

5497
来自专栏黑白安全

通过F5获取服务器真实内网IP

渗透测试过程中,经常会遇到目标服务器使用F5 LTM做负载均衡。 如果能获取到目标服务器的真实IP地址,会给后续渗透带来一定便利。

824
来自专栏夏时

分享几个IP获取地理位置的API接口

2.4K5
来自专栏IT笔记

三分钟深入TT猫之故障转移

结束了一周繁忙的工作,趁着周末,小编手中的键盘早已饥渴难耐了,想知道上期省略号中发生了什么有趣的故事么?且听小编娓娓道来,结尾有彩蛋。 ? 风月前场 春风再续,...

3408
来自专栏小红豆的数据分析

毕业设计:爬虫及数据分析

指导老师跟我说,本科毕业设计不需要创新,但是工作量一定要够,我就知道又要搞事情了。

3892
来自专栏微信终端开发团队的专栏

微信自研生产级paxos类库PhxPaxos实现原理介绍

微信重磅开源生产级paxos类库PhxPaxos,本文用科普的口吻向大家介绍PhxPaxos背后的实现原理以及一些有意思的细节。 开源地址:https://g...

2427
来自专栏微信公众号:Java团长

看似简单但容易忽视的编程常识

这些年写了很多的代码、也读过很多的人写的代码,这几年,写代码的机会越来越少,但是每次写代码,感觉需要思考的东西越来越多,好的代码确实难能可贵,在国内业界中,好的...

783
来自专栏jeremy的技术点滴

python语言学习备忘

3305
来自专栏C/C++基础

程序是什么

程序(Program)是计算机系统的必备元素,因为计算机系统由硬件、操作系统以及软件构成,而程序又是软件的组成部分。操作系统是管理和控制计算机硬件与软件资源的计...

792
来自专栏JarvanMo的IT专栏

Android开发:Kotlin下配置DataBinding

近日,随着Google召开了Google I/O 2017,Kotlin大火一把。因为Google宣布Kotlin为First-class开发语言作 为一名Ko...

812

扫码关注云+社区