Welcome to mirror list, hosted at ThFree Co, Russian Federation.

is_.py « dxfimport « io_import_dxf - git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 03ff69b065a0633276c55fc4ac33eaa85f6cc154 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# SPDX-License-Identifier: GPL-2.0-or-later

# <pep8 compliant>

from mathutils import Vector


_MESH_ENTITIES = frozenset(["POLYFACE", "POLYMESH", "MESH", "POINT", "3DFACE", "SOLID", "TRACE"])


def mesh_entity(entity):
    return entity.dxftype in _MESH_ENTITIES


def mesh(typestr):
    return typestr in _MESH_ENTITIES

_POLYS = frozenset(["LWPOLYLINE", "POLYLINE"])

def closed_poly_no_bulge(entity):
    return entity.dxftype in _POLYS and not any([b != 0 for b in entity.bulge]) and entity.is_closed


_CURVE_ENTITIES = frozenset(("POLYLINE", "POLYGON", "LWPOLYLINE", "SPLINE",
                             "CIRCLE", "ARC", "ELLIPSE", "LINE", "HELIX"))

def curve_entity(entity):
    return entity.dxftype in _CURVE_ENTITIES


def curve(typestr):
    return typestr in _CURVE_ENTITIES


_NURBS_ENTITIES = frozenset(("BODY", "REGION", "PLANESURFACE", "SURFACE", "3DSOLID"))


def nurbs_entity(entity):
    return entity.dxftype in _NURBS_ENTITIES


def nurbs(typestr):
    return typestr in _NURBS_ENTITIES


_TEXT_ENTITIES = frozenset(("MTEXT", "TEXT"))


def text_entity(entity):
    return entity.dxftype in _TEXT_ENTITIES


def text(typestr):
    return typestr in _TEXT_ENTITIES


def insert_entity(entity):
    return entity.dxftype == "INSERT"


def insert(typestr):
    return typestr == "INSERT"


def light_entity(entity):
    return entity.dxftype == "LIGHT"


def light(typestr):
    return typestr == "LIGHT"


def attrib(entity):
    return entity.dxftype == "ATTDEF"


def attrib(typestr):
    return typestr == "ATTDEF"


_2D_ENTITIES = frozenset(("CIRCLE", "ARC", "SOLID", "TRACE", "TEXT", "ATTRIB", "ATTDEF", "SHAPE",
                          "INSERT", "LWPOLYLINE", "HATCH", "IMAGE", "ELLIPSE"))


def _2D_entity(entity):
    return entity.dxftype in _2D_ENTITIES or (entity.dxftype == "POLYGON" and entity.mode == "spline2d")


def varying_width(entity):
    if hasattr(entity, "width"):
        ew = entity.width
        if hasattr(ew, "__iter__"):
            if len(ew) == 0:
                return False
            else:
                return ew.count(ew[0]) != len(ew) or ew[0][0] != ew[0][1]
    return False


_SEPERATED_ENTITIES = frozenset(("POLYFACE", "POLYMESH", "LIGHT", "MTEXT", "TEXT", "INSERT", "BLOCK"))


def separated_entity(entity):
    """
    Indicates if the entity should be imported to one single Blender object or if it can be merged with other entities.
    This depends not only on the type of a dxf-entity but also whether the width values are varying or all the same.
    """
    return entity.dxftype in _SEPERATED_ENTITIES or varying_width(entity)


def separated(typestr):
    return typestr in _SEPERATED_ENTITIES


_NOT_COMBINED_ENTITIES = frozenset(tuple(_SEPERATED_ENTITIES) + ("ATTDEF",))


def combined_entity(entity):
    return not separated_entity(entity) and not entity.dxftype == "ATTDEF"


def combined(typestr):
    return typestr not in _NOT_COMBINED_ENTITIES


def extrusion(entity):
    if entity.extrusion is None:
        return False
    return Vector(entity.extrusion) != Vector((0, 0, 1)) \
                    or (hasattr(entity, "elevation") and entity.elevation != 0)