Ezdxf в django- не записывается в файл или не работает

В настоящее время я занимаюсь созданием веб-приложения с использованием Django и ezdxf. Конечной целью является вывод содержимого 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 я не пытаюсь синхронно представить файл. скорее, он попадает в папку static и к нему обращается следующая страница. Для последующих функций мне нужны эти файлы в базе данных.

Сталкивался ли кто-нибудь с подобными проблемами? Я думаю, что проблема заключается в том, что набор инструкций рисования не выполняется. Я не уверен, является ли эта проблема результатом запуска ezdxf из django, или это просто вопрос наследования инстанцированного класса рисования?

Вернуться на верх