1 // stable
2 #define DWG_TYPE DWG_TYPE_LIGHT
3 #include "common.c"
4
5 void
6 api_process (dwg_object *obj)
7 {
8 int error, isnew;
9 BITCODE_BL class_version;
10 BITCODE_T name;
11 BITCODE_BL type;
12 BITCODE_B status;
13 BITCODE_CMC light_color;
14 BITCODE_B plot_glyph;
15 BITCODE_BD intensity;
16 BITCODE_3BD position;
17 BITCODE_3BD target;
18 BITCODE_BL attenuation_type;
19 BITCODE_B use_attenuation_limits;
20 BITCODE_BD attenuation_start_limit;
21 BITCODE_BD attenuation_end_limit;
22 BITCODE_BD hotspot_angle;
23 BITCODE_BD falloff_angle;
24 BITCODE_B cast_shadows;
25 BITCODE_BL shadow_type;
26 BITCODE_BS shadow_map_size;
27 BITCODE_RC shadow_map_softness;
28
29 BITCODE_B is_photometric;
30 BITCODE_B has_photometric_data;
31 BITCODE_B has_webfile;
32 BITCODE_T webfile;
33 BITCODE_BS physical_intensity_method;
34 BITCODE_BD physical_intensity;
35 BITCODE_BD illuminance_dist;
36 BITCODE_BS lamp_color_type;
37 BITCODE_BD lamp_color_temp;
38 BITCODE_BS lamp_color_preset;
39 BITCODE_BL lamp_color_rgb;
40 BITCODE_3BD web_rotation;
41 BITCODE_BS extlight_shape;
42 BITCODE_BD extlight_length;
43 BITCODE_BD extlight_width;
44 BITCODE_BD extlight_radius;
45 BITCODE_BS webfile_type;
46 BITCODE_BS web_symetry;
47 BITCODE_BS has_target_grip;
48 BITCODE_BD web_flux;
49 BITCODE_BD web_angle1;
50 BITCODE_BD web_angle2;
51 BITCODE_BD web_angle3;
52 BITCODE_BD web_angle4;
53 BITCODE_BD web_angle5;
54 BITCODE_BS glyph_display_type;
55
56 dwg_ent_light *light = dwg_object_to_LIGHT (obj);
57
58 CHK_ENTITY_TYPE (light, LIGHT, class_version, BL);
59 CHK_ENTITY_UTF8TEXT (light, LIGHT, name);
60 CHK_ENTITY_TYPE (light, LIGHT, type, BL);
61 CHK_ENTITY_MAX (light, LIGHT, type, BL, 3);
62 CHK_ENTITY_TYPE (light, LIGHT, status, B);
63 CHK_ENTITY_CMC (light, LIGHT, light_color);
64 CHK_ENTITY_TYPE (light, LIGHT, plot_glyph, B);
65 CHK_ENTITY_TYPE (light, LIGHT, intensity, BD); // max 100.0?
66 CHK_ENTITY_3RD (light, LIGHT, position);
67 CHK_ENTITY_3RD (light, LIGHT, target);
68 CHK_ENTITY_TYPE (light, LIGHT, attenuation_type, BL);
69 CHK_ENTITY_MAX (light, LIGHT, attenuation_type, BL, 2);
70 CHK_ENTITY_TYPE (light, LIGHT, use_attenuation_limits, B);
71 CHK_ENTITY_TYPE (light, LIGHT, attenuation_start_limit, BD);
72 CHK_ENTITY_TYPE (light, LIGHT, attenuation_end_limit, BD);
73 CHK_ENTITY_TYPE (light, LIGHT, hotspot_angle, BD);
74 CHK_ENTITY_MAX (light, LIGHT, hotspot_angle, BD, MAX_ANGLE);
75 CHK_ENTITY_TYPE (light, LIGHT, falloff_angle, BD);
76 CHK_ENTITY_MAX (light, LIGHT, falloff_angle, BD, MAX_ANGLE);
77 CHK_ENTITY_TYPE (light, LIGHT, cast_shadows, B);
78 CHK_ENTITY_TYPE (light, LIGHT, shadow_type, BL);
79 CHK_ENTITY_MAX (light, LIGHT, shadow_type, BL, 1);
80 CHK_ENTITY_TYPE (light, LIGHT, shadow_map_size, BS);
81 CHK_ENTITY_MAX (light, LIGHT, shadow_map_size, BS, 4096);
82 CHK_ENTITY_TYPE (light, LIGHT, shadow_map_softness, RC);
83 CHK_ENTITY_MAX (light, LIGHT, shadow_map_softness, RC, 10);
84
85 CHK_ENTITY_TYPE (light, LIGHT, is_photometric, B);
86 CHK_ENTITY_TYPE (light, LIGHT, has_photometric_data, B);
87 if (is_photometric && has_photometric_data)
88 {
89 CHK_ENTITY_TYPE (light, LIGHT, has_webfile, B);
90 CHK_ENTITY_UTF8TEXT (light, LIGHT, webfile);
91 CHK_ENTITY_TYPE (light, LIGHT, physical_intensity_method, BS);
92 CHK_ENTITY_TYPE (light, LIGHT, physical_intensity, BD);
93 CHK_ENTITY_TYPE (light, LIGHT, illuminance_dist, BD);
94 CHK_ENTITY_TYPE (light, LIGHT, lamp_color_type, BS);
95 CHK_ENTITY_MAX (light, LIGHT, lamp_color_type, BS, 1);
96 CHK_ENTITY_TYPE (light, LIGHT, lamp_color_temp, BD);
97 CHK_ENTITY_TYPE (light, LIGHT, lamp_color_preset, BS);
98 // CHK_ENTITY_TYPE (light, LIGHT, lamp_color_rgb, BL);
99 CHK_ENTITY_3RD (light, LIGHT, web_rotation);
100 CHK_ENTITY_TYPE (light, LIGHT, extlight_shape, BS);
101 CHK_ENTITY_MAX (light, LIGHT, extlight_shape, BS, 4);
102 CHK_ENTITY_TYPE (light, LIGHT, extlight_length, BD);
103 CHK_ENTITY_TYPE (light, LIGHT, extlight_width, BD);
104 CHK_ENTITY_TYPE (light, LIGHT, extlight_radius, BD);
105 CHK_ENTITY_TYPE (light, LIGHT, webfile_type, BS);
106 CHK_ENTITY_TYPE (light, LIGHT, web_symetry, BS);
107 CHK_ENTITY_TYPE (light, LIGHT, has_target_grip, BS);
108 CHK_ENTITY_MAX (light, LIGHT, has_target_grip, BS, 1);
109 CHK_ENTITY_TYPE (light, LIGHT, web_flux, BD);
110 CHK_ENTITY_TYPE (light, LIGHT, web_angle1, BD);
111 CHK_ENTITY_TYPE (light, LIGHT, web_angle2, BD);
112 CHK_ENTITY_TYPE (light, LIGHT, web_angle3, BD);
113 CHK_ENTITY_TYPE (light, LIGHT, web_angle4, BD);
114 CHK_ENTITY_TYPE (light, LIGHT, web_angle5, BD);
115 CHK_ENTITY_MAX (light, LIGHT, web_angle1, BD, MAX_ANGLE);
116 CHK_ENTITY_MAX (light, LIGHT, web_angle2, BD, MAX_ANGLE);
117 CHK_ENTITY_MAX (light, LIGHT, web_angle3, BD, MAX_ANGLE);
118 CHK_ENTITY_MAX (light, LIGHT, web_angle4, BD, MAX_ANGLE);
119 CHK_ENTITY_MAX (light, LIGHT, web_angle5, BD, MAX_ANGLE);
120 CHK_ENTITY_TYPE (light, LIGHT, glyph_display_type, BS);
121 CHK_ENTITY_MAX (light, LIGHT, glyph_display_type, BS, 2);
122 }
123 }