1 # SPDX-FileCopyrightText: 2016 Manfred Moitzi (mozman)
3 # SPDX-License-Identifier: MIT
5 # Purpose: objects classes
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):
17 self
.dxftype
= 'ENTITY'
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
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
43 super(Sun
, self
).__init
__()
49 self
.date
= datetime
.now()
50 self
.daylight_savings_time
= False
52 self
.shadow_map_size
= 0
53 self
.shadow_softness
= 0.
55 def setup_attributes(self
, tags
):
58 for code
, value
in super(Sun
, self
).setup_attributes(tags
):
60 self
.intensity
= value
62 self
.sun_color
= value
64 self
.shadow_type
= value
66 self
.shadow_map_size
= value
74 self
.shadow_softness
= value
76 self
.status
= bool(value
)
78 self
.shadows
= bool(value
)
80 self
.daylight_savings_time
= bool(value
)
82 yield code
, value
# chain of generators
85 date
= calendar_date(date
)
88 hours
, minutes
, seconds
= unpack_seconds(time
)
89 self
.date
= datetime(date
.year
, date
.month
, date
.day
, hours
, minutes
, seconds
)
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