从 .dxf 文件中获取图层并将该图层复制到新文件
Get a layer from .dxf file and copy that layer to new file
我尝试了下面的代码here,我的objective是从一个.dxf文件中取出一层,然后只用那个信息复制到一个新文件.在我找到代码的link上,做了如下代码,但是我不明白为什么会报错。我尝试更改图层名称,但没有成功。
from shutil import copyfile
import ezdxf
ORIGINAL_FILE = 'test.dxf'
FILE_COPY = 'test2.dxf'
KEEP_LAYERS = {'Layer1', 'Layer2', 'AndSoOn...'}
KEEP_LAYERS_LOWER = {layer.lower() for layer in KEEP_LAYERS}
# copy original DXF file
copyfile(ORIGINAL_FILE, FILE_COPY)
dwg = ezdxf.readfile(FILE_COPY)
msp = dwg.modelspace()
# AutoCAD treats layer names case insensitive: 'Test' == 'TEST'
# but this is maybe not true for all CAD applications.
# And NEVER delete entities from a collection while iterating.
delete_entities = [entity for entity in msp if entity.dxf.layer.lower() not in KEEP_LAYERS_LOWER]
for entity in delete_entities:
msp.unlink_entity(entity)
dwg.save()
我的案例很简单,和那个代码很相似,但是我得到了以下错误:
raise const.DXFAttributeError(
DXFAttributeError: Invalid DXF attribute "layer" for entity MPOLYGON
我没有找到任何与该错误相关的参考书目,站点上没有太多关于此库错误的信息。
MPOLYGON 未记录在 DXF 参考中,因此仅保留为 DXFTagStorage,没有图层属性。
没有层属性的实体将被删除:
delete_entities = [
e for e in msp
if not e.dxf.is_supported('layer') or e.dxf.layer.lower() not in KEEP_LAYERS_LOWER
]
编辑:为不受支持的实体取消链接将在 v0.16.2 中起作用,直到那时销毁实体:
for e in msp:
if e.dxf.is_supported('layer') and e.dxf.layer.lower() in KEEP_LAYERS_LOWER:
continue
e.destroy()
也许您可以 post 您的 DXF 文件(压缩)来查看 MPOLYGON 应该是什么,我想它是已经支持的 DXF 类型的同义词。
编辑:MPOLYGON 似乎是 AutoCAD 地图特定实体。
我尝试了下面的代码here,我的objective是从一个.dxf文件中取出一层,然后只用那个信息复制到一个新文件.在我找到代码的link上,做了如下代码,但是我不明白为什么会报错。我尝试更改图层名称,但没有成功。
from shutil import copyfile
import ezdxf
ORIGINAL_FILE = 'test.dxf'
FILE_COPY = 'test2.dxf'
KEEP_LAYERS = {'Layer1', 'Layer2', 'AndSoOn...'}
KEEP_LAYERS_LOWER = {layer.lower() for layer in KEEP_LAYERS}
# copy original DXF file
copyfile(ORIGINAL_FILE, FILE_COPY)
dwg = ezdxf.readfile(FILE_COPY)
msp = dwg.modelspace()
# AutoCAD treats layer names case insensitive: 'Test' == 'TEST'
# but this is maybe not true for all CAD applications.
# And NEVER delete entities from a collection while iterating.
delete_entities = [entity for entity in msp if entity.dxf.layer.lower() not in KEEP_LAYERS_LOWER]
for entity in delete_entities:
msp.unlink_entity(entity)
dwg.save()
我的案例很简单,和那个代码很相似,但是我得到了以下错误:
raise const.DXFAttributeError(
DXFAttributeError: Invalid DXF attribute "layer" for entity MPOLYGON
我没有找到任何与该错误相关的参考书目,站点上没有太多关于此库错误的信息。
MPOLYGON 未记录在 DXF 参考中,因此仅保留为 DXFTagStorage,没有图层属性。
没有层属性的实体将被删除:
delete_entities = [
e for e in msp
if not e.dxf.is_supported('layer') or e.dxf.layer.lower() not in KEEP_LAYERS_LOWER
]
编辑:为不受支持的实体取消链接将在 v0.16.2 中起作用,直到那时销毁实体:
for e in msp:
if e.dxf.is_supported('layer') and e.dxf.layer.lower() in KEEP_LAYERS_LOWER:
continue
e.destroy()
也许您可以 post 您的 DXF 文件(压缩)来查看 MPOLYGON 应该是什么,我想它是已经支持的 DXF 类型的同义词。
编辑:MPOLYGON 似乎是 AutoCAD 地图特定实体。