dxf_input.py возвращает ZeroDivisionError при открытии файла dxf - PullRequest
2 голосов
/ 13 июня 2019

У меня есть файл dxf , который я экспортировал из SolidWorks. Я хочу использовать Inkscape, чтобы открыть их, изменить и отправить на лазерную резку. Однако, когда я открываю их, я получаю эту ошибку:

         <img src="https://i.stack.imgur.com/ApaVb.png" width="500">
Inkscape has received additional data from the
script executed. The script did not return an error,
but this may indicate the result will not be as expected

, а затем

Traceback (most recent call last):
File "dxf_input.py", line 443, in <module>
w = 90.0/25.4*vals[groups['370']][0]/00.0
ZeroDivisionError: float division by zero

Я открыл файл в другом программном обеспечении, например LibreCAD, и он работает просто отлично. Еще более странно, что файлы прекрасно открываются на macOS и других компьютерах с Windows. Я пытался удалить и переустановить программное обеспечение несколько раз, но это тоже не помогло.

Моя среда:

  • Inkscape Inkscape 0.92.4 (5da689c313, 2019-01-14), установленный через Chocolatey
  • Windows 10 Версия 1809

Буду признателен, если вы поможете мне узнать, в чем заключается проблема и как я могу ее решить.

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Моей первой мыслью было, что синтаксический анализатор не учел вероятность того, что значение группы DXF 370 будет равно нулю (поскольку допустим нулевой вес), но в эта версия из dxf_input.py перед делением проверяется, равна ли группа DXF 370 (вес линии) нулю:

if vals[groups['370']]:                 # Common Lineweight
    if vals[groups['370']][0] > 0:      # <-------------------- HERE
        w = 96.0/25.4*vals[groups['370']][0]/100.0
        if w < 0.5:
            w = 0.5

И поэтому я не верю, что это проблема.

Затем я заметил, что странно, что значение 100.0 из приведенного выше показывает как 0.00 в вашей трассировке:

Traceback (most recent call last):
File "dxf_input.py", line 443, in <module>
w = 90.0/25.4*vals[groups['370']][0]/00.0 # <-------------------- This is 100.0 in the code
ZeroDivisionError: float division by zero

Следовательно, возможно, это может быть опечатка, представленная в предварительном выпуске v0.92.4, как в v0.91 из dxf_input.py Я могу подтвердить, что эта строка выглядит так:

w = 90.0/25.4*vals[groups['370']][0]/100.0

Чтобы проверить, является ли это причиной ошибки, вы можете просмотреть источник dxf_input.py, перейдя к C:\Program Files\Inkscape\share\extensions и открыв файл в соответствующем редакторе кода, таком как Notepad ++.

Найдите w = 90.0/25.4 в исходном коде и убедитесь, что деление на 100.0 вместо 00.0.

0 голосов
/ 14 июня 2019

Проблема заключалась в том, что в папку %USERPROFILE%\AppData\Roaming\Inkscape\extensions была установлена ​​более старая версия расширения dxf_input, включая dxf_input.py и dxf_input.inx. В результате, независимо от того, сколько раз я удалял и переустанавливал Inkscape, ошибка сохранялась. Эта более старая версия, как отметил Ли в другом ответе, имела строчку

w = 90.0/25.4*vals[groups['370']][0]/00.0

удаление этих файлов решило проблему. Я не помню, когда и где я установил эти файлы, в противном случае, я бы пошел и сообщил о проблеме или поставил PR, чтобы исправить эту ошибку.

...