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