DXF Graphic Entity Base Class
=============================

.. module:: ezdxf.entities
    :noindex:

Common base class for all graphical DXF entities.

This entities resides in entity spaces like :class:`~ezdxf.layouts.Modelspace`, any :class:`~ezdxf.layouts.Paperspace`
or :class:`~ezdxf.layouts.BlockLayout`.

============ =================================
Subclass of  :class:`ezdxf.entities.DXFEntity`
============ =================================

.. warning::

    Do not instantiate entity classes by yourself - always use the provided factory functions!

.. class:: DXFGraphic

    .. attribute:: rgb

        Get/set DXF attribute :attr:`dxf.true_color` as ``(r, g, b)`` tuple, returns ``None`` if attribute
        :attr:`dxf.true_color` is not set.

        .. code-block:: python

            entity.rgb = (30, 40, 50)
            r, g, b = entity.rgb

        This is the recommend method to get/set RGB values, when ever possible do not use the DXF low level attribute
        :attr:`dxf.true_color`.


    .. attribute:: transparency

        Get/set transparency value as float. Value range ``0`` to ``1``, where ``0`` means entity is opaque and
        ``1`` means entity is 100% transparent (invisible). This is the recommend method to get/set transparency
        values, when ever possible do not use the DXF low level attribute :attr:`DXFGraphic.dxf.transparency`

        This attribute requires DXF R2004 or later, returns ``0`` for prior DXF versions
        and raises :class:`DXFAttributeError` for setting `transparency` in older DXF versions.

    .. automethod:: ocs() -> OCS

    .. automethod:: get_layout() -> BaseLayout

    .. automethod:: unlink_from_layout

    .. automethod:: copy_to_layout(layout: BaseLayout) -> DXFEntity

    .. automethod:: move_to_layout(layout: BaseLayout, source: BaseLayout=None)

    .. automethod:: graphic_properties

    .. automethod:: has_hyperlink

    .. automethod:: get_hyperlink

    .. automethod:: set_hyperlink

    .. automethod:: transform(t: Matrix44) -> DXFGraphic

    .. automethod:: translate(dx: float, dy: float, dz: float) -> DXFGraphic

    .. automethod:: scale(sx: float, sy: float, sz: float) -> DXFGraphic

    .. automethod:: scale_uniform(s: float) -> DXFGraphic

    .. automethod:: rotate_x(angle: float) -> DXFGraphic

    .. automethod:: rotate_y(angle: float) -> DXFGraphic

    .. automethod:: rotate_z(angle: float) -> DXFGraphic

    .. automethod:: rotate_axis(axis: Vector, angle: float) -> DXFGraphic

.. _Common graphical DXF attributes:

Common graphical DXF attributes
-------------------------------

    .. attribute:: DXFGraphic.dxf.layer

        Layer name as string; default = ``'0'``

    .. attribute:: DXFGraphic.dxf.linetype

        Linetype as string, special names ``'BYLAYER'``, ``'BYBLOCK'``; default value is ``'BYLAYER'``

    .. attribute:: DXFGraphic.dxf.color

        :ref:`aci`,  default = ``256``

        Constants defined in :mod:`ezdxf.lldxf.const`

        === =========
        0   BYBLOCK
        256 BYLAYER
        257 BYOBJECT
        === =========

    .. attribute:: DXFGraphic.dxf.lineweight

        Line weight in mm times 100 (e.g. 0.13mm = 13). There are fixed valid lineweights which are accepted by AutoCAD,
        other values prevents AutoCAD from loading the DXF document, BricsCAD isn't that picky. (requires DXF R2000)

        Constants defined in :mod:`ezdxf.lldxf.const`

        === ==================
        -1  LINEWEIGHT_BYLAYER
        -2  LINEWEIGHT_BYBLOCK
        -3  LINEWEIGHT_DEFAULT
        === ==================

        Valid DXF lineweights stored in ``VALID_DXF_LINEWEIGHTS``:
        0, 5, 9, 13, 15, 18, 20, 25, 30, 35, 40, 50, 53, 60, 70, 80, 90, 100, 106, 120, 140, 158, 200, 211

    .. attribute:: DXFGraphic.dxf.ltscale

        Line type scale as float; default = ``1.0`` (requires DXF R2000)

    .. attribute:: DXFGraphic.dxf.invisible

        ``1`` for invisible, ``0`` for visible; default = ``0`` (requires DXF R2000)

    .. attribute:: DXFGraphic.dxf.paperspace

        ``0`` for entity resides in modelspace or a block, ``1`` for paperspace, this attribute is set automatically by
        adding an entity to a layout (feature for experts); default = ``0``

    .. attribute:: DXFGraphic.dxf.extrusion

        Extrusion direction as 3D vector; default = ``(0, 0, 1)``

    .. attribute:: DXFGraphic.dxf.thickness

        Entity thickness as float; default = ``0.0`` (requires DXF R2000)

    .. attribute:: DXFGraphic.dxf.true_color

        True color value as int ``0x00RRGGBB``, use :attr:`DXFGraphic.rgb` to get/set true color values as ``(r, g, b)``
        tuples. (requires DXF R2004)

    .. attribute:: DXFGraphic.dxf.color_name

        Color name as string. (requires DXF R2004)

    .. attribute:: DXFGraphic.dxf.transparency

        Transparency value as int, ``0x020000TT`` ``0x00`` = 100% transparent / ``0xFF`` = opaque, use
        :attr:`DXFGraphic.transparency` to get/set transparency as float value.

        (requires DXF R2004)

    .. attribute:: DXFGraphic.dxf.shadow_mode

        === ==========================
        0   casts and receives shadows
        1   casts shadows
        2   receives shadows
        3   ignores shadows
        === ==========================

        (requires DXF R2007)