设为首页 收藏本站
查看: 829|回复: 0

[经验分享] Python 读取DXF文件

[复制链接]

尚未签到

发表于 2017-4-30 12:24:52 | 显示全部楼层 |阅读模式
  至于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"

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-371198-1-1.html 上篇帖子: python文本持久化 下篇帖子: Python import的一个技巧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表