Utilice libredwg y dxfgrabber para analizar la información dwg / dxf en win10

Porque la información del archivo CAD debe analizarse en el trabajo para su posterior procesamiento y análisis. Aquí hay una breve introducción a mi método, la implementación específica no se puede explicar en detalle debido a razones de trabajo, aquí está solo la parte del código central.

1. Instalación de herramientas

pip install dxfgrabber

Dos, dwg a dxf

Aquí necesitamos usar dwg2dxf.exe , podemos encontrarlo en la carpeta libredwg instalada antes, y usar python para llamar a la línea de comando para transformar el archivo dwg. ¿Por qué se transforma aquí? Debido a que dwg es un archivo encriptado de AutoCAD, las diferentes versiones tienen diferentes métodos de análisis y el formato dxf es un formato de archivo de código abierto. Actualmente, usamos Python para analizar directamente la información.

    commd="dwg2dxf.exe"    
    # 设置转化工具参数
    verbosity = " -v{}".format(verbosity)
    versions = " --r{}".format(versions)
    outfile = ' -o "{}"'.format(outfile_path)

    try:
        subprocess.run(
            '"' + commd + '"' + verbosity + versions + outfile + " " + '"' + infiles + '"',
            timeout=20,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE)
        # rc, out = subprocess.getstatusoutput('"'+commd+'"' + verbosity + versions + outfile +" "+ '"'+infiles+'"')
        # print(out)
    except:
        error_txt.append(infiles)
        print("dwg to dxf fail!!!,please check to see if it contains "
              "'gbk' char .({})".format('"' + commd + '"' + verbosity + versions + outfile + " " + '"' + infiles + '"'))

Tres, use python para analizar archivos dxf

Aquí se usa Dxfgrabber , y el método de uso específico puede referirse a su documento de desarrollo.

import dxfgrabber

dxf = dxfgrabber.readfile(file_name)

    # 解析dxf文件
    # 存储文本
    txt=[]
    insert_block=[]
    for type in dxf.entities:
        if type.dxftype == "MTEXT":
            # 保存多行文本信息
            txt.append(TEXTINFO(type.raw_text,
                                type.insert[0],type.insert[1],
                                type.height,type.rect_width,
                                type.font,type.line_spacing))

        elif type.dxftype == "TEXT":
            # 保存单行文本信息、
            txt.append(TEXTINFO(type.text,
                                type.insert[0],type.insert[1],
                                type.height,type.width,
                                type.font))
        elif type.dxftype=="LINE":
              print("=======================>")
              print("坐标:", type.start,type.end)
        elif type.dxftype == "INSERT":
            if not type.name in dxf.blocks:
                continue

            block_info=BLOCKINFO()
            blocks=dxf.blocks[type.name]
            for entity in blocks:
                if entity.dxftype=="TEXT":
                    block_info.add_text(entity.text,
                                        entity.insert[0], entity.insert[1],
                                        entity.height, entity.width,
                                        entity.font)
                elif entity.dxftype == "MTEXT":
                    block_info.add_text(entity.raw_text,
                                        entity.insert[0], entity.insert[1],
                                        entity.height, entity.rect_width,
                                        entity.font, entity.line_spacing)

                elif entity.dxftype=="LINE":
                    block_info.add_line(entity.start,entity.end)
            insert_block.append(block_info)

Cuatro, resumen

Este método puede analizar parte de la información de los datos dwg, pero no puede resolver la información de la capa, o faltará alguna información, por lo que causará confusión cuando se reconstruya la información. Por supuesto, este método también tiene ventajas: puede ejecutarse directamente sin depender de CAD y la velocidad es relativamente rápida. En el seguimiento, también registraré que utilizo objectARX para analizar información CAD. En términos relativos, este método es relativamente estable. Después de todo, uso código de bajo nivel de AutoCAD directamente, que es relativamente más preciso y más fácil de analizar. Se recomienda que los amigos den prioridad a ObjectARX cuando realicen trabajos relacionados.También hay muchos materiales en Internet.

Supongo que te gusta

Origin blog.csdn.net/wxplol/article/details/105070922
Recomendado
Clasificación