1 /*
2     Copyright (c) 2008-2009 NetAllied Systems GmbH
3 
4     This file is part of MayaDataModel.
5 
6     Licensed under the MIT Open Source License,
7     for details please see LICENSE file or the website
8     http://www.opensource.org/licenses/mit-license.php
9 */
10 #ifndef __MayaDM_DIRECTIONALLIGHT_H__
11 #define __MayaDM_DIRECTIONALLIGHT_H__
12 #include "MayaDMTypes.h"
13 #include "MayaDMConnectables.h"
14 #include "MayaDMNonExtendedLightShapeNode.h"
15 namespace MayaDM
16 {
17 class DirectionalLight : public NonExtendedLightShapeNode
18 {
19 public:
20 	struct MentalRayControls{
21 		bool miExportMrLight;
22 		bool emitPhotons;
23 		float3 energy;
24 		float photonIntensity;
25 		float exponent;
26 		int causticPhotons;
27 		int globIllPhotons;
28 		bool shadowMap;
29 		int smapResolution;
30 		short smapSamples;
31 		float smapSoftness;
32 		float smapBias;
33 		string smapFilename;
34 		bool smapLightName;
35 		bool smapSceneName;
36 		bool smapFrameExt;
37 		bool smapDetail;
38 		short smapDetailSamples;
39 		float smapDetailAccuracy;
40 		bool smapDetailAlpha;
writeMentalRayControls41 		void write(FILE* file) const
42 		{
43 			fprintf(file,"%i ", miExportMrLight);
44 			fprintf(file,"%i ", emitPhotons);
45 			energy.write(file);
46 			fprintf(file, " ");
47 			fprintf(file,"%f ", photonIntensity);
48 			fprintf(file,"%f ", exponent);
49 			fprintf(file,"%i ", causticPhotons);
50 			fprintf(file,"%i ", globIllPhotons);
51 			fprintf(file,"%i ", shadowMap);
52 			fprintf(file,"%i ", smapResolution);
53 			fprintf(file,"%i ", smapSamples);
54 			fprintf(file,"%f ", smapSoftness);
55 			fprintf(file,"%f ", smapBias);
56 			smapFilename.write(file);
57 			fprintf(file, " ");
58 			fprintf(file,"%i ", smapLightName);
59 			fprintf(file,"%i ", smapSceneName);
60 			fprintf(file,"%i ", smapFrameExt);
61 			fprintf(file,"%i ", smapDetail);
62 			fprintf(file,"%i ", smapDetailSamples);
63 			fprintf(file,"%f ", smapDetailAccuracy);
64 			fprintf(file,"%i", smapDetailAlpha);
65 		}
66 	};
67 public:
68 
DirectionalLight()69 	DirectionalLight():NonExtendedLightShapeNode(){}
70 	DirectionalLight(FILE* file,const std::string& name,const std::string& parent="",bool shared=false,bool create=true)
71 		:NonExtendedLightShapeNode(file, name, parent, "directionalLight", shared, create){}
~DirectionalLight()72 	virtual ~DirectionalLight(){}
73 
setUseLightPosition(bool up)74 	void setUseLightPosition(bool up)
75 	{
76 		if(up == false) return;
77 		fprintf(mFile,"\tsetAttr \".up\" %i;\n", up);
78 	}
setObjectType(char ot)79 	void setObjectType(char ot)
80 	{
81 		if(ot == 1) return;
82 		fprintf(mFile,"\tsetAttr \".ot\" %;\n", ot);
83 	}
setLightAngle(float lang)84 	void setLightAngle(float lang)
85 	{
86 		if(lang == 0.0) return;
87 		fprintf(mFile,"\tsetAttr \".lang\" %f;\n", lang);
88 	}
setPointWorld(const float3 & pw)89 	void setPointWorld(const float3& pw)
90 	{
91 		if(pw == float3(1.0f,1.0f,1.0f)) return;
92 		fprintf(mFile,"\tsetAttr \".pw\" -type \"float3\" ");
93 		pw.write(mFile);
94 		fprintf(mFile,";\n");
95 	}
setPointWorldX(float tx)96 	void setPointWorldX(float tx)
97 	{
98 		if(tx == 0.0) return;
99 		fprintf(mFile,"\tsetAttr \".pw.tx\" %f;\n", tx);
100 	}
setPointWorldY(float ty)101 	void setPointWorldY(float ty)
102 	{
103 		if(ty == 0.0) return;
104 		fprintf(mFile,"\tsetAttr \".pw.ty\" %f;\n", ty);
105 	}
setPointWorldZ(float tz)106 	void setPointWorldZ(float tz)
107 	{
108 		if(tz == 0.0) return;
109 		fprintf(mFile,"\tsetAttr \".pw.tz\" %f;\n", tz);
110 	}
setMentalRayControls(const MentalRayControls & mrc)111 	void setMentalRayControls(const MentalRayControls& mrc)
112 	{
113 		fprintf(mFile,"\tsetAttr \".mrc\" ");
114 		mrc.write(mFile);
115 		fprintf(mFile,";\n");
116 	}
setMiExportMrLight(bool milt)117 	void setMiExportMrLight(bool milt)
118 	{
119 		if(milt == false) return;
120 		fprintf(mFile,"\tsetAttr \".mrc.milt\" %i;\n", milt);
121 	}
setEmitPhotons(bool phot)122 	void setEmitPhotons(bool phot)
123 	{
124 		if(phot == false) return;
125 		fprintf(mFile,"\tsetAttr \".mrc.phot\" %i;\n", phot);
126 	}
setEnergy(const float3 & eng)127 	void setEnergy(const float3& eng)
128 	{
129 		fprintf(mFile,"\tsetAttr \".mrc.eng\" -type \"float3\" ");
130 		eng.write(mFile);
131 		fprintf(mFile,";\n");
132 	}
setEnergyR(float engr)133 	void setEnergyR(float engr)
134 	{
135 		if(engr == 8000) return;
136 		fprintf(mFile,"\tsetAttr \".mrc.eng.engr\" %f;\n", engr);
137 	}
setEnergyG(float engg)138 	void setEnergyG(float engg)
139 	{
140 		if(engg == 8000) return;
141 		fprintf(mFile,"\tsetAttr \".mrc.eng.engg\" %f;\n", engg);
142 	}
setEnergyB(float engb)143 	void setEnergyB(float engb)
144 	{
145 		if(engb == 8000) return;
146 		fprintf(mFile,"\tsetAttr \".mrc.eng.engb\" %f;\n", engb);
147 	}
setPhotonIntensity(float phi)148 	void setPhotonIntensity(float phi)
149 	{
150 		if(phi == 1) return;
151 		fprintf(mFile,"\tsetAttr \".mrc.phi\" %f;\n", phi);
152 	}
setExponent(float exp)153 	void setExponent(float exp)
154 	{
155 		if(exp == 2) return;
156 		fprintf(mFile,"\tsetAttr \".mrc.exp\" %f;\n", exp);
157 	}
setCausticPhotons(int cph)158 	void setCausticPhotons(int cph)
159 	{
160 		if(cph == 10000) return;
161 		fprintf(mFile,"\tsetAttr \".mrc.cph\" %i;\n", cph);
162 	}
setGlobIllPhotons(int gph)163 	void setGlobIllPhotons(int gph)
164 	{
165 		if(gph == 10000) return;
166 		fprintf(mFile,"\tsetAttr \".mrc.gph\" %i;\n", gph);
167 	}
setShadowMap(bool usm)168 	void setShadowMap(bool usm)
169 	{
170 		if(usm == false) return;
171 		fprintf(mFile,"\tsetAttr \".mrc.usm\" %i;\n", usm);
172 	}
setSmapResolution(int smr)173 	void setSmapResolution(int smr)
174 	{
175 		if(smr == 256) return;
176 		fprintf(mFile,"\tsetAttr \".mrc.smr\" %i;\n", smr);
177 	}
setSmapSamples(short smsa)178 	void setSmapSamples(short smsa)
179 	{
180 		if(smsa == 1) return;
181 		fprintf(mFile,"\tsetAttr \".mrc.smsa\" %i;\n", smsa);
182 	}
setSmapSoftness(float smso)183 	void setSmapSoftness(float smso)
184 	{
185 		if(smso == 0) return;
186 		fprintf(mFile,"\tsetAttr \".mrc.smso\" %f;\n", smso);
187 	}
setSmapBias(float smb)188 	void setSmapBias(float smb)
189 	{
190 		if(smb == 0) return;
191 		fprintf(mFile,"\tsetAttr \".mrc.smb\" %f;\n", smb);
192 	}
setSmapFilename(const string & smf)193 	void setSmapFilename(const string& smf)
194 	{
195 		if(smf == "NULL") return;
196 		fprintf(mFile,"\tsetAttr \".mrc.smf\" -type \"string\" ");
197 		smf.write(mFile);
198 		fprintf(mFile,";\n");
199 	}
setSmapLightName(bool smln)200 	void setSmapLightName(bool smln)
201 	{
202 		if(smln == 0) return;
203 		fprintf(mFile,"\tsetAttr \".mrc.smln\" %i;\n", smln);
204 	}
setSmapSceneName(bool smsn)205 	void setSmapSceneName(bool smsn)
206 	{
207 		if(smsn == 0) return;
208 		fprintf(mFile,"\tsetAttr \".mrc.smsn\" %i;\n", smsn);
209 	}
setSmapFrameExt(bool smfe)210 	void setSmapFrameExt(bool smfe)
211 	{
212 		if(smfe == 0) return;
213 		fprintf(mFile,"\tsetAttr \".mrc.smfe\" %i;\n", smfe);
214 	}
setSmapDetail(bool smd)215 	void setSmapDetail(bool smd)
216 	{
217 		if(smd == 0) return;
218 		fprintf(mFile,"\tsetAttr \".mrc.smd\" %i;\n", smd);
219 	}
setSmapDetailSamples(short sds)220 	void setSmapDetailSamples(short sds)
221 	{
222 		if(sds == 0) return;
223 		fprintf(mFile,"\tsetAttr \".mrc.sds\" %i;\n", sds);
224 	}
setSmapDetailAccuracy(float sdac)225 	void setSmapDetailAccuracy(float sdac)
226 	{
227 		if(sdac == 0) return;
228 		fprintf(mFile,"\tsetAttr \".mrc.sdac\" %f;\n", sdac);
229 	}
setSmapDetailAlpha(bool sdal)230 	void setSmapDetailAlpha(bool sdal)
231 	{
232 		if(sdal == 0) return;
233 		fprintf(mFile,"\tsetAttr \".mrc.sdal\" %i;\n", sdal);
234 	}
getUseLightPosition()235 	void getUseLightPosition()const
236 	{
237 		fprintf(mFile,"\"%s.up\"",mName.c_str());
238 	}
getObjectType()239 	void getObjectType()const
240 	{
241 		fprintf(mFile,"\"%s.ot\"",mName.c_str());
242 	}
getLightAngle()243 	void getLightAngle()const
244 	{
245 		fprintf(mFile,"\"%s.lang\"",mName.c_str());
246 	}
getPointWorld()247 	void getPointWorld()const
248 	{
249 		fprintf(mFile,"\"%s.pw\"",mName.c_str());
250 	}
getPointWorldX()251 	void getPointWorldX()const
252 	{
253 		fprintf(mFile,"\"%s.pw.tx\"",mName.c_str());
254 	}
getPointWorldY()255 	void getPointWorldY()const
256 	{
257 		fprintf(mFile,"\"%s.pw.ty\"",mName.c_str());
258 	}
getPointWorldZ()259 	void getPointWorldZ()const
260 	{
261 		fprintf(mFile,"\"%s.pw.tz\"",mName.c_str());
262 	}
getMentalRayControls()263 	void getMentalRayControls()const
264 	{
265 		fprintf(mFile,"\"%s.mrc\"",mName.c_str());
266 	}
getMiExportMrLight()267 	void getMiExportMrLight()const
268 	{
269 		fprintf(mFile,"\"%s.mrc.milt\"",mName.c_str());
270 	}
getMiLightShader()271 	void getMiLightShader()const
272 	{
273 		fprintf(mFile,"\"%s.mrc.mils\"",mName.c_str());
274 	}
getMiPhotonEmitter()275 	void getMiPhotonEmitter()const
276 	{
277 		fprintf(mFile,"\"%s.mrc.mipe\"",mName.c_str());
278 	}
getEmitPhotons()279 	void getEmitPhotons()const
280 	{
281 		fprintf(mFile,"\"%s.mrc.phot\"",mName.c_str());
282 	}
getEnergy()283 	void getEnergy()const
284 	{
285 		fprintf(mFile,"\"%s.mrc.eng\"",mName.c_str());
286 	}
getEnergyR()287 	void getEnergyR()const
288 	{
289 		fprintf(mFile,"\"%s.mrc.eng.engr\"",mName.c_str());
290 	}
getEnergyG()291 	void getEnergyG()const
292 	{
293 		fprintf(mFile,"\"%s.mrc.eng.engg\"",mName.c_str());
294 	}
getEnergyB()295 	void getEnergyB()const
296 	{
297 		fprintf(mFile,"\"%s.mrc.eng.engb\"",mName.c_str());
298 	}
getPhotonIntensity()299 	void getPhotonIntensity()const
300 	{
301 		fprintf(mFile,"\"%s.mrc.phi\"",mName.c_str());
302 	}
getExponent()303 	void getExponent()const
304 	{
305 		fprintf(mFile,"\"%s.mrc.exp\"",mName.c_str());
306 	}
getCausticPhotons()307 	void getCausticPhotons()const
308 	{
309 		fprintf(mFile,"\"%s.mrc.cph\"",mName.c_str());
310 	}
getGlobIllPhotons()311 	void getGlobIllPhotons()const
312 	{
313 		fprintf(mFile,"\"%s.mrc.gph\"",mName.c_str());
314 	}
getShadowMap()315 	void getShadowMap()const
316 	{
317 		fprintf(mFile,"\"%s.mrc.usm\"",mName.c_str());
318 	}
getSmapResolution()319 	void getSmapResolution()const
320 	{
321 		fprintf(mFile,"\"%s.mrc.smr\"",mName.c_str());
322 	}
getSmapSamples()323 	void getSmapSamples()const
324 	{
325 		fprintf(mFile,"\"%s.mrc.smsa\"",mName.c_str());
326 	}
getSmapSoftness()327 	void getSmapSoftness()const
328 	{
329 		fprintf(mFile,"\"%s.mrc.smso\"",mName.c_str());
330 	}
getSmapBias()331 	void getSmapBias()const
332 	{
333 		fprintf(mFile,"\"%s.mrc.smb\"",mName.c_str());
334 	}
getSmapCamera()335 	void getSmapCamera()const
336 	{
337 		fprintf(mFile,"\"%s.mrc.smc\"",mName.c_str());
338 	}
getSmapFilename()339 	void getSmapFilename()const
340 	{
341 		fprintf(mFile,"\"%s.mrc.smf\"",mName.c_str());
342 	}
getSmapLightName()343 	void getSmapLightName()const
344 	{
345 		fprintf(mFile,"\"%s.mrc.smln\"",mName.c_str());
346 	}
getSmapSceneName()347 	void getSmapSceneName()const
348 	{
349 		fprintf(mFile,"\"%s.mrc.smsn\"",mName.c_str());
350 	}
getSmapFrameExt()351 	void getSmapFrameExt()const
352 	{
353 		fprintf(mFile,"\"%s.mrc.smfe\"",mName.c_str());
354 	}
getSmapDetail()355 	void getSmapDetail()const
356 	{
357 		fprintf(mFile,"\"%s.mrc.smd\"",mName.c_str());
358 	}
getSmapDetailSamples()359 	void getSmapDetailSamples()const
360 	{
361 		fprintf(mFile,"\"%s.mrc.sds\"",mName.c_str());
362 	}
getSmapDetailAccuracy()363 	void getSmapDetailAccuracy()const
364 	{
365 		fprintf(mFile,"\"%s.mrc.sdac\"",mName.c_str());
366 	}
getSmapDetailAlpha()367 	void getSmapDetailAlpha()const
368 	{
369 		fprintf(mFile,"\"%s.mrc.sdal\"",mName.c_str());
370 	}
371 protected:
372 	DirectionalLight(FILE* file,const std::string& name,const std::string& parent,const std::string& nodeType,bool shared=false,bool create=true)
NonExtendedLightShapeNode(file,name,parent,nodeType,shared,create)373 		:NonExtendedLightShapeNode(file, name, parent, nodeType, shared, create) {}
374 
375 };
376 }//namespace MayaDM
377 #endif//__MayaDM_DIRECTIONALLIGHT_H__
378