python - django 中的 ezdxf - 未写入文件,或无法正常工作
问题描述
我目前正在使用 Django 和 ezdxf 创建一个 Web 应用程序。最终目标是将 dxf 文件的内容输出为 dxf 文件和 png。这似乎是一个初学者 django 问题和中级 ezdxf 问题。
我为 ezdxf 编写了一组指令,用于实例化一个文件,然后绘制我的作品,然后将文件另存为 .dxf 和 png。这在 pycharm 的命令行中效果很好。
def instantiate_drawing():
"""starts a new drawing and adds all needed layers etc."""
doc = ezdxf.new('R2010', setup=True)
msp = doc.modelspace()
lines_layer = doc.layers.new('python-lines', dxfattribs={'color': 0})
dims_layer = doc.layers.new('python-dims', dxfattribs={'color': 3})
label_layer = doc.layers.new('python-label', dxfattribs={'color': 13})
myStandard = doc.styles.new('myStandard', dxfattribs={'font': 'Helvetica.ttf'})
blocdoc = ezdxf.readfile('block_library.dxf')
blocmsp = blocdoc.modelspace()
importer = Importer(blocdoc, doc)
return doc, msp, lines_layer, dims_layer, label_layer, myStandard, blocdoc, importer
示例绘图说明
def create_rectangle(pt0, pt1, off=3, dims=None):
"""creates a rectangle between 2 points, and adds dims between
take two tuples with pt coords, higer coords second"""
width, height = pt1[0] - pt0[0], pt1[1] - pt0[1]
lineweight = 5
msp.add_lwpolyline([(pt0[0], pt0[1]),
(pt1[0], pt0[1]),
(pt1[0], pt1[1]),
(pt0[0], pt1[1]),
(pt0[0], pt0[1])],
dxfattribs={'layer': 'python-lines'}) # rectangle
if dims:
dimw = msp.add_linear_dim(base=(pt0[0], pt1[1] + off),
p1=(pt0[0], pt1[1]), p2=(pt1[0], pt1[1]),
dimstyle='myStandard',
dxfattribs={'layer': 'python-dims'},
override={'dimlwd': lineweight, 'dimlwe': lineweight,
'dimexe': 0.3})
dimh = msp.add_linear_dim(base=(pt0[0] + width + off, pt1[1] - (height / 2)),
p1=(pt1[0], pt0[1]), p2=(pt1[0], pt1[1]),
angle=90, dimstyle='myStandard',
dxfattribs={'layer': 'python-dims'},
override={'dimlwd': lineweight, 'dimlwe': lineweight,
'dimexe': 0.3})
dimw.render()
dimh.render()
print("success !")
保存指令,主要基于其他栈溢出代码!!
def save_as_png(save_to, img_format='.png', img_res=300):
msp = doc.modelspace()
ezdxf.addons.drawing.properties.MODEL_SPACE_BG_COLOR = "#FFFFFF"
lines_layer.line_weight = 25
dims_layer.rgb = (0, 0, 0)
label_layer.rgb = (0, 0, 0)
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
ctx = RenderContext(doc)
ctx.set_current_layout(msp)
# ctx.current_layout.set_colors(bg='#FFFFFF', fg='#000000')
out = MatplotlibBackend(ax, params={"lineweight_scaling": .5})
Frontend(ctx, out).draw_layout(msp, finalize=True)
fig.savefig(save_to, dpi=img_res)
plt.close(fig)
def save_file(name):
filename = "str(name) + "_cadfile.dxf"
doc.saveas(filename)
但是,当将其移至 Django 时,它保存的文件几乎是空的。正确的图层在那里,但似乎没有执行绘图集中的任何指令。
当从views.py 文件执行一组绘图指令时,我只收到一个错误。这UserWarning: Starting a Matplotlib GUI outside of the main thread will likely fail.
可能意味着只有 png 保存失败,但 dxf 文件也是空的。
在 django 中,我不想同步呈现文件。相反,它转到静态文件夹并由下一页访问。对于以后的功能,我需要数据库中的这些文件。
有没有人遇到过类似的问题?我认为问题在于未执行的绘图指令集。我不确定这个问题是从 django 运行 ezdxf 的结果,还是实例化绘图类的简单继承问题?
解决方案
推荐阅读
- r - 完美对齐密度图和 geom_col 的 X 轴值
- node.js - 如何修复intellij找不到节点解释器,但节点文件在文件夹中
- xamarin - 自定义 Azure B2C 登录页面策略(注册登录) - 查找 API 元素列表以自定义 MSFT 登录容器内容
- hadoop - 优化 Hadoop 的记录写入
- api - 无法弄清楚 NHL 官方 API 的端点。
- javascript - 在 React 中,如何在通过 redux 更改 prop 时同步搜索框的 2 个输入状态
- node.js - 更新 lodash 版本到 4.17.4 破解代码
- ios - 以编程方式带图标的分段控制
- python - 使用 sqlparse 添加动态 sql 限制
- vhdl - 如果信号也在 VHDL 的敏感度列表中,我可以修改进程中的信号吗?