`
青蜂侠
  • 浏览: 50861 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Python 读取DXF文件

阅读更多

至于dxf文件的格式在之前的博文中已经有详细的叙述,在此将不做赘述。

 

from Point import Point
class DXFReaderImpl:
    def __init__(self,file):
        self.file = file
        self.points = [] ## 用于记录点实体的坐标值
        self.points_line = []  ## 用于记录线段的各端点坐标值,包括直线和折线两种线型
        self.points_polygon = [] ## 用于纪录多边形的顶点坐标值

    def readDXF(self):
        firstLine =""
        secondLine = ""
        secondLine = self.file.readline().strip()

        while secondLine != "EOF":
            if firstLine.strip() == "0" and secondLine.strip()== "LWPOLYLINE":
                self.readPolyline()

            if firstLine.strip() == "0" and secondLine.strip() == "LINE":
                self.readLines()

            if firstLine.strip() == "0" and secondLine.strip() == "POINT":
                pass
            firstLine = secondLine
            secondLine = self.file.readline().strip()

        print "there are " + str(i) + "polyline"

##
##    def readPolygon(self):
##        pass
## read polyline. In dxf file,polygon is a closed polyline
    def readPolyline(self):
        counter = 0
        numofvertex = 1
        flagofPolygon = 0
        x = 0
        y = 0
        firstLine = "LWPOLYLINE"
        secondLine = self.file.readline().strip()
        pointList = []
        while counter<=numofvertex:
            if firstLine == "90":
                numofvertex = int(secondLine)
            if firstLine == "70":
                flagofPolygon = int(secondLine)
            if firstLine == "10":
                x = float(secondLine)
            if firstLine == "20":
                y = float(secondLine)
                pointList.append(Point(x,y))
                counter = counter + 1
            firstLine = secondLine
            secondLine = self.file.readline().strip()

        if flagofPolygon == 0:
            self.points_line.append(pointList)
        else:
            self.points_polygon.append(pointList)

    def readPoint(self):
        firstLine = "POINT"
        secondLine = self.file.readline().strip()
        x = 0.0
        y = 0.0
        while firstLine != "30":
            if firstLine == "10":
                x = float(secondLine)
           if firstLine == "20":
                y = float(secondLine)
	   firstLine = secondLine
	   secondList = self.file.readline().strip();
        self.points.append(Point(x,y))
## read  straight line
    def readLines(self):
        x1 = 0.0
        y1 = 0.0
        x2 = 0.0
        y2 = 0.0
        firstLine = "POINT"
##        secondLine = ""
        seondLine = self.file.readline().strip()
        while firstLine != "31":
            if firstLine == "10":
                x1 = float(secondLine)
            if firstLine == "20":
                y1 = float(secondLine)
            if firstLine == "11":
                x2 = float(secondLine)
            if firstLine == "21":
                y2 = float(secondLine)
            firstLine = secondLine
            secondLine = self.file.readline().strip()

        tempLine = []
        tempLine.append(Point(x1,y1))
        tempLine.append(Point(x2,y2))
        self.points_line.append(tempLine)


if __name__=="__main__":
    file = open("D:\\test.dxf","r")

    reader = DXFReaderImpl(file)
    reader.readDXF()
    i = 1
    for temp in reader.points_polygon:
        print " this is the " + str(i) + " polygon"
        for points in temp:
            print str(points.x) + "   " + str(points.y)
        i = i + 1
##    i = 1
##    for temp in reader.points_line:
##        print " this is the " + str(i) + " polyline"
##        for points in temp:
##            print str(points.x) + "  " + str(points.y)
##        i += 1
    print "over"

 此段代码主要用于读取点,直线,折线,多边形等四种实体的坐标值。

分享到:
评论

相关推荐

    python读取数据库数据对dxf文件进行标注并另存

    python读取数据库数据对dxf文件进行标注并另存,链接数据库,读取数据,根据数据对dxf文件进行方框标注,并判断文字区域旋转角,最后另存

    2.zip_DXF 读取 PYTHON_level9ol_phyton 读取dxf_python3 dxf_python读取d

    Python语言读取dxf文件数据,得到其中的线条及点坐标

    readdxf.zip_C#读取dxf中的○坐标_dxf_dxf 坐标_read dxf_坐标显示c#

    C#读取dxf中的圆坐标,并且把所有坐标绘图显示出来

    CADdxf文件的读取基本数据极其样式等

    读取CAD中dxf文件,包括基本的数据样及其颜色,大小,样式,多边形等填充色,经过测试,肯定好用

    dxf文件读取与delaunay.txt

    该代码主要实现python读取dxf文件与delaunay三角剖分,以狗骨形边界为例。读取需要自行安装多个库,delaunay三角剖分是根据随机点生成。

    python跳过第一行快速读取文件内容的实例

    今天小编就为大家分享一篇python跳过第一行快速读取文件内容的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    python查看CAD扩展属性,CAD二次开发python

    python读取CAD的扩展属性,并展示在界面上,python二次开发CAD扩展属性,pyqt5设计界面,cass扩展属性的提取,里面包含源代码及打包好exe。

    ezdxf:DXF的Python接口

    ezdxf是一个Python软件包,用于创建新的DXF文件并读取/修改/写入现有的DXF文件 目标受众是开发人员 至少需要Python 3.7 与操作系统无关 用CPython和pypy3测试 适用于Windows,Linux和macOS的PyPI上的CPython C扩展...

    SDXF:python的DXF库

    DXF(文档交换格式)是AutoCad发布的ASCII文件格式,可以通过各种程序读取,包括Blender,Maya,CorelDraw和。 当我弄清楚它时,我将尝试在此处记录该库,但是不再积极使用该库。 从2012年7月起,它! 如果您有...

    pcb-tools-extension:Python库可对Gerber文件进行面板化

    将DXF文件转换为PCB数据 该库的当前版本只能处理RS-274x格式和Excellon钻取格式数据。 安装 您可以按照以下步骤安装稳定版本。 $ pip install pcb-tools-extension 如果您打算尝试最新的开发版本,请按以下步骤...

    AutoCAD表格图形文件中的数据读取

    了实现AutoCAD表格图形文件中的数据读取,把AutoCAD制图中的表格绘图文件(*.DWG)通过图形交换文件(*.DXF)格式输出,在分析其结构组成的基础上,用高级语言编程,将表格...

    dxf2pcb:将电路板的DXF图转换为gEDA-PCB文件。-开源

    该Python脚本读取DXF(ascii)文件,并生成与gEDA套件的一部分PCB Designer兼容的PCB输出。 它的设计目的有二:一是从机械图(如电路板轮廓)生成PCB代码片段,二是从CAD图生成元素文件。 使用文件-&gt;将布局加载到...

    几何导入器

    可以读取DXF,CSV,TXT文件,提取基本几何元素并输出每个元素的列表以及每个元素的坐标和任何相关属性的Python模块。 功能: import_dxf_file(文件名:str)-&gt;列表[Dict [str,List [Tuple [float,...]]]] 摘要...

    OpenJUMP-Installer-1.16-r6669-PLUS-Java 统一制图平台.exe

    OpenJUMP 试点项目-Java...读取 DXF*、JML、GeoJSON、GML、SHP 编写 DXF*、JML、GeoJSON、GML、SHP、SVG* 光栅格式读取支持: 每个世界文件或 GeoTIFF 的地理配准 BMP、DCX、FPX、GIF、JB2、JBIG2、JPEG、PAM、PBM、PCX

    基于python和GDAL实现对shape文件要素进行查询

    最近使用GDAL对shape文件进行查询,走了很多弯路,查看网上的代码,发现很多代码都是错误的,或者不详细,浪费了很多时间。这里简单记录一下使用GDAL查询和读取要素的代码。 python版本3.5 GDAL版本2.1.0 代码实现 ...

    isoreader:将IRMS(同位素比质谱)数据文件读入R

    等读器 关于 该软件包旨在作为一个统一的一... 目前,它可以读取大多数Thermo Thermo Scientific进样口双入口(.did,.caf)和连续流(.dxf,.cf)数据文件,以及Elementar连续流数据档案(.iarc),并具有其他文件格式

    附和水准导线间接平差程序设计

    自动读取.txt文本文件数据,也可手动输入数据,计算功能包括测量平差和最小二乘间接平差,最后可将计算结果以文本文件报告输出,同时生成DXF图。

    K40-Whisperer-macOS:为macOS构建脚本

    K40 Whisperer读取SVG和DXF文件,解释数据并将命令发送到K40控制器,以移动激光头并相应地控制激光。 K40 Whisperer不需要USB钥匙(加密狗)即可运行。 官方的K40耳语者和使用说明在Scorchworks: 该分叉是为了...

    jdwglib-开源

    jdwglib是用于访问DWG文件的Java库。 从本质上讲,它是Art Haas编写的Pythoncad DWG阅读类的端口。 jdwglib管理复杂的DWG对象,允许用户直接在其应用程序中使用这些对象。

    浅析GIS大数据.doc

    比如测绘方式产生的dxf数据,经常需要导入到GIS系统中,其他的还有扫 描得到的tiff或jpeg图像,具有空间坐标信息的GeoTIFF文件,数字制图中数字化后的E SRI shapefiles数据或MapInfo的TAB数据,格式转换后用于web的...

Global site tag (gtag.js) - Google Analytics