Import_3ds: Improved distance cue node setup
[blender-addons.git] / io_import_dxf / dxfgrabber / dxfobjects.py
blobc9ce117146462879cbbbfceb12f612156a449312
1 # SPDX-FileCopyrightText: 2016 Manfred Moitzi (mozman)
3 # SPDX-License-Identifier: MIT
5 # Purpose: objects classes
6 # Created: 17.04.2016
8 from __future__ import unicode_literals
9 __author__ = "mozman <mozman@gmx.at>"
11 from datetime import datetime
12 from .juliandate import calendar_date
15 class DXFObject(object):
16 def __init__(self):
17 self.dxftype = 'ENTITY'
18 self.handle = None
19 self.owner = None
21 def setup_attributes(self, tags):
22 self.dxftype = tags.get_type()
23 for code, value in tags.plain_tags():
24 if code == 5: # special case 105 handled by STYLE TABLE
25 self.handle = value
26 elif code == 330:
27 self.owner = value
28 else:
29 yield code, value # chain of generators
32 def unpack_seconds(seconds):
33 seconds = int(seconds / 1000) # remove 1/1000 part
34 hours = int(seconds / 3600)
35 seconds = int(seconds % 3600)
36 minutes = int(seconds / 60)
37 seconds = int(seconds % 60)
38 return hours, minutes, seconds
41 class Sun(DXFObject):
42 def __init__(self):
43 super(Sun, self).__init__()
44 self.version = 1
45 self.status = False
46 self.sun_color = None
47 self.intensity = 0.
48 self.shadows = False
49 self.date = datetime.now()
50 self.daylight_savings_time = False
51 self.shadow_type = 0
52 self.shadow_map_size = 0
53 self.shadow_softness = 0.
55 def setup_attributes(self, tags):
56 date = 0
57 time = 0
58 for code, value in super(Sun, self).setup_attributes(tags):
59 if code == 40:
60 self.intensity = value
61 elif code == 63:
62 self.sun_color = value
63 elif code == 70:
64 self.shadow_type = value
65 elif code == 71:
66 self.shadow_map_size = value
67 elif code == 90:
68 self.version = value
69 elif code == 91:
70 date = value
71 elif code == 92:
72 time = value
73 elif code == 280:
74 self.shadow_softness = value
75 elif code == 290:
76 self.status = bool(value)
77 elif code == 291:
78 self.shadows = bool(value)
79 elif code == 292:
80 self.daylight_savings_time = bool(value)
81 else:
82 yield code, value # chain of generators
84 if date > 0:
85 date = calendar_date(date)
86 else:
87 date = datetime.now()
88 hours, minutes, seconds = unpack_seconds(time)
89 self.date = datetime(date.year, date.month, date.day, hours, minutes, seconds)
91 ObjectsTable = {
92 'SUN': Sun,
96 def objects_factory(tags):
97 dxftype = tags.get_type()
98 cls = ObjectsTable.get(dxftype, DXFObject) # get object class
99 entity = cls() # call constructor
100 list(entity.setup_attributes(tags)) # setup dxf attributes - chain of generators
101 return entity