首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用python将.dxf文件转换为.json?

如何使用python将.dxf文件转换为.json?
EN

Stack Overflow用户
提问于 2021-10-04 18:00:16
回答 1查看 622关注 0票数 0

基本上,我正在处理Blender上保存在.dxf文件中的一组2D实体。我需要从Blender中的.dxf文件中读取一些点,以便稍后测量它们之间的距离(它们通常是polyline的转折点),而且它们似乎没有一个特定的名称来帮助我识别它们。

我读过关于dxf解析器的文章,但它暗示了Node.js的使用和知识,因此我需要用Python来完成它。最后,我还会接受一些关于如何在python中执行Node.js脚本的建议,这些脚本将把我的.dxf文件转换成json。

EN

回答 1

Stack Overflow用户

发布于 2022-02-25 07:15:34

要回答您的问题: Node.js是一个使用来自任何地方的包的框架,包括python。您永远不会直接使用Node.js来完成这样的转换工作,因为此类工作应该属于特定的包(不管是已经开发它的人还是您正在开发的东西),比如python。

我也在做同样的项目,做同样的转换,这是相当直观和直接的。我的做法是:

创建一个python包,作为一个整体完成转换工作,从https://ezdxf.readthedocs.io/en/stable/introduction.html

  • read导入ezdxf包--网站上的文档为您提供了访问属性/类(如层、表、entities

  • extract )的基本概念,为.dxf文件

  • 导出整个对象并将其转换为json文件(

)提供了您所需的属性。

我有一个代码片段,它简要地告诉您如何提取.dxf文件的层,您可以参考这些代码片段:

代码语言:javascript
运行
复制
from datetime import datetime
import json
import sys
from typing import Optional, Tuple
from unittest.mock import _ANY
from ezdxf.filemanagement import readfile


class Scanner:
    

    __filename: str = ''
    __version: str = ''
    __output: dict = {}
    __layer: dict = {}
    __current_layer: dict = {}

    def print(self):
        print(self.__output)

    def __init__(self):
        return

    def read_file(self, file: str):
        

        # read the name of the file as string
        # & update it for the private variable
        self.__filename = file
        self.__output['name'] = self.__filename
        try:
            # store the dxf file as 'Drawing' class into __content
            # self.__content = readfile('%s.dxf' % file, errors='ignore')
            self.__content = readfile(file)
        except IOError:
            # print('Not a DXF file or a generic I/O error.')
            print(IOError.strerror)
            sys.exit(1)
        except UnicodeDecodeError:
            print('Illegal sequence of str characters')
            sys.exit(2)

    def analyze(self):
        
        print('analyzing...')
        self.__output['Date'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        self.__output['Unit'] = str(self.__content.units)
        self.analyze_layers()
        # self.analyze_entities()
        # print(self.__output.get('Date'))
        print('analyze finished')

    def analyze_layers(self):
        

        handle: _ANY
        owner: str
        name: str
        flags: str
        color: str
        true_color: str
        line_type: str
        plot: str
        line_weight: str
        plotstyle_handle: str
        material_handle: str
        rgb: Optional[Tuple[int, int, int]]
        description: str
        transparency: float

        print('analyzing layers...')

        doc = self.__content

        # extract information within layers &
        # store them within a dict
        for layer in doc.layers:
            self.__current_layer['handle'] = layer.dxf.handle
            self.__current_layer['owner'] = str(layer.dxf.owner)
            # name_binary = layer.dxf.name
            # name_utf8 = name_binary.encode('ascii').decode('utf-8')
            # self.__current_layer['name'] = str(name_utf8)
            self.__current_layer['name'] = layer.dxf.name
            self.__current_layer['flags'] = str(layer.dxf.flags)
            self.__current_layer['color'] = str(layer.color)
            self.__current_layer['true_color'] = str(layer.dxf.true_color)
            self.__current_layer['line_type'] = str(layer.dxf.linetype)
            self.__current_layer['plot'] = str(layer.dxf.plot)
            self.__current_layer['line_weight'] = str(layer.dxf.lineweight)
            self.__current_layer['plotstyle_handle'] = str(
                layer.dxf.plotstyle_handle)
            self.__current_layer['material_handle'] = str(
                layer.dxf.material_handle)
            self.__current_layer['rgb'] = layer.rgb
            self.__current_layer['description'] = layer.description
            self.__current_layer['transparency'] = layer.transparency
            # store __current_layer dict to self.__current_layer
            self.__layer[str(layer.dxf.name)] = self.__current_layer
            # reset self.__current_layer
            self.__current_layer = {}
        self.__output['layers'] = self.__layer
        print('layer analyze finished')

    def analyze_entities(self):
        

    def analyze_images(self):
        

    def tojson(self):
        

        # Serializing json
        json_object = json.dumps(self.__output, indent=4, ensure_ascii=False)
        with open("sample.json", "w", encoding='utf-8') as outfile:
            outfile.write(json_object)
        print(json_object)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69440436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档