面向城市规划的参数化设计技术与系统(二)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向城市规划的参数化设计技术与系统(二)【摘要】针对城市规划行业目前普遍使用的autocad软件所绘制的图形层次较低且缺乏关联、智能性不足、方案修改维护成本高,以及现有参数化设计系统技术门槛较高等问题,提出一套面向城市规划的参数化设计新技术,并开发了相应的系统。文章共分三部分,本文为第二部分,给出了dxf-shp文件格式自定义转换方法,其中包括dxf文件的读取和存储、shp文件写入技术等。第一、三部分分别给出了系统整体架构思路和基于属性块的城市图元参数管理
方法、参数化三维建模技术,并通过实际规划案例,证明了所述技术和系统的可行性和高效性。
【关键词】参数化设计;城市规划;cityengine;格式转换
1 引言
目前城市规划行业普遍使用计算机辅助设计软件为autocad,它所绘制的图形存在着层次较低且缺乏关联、智能性不足、方案修改维护成本高,以及现有参数化设计系统技术门槛较高等问题,严重制约了城市规划设计工作的效率。为此,笔者提出了一套面向城市规划的参数化设计新技术,并开发了相应的系统。文章共分三部分:第一部分介绍了系统的整体架构思路和基于属性块的城市图元参
数管理方法;本文为第二部分,重点介绍了dxf-shp文件格式自定义转换方法,其中包括dxf文件的读取和存储、shp文件写入技术等;第三部分给出了参数化建模技术,并通过实际规划案例,证明了所述技术和系统的可行性和高效性。
2 dxf-shp文件格式自定义转换技术
dxf[1](drawing exchange file)文件是autodest公司推出的与外部cad/cam进行图形信息交换的一种文件格式。一个完整的dxf文件应由7个大段组成:标题(header)段、类(classes)段、符号表(tables)段、块(blocks)段、图元(entities)段、对象(objects)段、文件结束符号(组码为0,组值为eof)[2]。每个大段又由若干个组组成,每个组占用连续的2行,第1行为组码,用于表示后续数据所代表的含义,第2行为组值,相当于数据的值,组码和组织合起来代表1个数据的含义和数值。
本系统客户端输出格式为dxf(dwg可转换成dxf),而服务端cityengine平台必须使用shp(esri shapefiles)[3]格式,因此首先需要进行文件格式转换,包含读取dxf文件、存储实体信息并写入shp文件两大块内容。
2.1 读取dxf文件
目前,dxflib是一个比较实用的读写dxf文件的c++库。在读取dxf文件时,dxflib分析文件并且调用用户自定义的函数来添加实体、层、块等数据。然而,dxflib并不保存任何实体或者信息,更不提供保存的容器,需要用户自定义处理函数。它的基本工作原理如下:(1)dxflib分析dxf文件,识别对象;(2)当获得用户需要的对象时,调用用户自定义的回调函数;(3)在用户的回调函数中处理各种实体,或者将它们保存到容器中。
本系统利用dxflib设计的读取dxf文件基本流程如图1所示。
首先进入块(blocks)段读取块定义信息,将每个读取到的块及其内部图元存入一个预先定义的“块”数据结构,并保存在块容器(一个存储块的列表)中,注意块列表中的图元并不在绘图区显示,它只起到参照的作用。块段读完之后,进入实体(entities)段,搜索并读取属性块(dxf内部定义为insert实体)图元。当找到一个insert实体时,读取它的引用块名、插入点坐标、缩放和旋转参数、属性值(attrib)等信息。然后根据引用块名,在前述的块列表中获取原块定义,提取其中的每个几何图元,作坐标转换、记录属性值、线/面判断以及存入线/面容器等操作。实体段读完后,整个流程结束。
2.2 存储和写入shp
在存储、写入矢量数据方面,作为gdal项目分支的c++开源库——ogr[4]提供了较好的支持。ogr体系结构包含有ogrgeometry,ogrfeature,ogrlayer等大类,[5]其中geometry类又包含点、线、面、多点、多线、多面等派生子类。下面将介绍结合ogr设计的数据结构(容器),用以存储从dxf文件中读取的属性块信息。
首先,针对属性数据(promp字段不做记录)设计如下结构: