Как написать зеркальный текст с 'ezdxf'? - PullRequest
1 голос
/ 27 марта 2019

Мне нужно написать текст в зеркальном отображении DXF.Я использую модуль python и ezdxf.В соответствии с документацией есть некоторые флаги, которые нужно установить, но я всегда получаю DXFAttributeError.

Я пытаюсь использовать 'text_generation_flags': 2 и 'text_direction': (-1, 0, 0)

Вот мой код (хорошо работает без попытки зеркалирования)


def publish_face_no_bolts(poly, label, filename):

    t = poly.get_default_transformation()
    trans_poly = poly.transform(t)
    # trans_poly = trans_poly.make_coordinates_positive()
    points = transformation.points_3d_to_2d(trans_poly.poly_points)
    points.append(points[0]) # must close polygon

    drawing = ezdxf.new(dxfversion='AC1024')  # or use the AutoCAD release name ezdxf.new(dxfversion='R2010')
    modelspace = drawing.modelspace()

    modelspace.add_lwpolyline(points, dxfattribs={'color': 7})

    drawing.layers.new('TEXTLAYER', dxfattribs={'color': 1})

    # use set_pos() for proper TEXT alignment - the relations between halign, valign, insert and align_point are tricky.


    # drawing.styles.new('mirrored', dxfattribs={'text_generation_flags': 2})
    # 'text_direction': (0, 1, 0),  # write in y direction
    drawing.styles.new('mirrored', dxfattribs={ 'text_direction': (-1, 0, 0)})

    err, cx, cy = polygon.centroid2d(points)

    modelspace.add_text(label, dxfattribs={'layer': 'TEXTLAYER', 'text_direction': (-1, 0, 0), 'height': 4}).set_pos((cx, cy), align='CENTER')
    drawing.saveas(filename)

Какой флаг использовать и как его правильно установить?

1 Ответ

0 голосов
/ 28 марта 2019

Я не использовал ezdxf, но text_direction является свойством сущности MTEXT (группа 11 DXF) и является другим способом эффективного управления вращением MText.

Для отраженияоднострочный TEXT объект, вы захотите установить для группы DXF 71 значение 2, которое после краткого просмотра кода для ezdxf выглядит как параметр text_generation_flag.

Следовательно, я бы предложил:

modelspace.add_text(label, dxfattribs={'layer': 'TEXTLAYER', 'text_generation_flag': 2, 'height': 4}).set_pos((cx, cy), align='CENTER')
...