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_AREALIGHT_H__ 11 #define __MayaDM_AREALIGHT_H__ 12 #include "MayaDMTypes.h" 13 #include "MayaDMConnectables.h" 14 #include "MayaDMNonExtendedLightShapeNode.h" 15 namespace MayaDM 16 { 17 class AreaLight : 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 causticPhotonsEmit; 28 int globIllPhotons; 29 int globIllPhotonsEmit; 30 bool shadowMap; 31 int smapResolution; 32 short smapSamples; 33 float smapSoftness; 34 float smapBias; 35 string smapFilename; 36 bool smapLightName; 37 bool smapSceneName; 38 bool smapFrameExt; 39 bool smapDetail; 40 short smapDetailSamples; 41 float smapDetailAccuracy; 42 bool smapDetailAlpha; 43 struct SmapWindow{ 44 short smapWindowXMin; 45 short smapWindowYMin; 46 short smapWindowXMax; 47 short smapWindowYMax; writeMentalRayControls::SmapWindow48 void write(FILE* file) const 49 { 50 fprintf(file,"%i ", smapWindowXMin); 51 fprintf(file,"%i ", smapWindowYMin); 52 fprintf(file,"%i ", smapWindowXMax); 53 fprintf(file,"%i", smapWindowYMax); 54 } 55 } smapWindow; 56 bool smapMerge; 57 bool smapTrace; 58 bool areaLight; 59 unsigned int areaType; 60 float areaShapeIntensity; 61 short areaHiSamples; 62 short areaHiSampleLimit; 63 short areaLoSamples; 64 bool areaVisible; writeMentalRayControls65 void write(FILE* file) const 66 { 67 fprintf(file,"%i ", miExportMrLight); 68 fprintf(file,"%i ", emitPhotons); 69 energy.write(file); 70 fprintf(file, " "); 71 fprintf(file,"%f ", photonIntensity); 72 fprintf(file,"%f ", exponent); 73 fprintf(file,"%i ", causticPhotons); 74 fprintf(file,"%i ", causticPhotonsEmit); 75 fprintf(file,"%i ", globIllPhotons); 76 fprintf(file,"%i ", globIllPhotonsEmit); 77 fprintf(file,"%i ", shadowMap); 78 fprintf(file,"%i ", smapResolution); 79 fprintf(file,"%i ", smapSamples); 80 fprintf(file,"%f ", smapSoftness); 81 fprintf(file,"%f ", smapBias); 82 smapFilename.write(file); 83 fprintf(file, " "); 84 fprintf(file,"%i ", smapLightName); 85 fprintf(file,"%i ", smapSceneName); 86 fprintf(file,"%i ", smapFrameExt); 87 fprintf(file,"%i ", smapDetail); 88 fprintf(file,"%i ", smapDetailSamples); 89 fprintf(file,"%f ", smapDetailAccuracy); 90 fprintf(file,"%i ", smapDetailAlpha); 91 smapWindow.write(file); 92 fprintf(file, " "); 93 fprintf(file,"%i ", smapMerge); 94 fprintf(file,"%i ", smapTrace); 95 fprintf(file,"%i ", areaLight); 96 fprintf(file,"%i ", areaType); 97 fprintf(file,"%f ", areaShapeIntensity); 98 fprintf(file,"%i ", areaHiSamples); 99 fprintf(file,"%i ", areaHiSampleLimit); 100 fprintf(file,"%i ", areaLoSamples); 101 fprintf(file,"%i ", areaVisible); 102 } 103 }; 104 public: 105 AreaLight()106 AreaLight():NonExtendedLightShapeNode(){} 107 AreaLight(FILE* file,const std::string& name,const std::string& parent="",bool shared=false,bool create=true) 108 :NonExtendedLightShapeNode(file, name, parent, "areaLight", shared, create){} ~AreaLight()109 virtual ~AreaLight(){} 110 setPointWorld(const float3 & pw)111 void setPointWorld(const float3& pw) 112 { 113 if(pw == float3(1.0f,1.0f,1.0f)) return; 114 fprintf(mFile,"\tsetAttr \".pw\" -type \"float3\" "); 115 pw.write(mFile); 116 fprintf(mFile,";\n"); 117 } setPointWorldX(float tx)118 void setPointWorldX(float tx) 119 { 120 if(tx == 0.0) return; 121 fprintf(mFile,"\tsetAttr \".pw.tx\" %f;\n", tx); 122 } setPointWorldY(float ty)123 void setPointWorldY(float ty) 124 { 125 if(ty == 0.0) return; 126 fprintf(mFile,"\tsetAttr \".pw.ty\" %f;\n", ty); 127 } setPointWorldZ(float tz)128 void setPointWorldZ(float tz) 129 { 130 if(tz == 0.0) return; 131 fprintf(mFile,"\tsetAttr \".pw.tz\" %f;\n", tz); 132 } setObjectType(char ot)133 void setObjectType(char ot) 134 { 135 if(ot == 1) return; 136 fprintf(mFile,"\tsetAttr \".ot\" %;\n", ot); 137 } setMentalRayControls(const MentalRayControls & mrc)138 void setMentalRayControls(const MentalRayControls& mrc) 139 { 140 fprintf(mFile,"\tsetAttr \".mrc\" "); 141 mrc.write(mFile); 142 fprintf(mFile,";\n"); 143 } setMiExportMrLight(bool milt)144 void setMiExportMrLight(bool milt) 145 { 146 if(milt == false) return; 147 fprintf(mFile,"\tsetAttr \".mrc.milt\" %i;\n", milt); 148 } setEmitPhotons(bool phot)149 void setEmitPhotons(bool phot) 150 { 151 if(phot == false) return; 152 fprintf(mFile,"\tsetAttr \".mrc.phot\" %i;\n", phot); 153 } setEnergy(const float3 & eng)154 void setEnergy(const float3& eng) 155 { 156 fprintf(mFile,"\tsetAttr \".mrc.eng\" -type \"float3\" "); 157 eng.write(mFile); 158 fprintf(mFile,";\n"); 159 } setEnergyR(float engr)160 void setEnergyR(float engr) 161 { 162 if(engr == 8000) return; 163 fprintf(mFile,"\tsetAttr \".mrc.eng.engr\" %f;\n", engr); 164 } setEnergyG(float engg)165 void setEnergyG(float engg) 166 { 167 if(engg == 8000) return; 168 fprintf(mFile,"\tsetAttr \".mrc.eng.engg\" %f;\n", engg); 169 } setEnergyB(float engb)170 void setEnergyB(float engb) 171 { 172 if(engb == 8000) return; 173 fprintf(mFile,"\tsetAttr \".mrc.eng.engb\" %f;\n", engb); 174 } setPhotonIntensity(float phi)175 void setPhotonIntensity(float phi) 176 { 177 if(phi == 1) return; 178 fprintf(mFile,"\tsetAttr \".mrc.phi\" %f;\n", phi); 179 } setExponent(float exp)180 void setExponent(float exp) 181 { 182 if(exp == 2) return; 183 fprintf(mFile,"\tsetAttr \".mrc.exp\" %f;\n", exp); 184 } setCausticPhotons(int cph)185 void setCausticPhotons(int cph) 186 { 187 if(cph == 10000) return; 188 fprintf(mFile,"\tsetAttr \".mrc.cph\" %i;\n", cph); 189 } setCausticPhotonsEmit(int cphe)190 void setCausticPhotonsEmit(int cphe) 191 { 192 if(cphe == 0) return; 193 fprintf(mFile,"\tsetAttr \".mrc.cphe\" %i;\n", cphe); 194 } setGlobIllPhotons(int gph)195 void setGlobIllPhotons(int gph) 196 { 197 if(gph == 10000) return; 198 fprintf(mFile,"\tsetAttr \".mrc.gph\" %i;\n", gph); 199 } setGlobIllPhotonsEmit(int gphe)200 void setGlobIllPhotonsEmit(int gphe) 201 { 202 if(gphe == 0) return; 203 fprintf(mFile,"\tsetAttr \".mrc.gphe\" %i;\n", gphe); 204 } setShadowMap(bool usm)205 void setShadowMap(bool usm) 206 { 207 if(usm == false) return; 208 fprintf(mFile,"\tsetAttr \".mrc.usm\" %i;\n", usm); 209 } setSmapResolution(int smr)210 void setSmapResolution(int smr) 211 { 212 if(smr == 256) return; 213 fprintf(mFile,"\tsetAttr \".mrc.smr\" %i;\n", smr); 214 } setSmapSamples(short smsa)215 void setSmapSamples(short smsa) 216 { 217 if(smsa == 1) return; 218 fprintf(mFile,"\tsetAttr \".mrc.smsa\" %i;\n", smsa); 219 } setSmapSoftness(float smso)220 void setSmapSoftness(float smso) 221 { 222 if(smso == 0) return; 223 fprintf(mFile,"\tsetAttr \".mrc.smso\" %f;\n", smso); 224 } setSmapBias(float smb)225 void setSmapBias(float smb) 226 { 227 if(smb == 0) return; 228 fprintf(mFile,"\tsetAttr \".mrc.smb\" %f;\n", smb); 229 } setSmapFilename(const string & smf)230 void setSmapFilename(const string& smf) 231 { 232 if(smf == "NULL") return; 233 fprintf(mFile,"\tsetAttr \".mrc.smf\" -type \"string\" "); 234 smf.write(mFile); 235 fprintf(mFile,";\n"); 236 } setSmapLightName(bool smln)237 void setSmapLightName(bool smln) 238 { 239 if(smln == 0) return; 240 fprintf(mFile,"\tsetAttr \".mrc.smln\" %i;\n", smln); 241 } setSmapSceneName(bool smsn)242 void setSmapSceneName(bool smsn) 243 { 244 if(smsn == 0) return; 245 fprintf(mFile,"\tsetAttr \".mrc.smsn\" %i;\n", smsn); 246 } setSmapFrameExt(bool smfe)247 void setSmapFrameExt(bool smfe) 248 { 249 if(smfe == 0) return; 250 fprintf(mFile,"\tsetAttr \".mrc.smfe\" %i;\n", smfe); 251 } setSmapDetail(bool smd)252 void setSmapDetail(bool smd) 253 { 254 if(smd == 0) return; 255 fprintf(mFile,"\tsetAttr \".mrc.smd\" %i;\n", smd); 256 } setSmapDetailSamples(short sds)257 void setSmapDetailSamples(short sds) 258 { 259 if(sds == 0) return; 260 fprintf(mFile,"\tsetAttr \".mrc.sds\" %i;\n", sds); 261 } setSmapDetailAccuracy(float sdac)262 void setSmapDetailAccuracy(float sdac) 263 { 264 if(sdac == 0) return; 265 fprintf(mFile,"\tsetAttr \".mrc.sdac\" %f;\n", sdac); 266 } setSmapDetailAlpha(bool sdal)267 void setSmapDetailAlpha(bool sdal) 268 { 269 if(sdal == 0) return; 270 fprintf(mFile,"\tsetAttr \".mrc.sdal\" %i;\n", sdal); 271 } setSmapWindow(const MentalRayControls::SmapWindow & smw)272 void setSmapWindow(const MentalRayControls::SmapWindow& smw) 273 { 274 fprintf(mFile,"\tsetAttr \".mrc.smw\" "); 275 smw.write(mFile); 276 fprintf(mFile,";\n"); 277 } setSmapWindowXMin(short smxl)278 void setSmapWindowXMin(short smxl) 279 { 280 if(smxl == 0) return; 281 fprintf(mFile,"\tsetAttr \".mrc.smw.smxl\" %i;\n", smxl); 282 } setSmapWindowYMin(short smyl)283 void setSmapWindowYMin(short smyl) 284 { 285 if(smyl == 0) return; 286 fprintf(mFile,"\tsetAttr \".mrc.smw.smyl\" %i;\n", smyl); 287 } setSmapWindowXMax(short smxh)288 void setSmapWindowXMax(short smxh) 289 { 290 if(smxh == 0) return; 291 fprintf(mFile,"\tsetAttr \".mrc.smw.smxh\" %i;\n", smxh); 292 } setSmapWindowYMax(short smyh)293 void setSmapWindowYMax(short smyh) 294 { 295 if(smyh == 0) return; 296 fprintf(mFile,"\tsetAttr \".mrc.smw.smyh\" %i;\n", smyh); 297 } setSmapMerge(bool smm)298 void setSmapMerge(bool smm) 299 { 300 if(smm == 0) return; 301 fprintf(mFile,"\tsetAttr \".mrc.smm\" %i;\n", smm); 302 } setSmapTrace(bool smt)303 void setSmapTrace(bool smt) 304 { 305 if(smt == 0) return; 306 fprintf(mFile,"\tsetAttr \".mrc.smt\" %i;\n", smt); 307 } setAreaLight(bool algt)308 void setAreaLight(bool algt) 309 { 310 if(algt == false) return; 311 fprintf(mFile,"\tsetAttr \".mrc.algt\" %i;\n", algt); 312 } setAreaType(unsigned int atyp)313 void setAreaType(unsigned int atyp) 314 { 315 if(atyp == 0) return; 316 fprintf(mFile,"\tsetAttr \".mrc.atyp\" %i;\n", atyp); 317 } setAreaShapeIntensity(float alsi)318 void setAreaShapeIntensity(float alsi) 319 { 320 if(alsi == 1.0) return; 321 fprintf(mFile,"\tsetAttr \".mrc.alsi\" %f;\n", alsi); 322 } setAreaHiSamples(short ahs)323 void setAreaHiSamples(short ahs) 324 { 325 if(ahs == 8) return; 326 fprintf(mFile,"\tsetAttr \".mrc.ahs\" %i;\n", ahs); 327 } setAreaHiSampleLimit(short alev)328 void setAreaHiSampleLimit(short alev) 329 { 330 if(alev == 1) return; 331 fprintf(mFile,"\tsetAttr \".mrc.alev\" %i;\n", alev); 332 } setAreaLoSamples(short als)333 void setAreaLoSamples(short als) 334 { 335 if(als == 1) return; 336 fprintf(mFile,"\tsetAttr \".mrc.als\" %i;\n", als); 337 } setAreaVisible(bool avis)338 void setAreaVisible(bool avis) 339 { 340 if(avis == 0) return; 341 fprintf(mFile,"\tsetAttr \".mrc.avis\" %i;\n", avis); 342 } getLightGlow()343 void getLightGlow()const 344 { 345 fprintf(mFile,"\"%s.lg\"",mName.c_str()); 346 } getPointWorld()347 void getPointWorld()const 348 { 349 fprintf(mFile,"\"%s.pw\"",mName.c_str()); 350 } getPointWorldX()351 void getPointWorldX()const 352 { 353 fprintf(mFile,"\"%s.pw.tx\"",mName.c_str()); 354 } getPointWorldY()355 void getPointWorldY()const 356 { 357 fprintf(mFile,"\"%s.pw.ty\"",mName.c_str()); 358 } getPointWorldZ()359 void getPointWorldZ()const 360 { 361 fprintf(mFile,"\"%s.pw.tz\"",mName.c_str()); 362 } getNormalCamera()363 void getNormalCamera()const 364 { 365 fprintf(mFile,"\"%s.n\"",mName.c_str()); 366 } getNormalCameraX()367 void getNormalCameraX()const 368 { 369 fprintf(mFile,"\"%s.n.nx\"",mName.c_str()); 370 } getNormalCameraY()371 void getNormalCameraY()const 372 { 373 fprintf(mFile,"\"%s.n.ny\"",mName.c_str()); 374 } getNormalCameraZ()375 void getNormalCameraZ()const 376 { 377 fprintf(mFile,"\"%s.n.nz\"",mName.c_str()); 378 } getObjectType()379 void getObjectType()const 380 { 381 fprintf(mFile,"\"%s.ot\"",mName.c_str()); 382 } getMentalRayControls()383 void getMentalRayControls()const 384 { 385 fprintf(mFile,"\"%s.mrc\"",mName.c_str()); 386 } getMiExportMrLight()387 void getMiExportMrLight()const 388 { 389 fprintf(mFile,"\"%s.mrc.milt\"",mName.c_str()); 390 } getMiLightShader()391 void getMiLightShader()const 392 { 393 fprintf(mFile,"\"%s.mrc.mils\"",mName.c_str()); 394 } getMiPhotonEmitter()395 void getMiPhotonEmitter()const 396 { 397 fprintf(mFile,"\"%s.mrc.mipe\"",mName.c_str()); 398 } getEmitPhotons()399 void getEmitPhotons()const 400 { 401 fprintf(mFile,"\"%s.mrc.phot\"",mName.c_str()); 402 } getEnergy()403 void getEnergy()const 404 { 405 fprintf(mFile,"\"%s.mrc.eng\"",mName.c_str()); 406 } getEnergyR()407 void getEnergyR()const 408 { 409 fprintf(mFile,"\"%s.mrc.eng.engr\"",mName.c_str()); 410 } getEnergyG()411 void getEnergyG()const 412 { 413 fprintf(mFile,"\"%s.mrc.eng.engg\"",mName.c_str()); 414 } getEnergyB()415 void getEnergyB()const 416 { 417 fprintf(mFile,"\"%s.mrc.eng.engb\"",mName.c_str()); 418 } getPhotonIntensity()419 void getPhotonIntensity()const 420 { 421 fprintf(mFile,"\"%s.mrc.phi\"",mName.c_str()); 422 } getExponent()423 void getExponent()const 424 { 425 fprintf(mFile,"\"%s.mrc.exp\"",mName.c_str()); 426 } getCausticPhotons()427 void getCausticPhotons()const 428 { 429 fprintf(mFile,"\"%s.mrc.cph\"",mName.c_str()); 430 } getCausticPhotonsEmit()431 void getCausticPhotonsEmit()const 432 { 433 fprintf(mFile,"\"%s.mrc.cphe\"",mName.c_str()); 434 } getGlobIllPhotons()435 void getGlobIllPhotons()const 436 { 437 fprintf(mFile,"\"%s.mrc.gph\"",mName.c_str()); 438 } getGlobIllPhotonsEmit()439 void getGlobIllPhotonsEmit()const 440 { 441 fprintf(mFile,"\"%s.mrc.gphe\"",mName.c_str()); 442 } getShadowMap()443 void getShadowMap()const 444 { 445 fprintf(mFile,"\"%s.mrc.usm\"",mName.c_str()); 446 } getSmapResolution()447 void getSmapResolution()const 448 { 449 fprintf(mFile,"\"%s.mrc.smr\"",mName.c_str()); 450 } getSmapSamples()451 void getSmapSamples()const 452 { 453 fprintf(mFile,"\"%s.mrc.smsa\"",mName.c_str()); 454 } getSmapSoftness()455 void getSmapSoftness()const 456 { 457 fprintf(mFile,"\"%s.mrc.smso\"",mName.c_str()); 458 } getSmapBias()459 void getSmapBias()const 460 { 461 fprintf(mFile,"\"%s.mrc.smb\"",mName.c_str()); 462 } getSmapCamera()463 void getSmapCamera()const 464 { 465 fprintf(mFile,"\"%s.mrc.smc\"",mName.c_str()); 466 } getSmapFilename()467 void getSmapFilename()const 468 { 469 fprintf(mFile,"\"%s.mrc.smf\"",mName.c_str()); 470 } getSmapLightName()471 void getSmapLightName()const 472 { 473 fprintf(mFile,"\"%s.mrc.smln\"",mName.c_str()); 474 } getSmapSceneName()475 void getSmapSceneName()const 476 { 477 fprintf(mFile,"\"%s.mrc.smsn\"",mName.c_str()); 478 } getSmapFrameExt()479 void getSmapFrameExt()const 480 { 481 fprintf(mFile,"\"%s.mrc.smfe\"",mName.c_str()); 482 } getSmapDetail()483 void getSmapDetail()const 484 { 485 fprintf(mFile,"\"%s.mrc.smd\"",mName.c_str()); 486 } getSmapDetailSamples()487 void getSmapDetailSamples()const 488 { 489 fprintf(mFile,"\"%s.mrc.sds\"",mName.c_str()); 490 } getSmapDetailAccuracy()491 void getSmapDetailAccuracy()const 492 { 493 fprintf(mFile,"\"%s.mrc.sdac\"",mName.c_str()); 494 } getSmapDetailAlpha()495 void getSmapDetailAlpha()const 496 { 497 fprintf(mFile,"\"%s.mrc.sdal\"",mName.c_str()); 498 } getSmapWindow()499 void getSmapWindow()const 500 { 501 fprintf(mFile,"\"%s.mrc.smw\"",mName.c_str()); 502 } getSmapWindowXMin()503 void getSmapWindowXMin()const 504 { 505 fprintf(mFile,"\"%s.mrc.smw.smxl\"",mName.c_str()); 506 } getSmapWindowYMin()507 void getSmapWindowYMin()const 508 { 509 fprintf(mFile,"\"%s.mrc.smw.smyl\"",mName.c_str()); 510 } getSmapWindowXMax()511 void getSmapWindowXMax()const 512 { 513 fprintf(mFile,"\"%s.mrc.smw.smxh\"",mName.c_str()); 514 } getSmapWindowYMax()515 void getSmapWindowYMax()const 516 { 517 fprintf(mFile,"\"%s.mrc.smw.smyh\"",mName.c_str()); 518 } getSmapMerge()519 void getSmapMerge()const 520 { 521 fprintf(mFile,"\"%s.mrc.smm\"",mName.c_str()); 522 } getSmapTrace()523 void getSmapTrace()const 524 { 525 fprintf(mFile,"\"%s.mrc.smt\"",mName.c_str()); 526 } getAreaLight()527 void getAreaLight()const 528 { 529 fprintf(mFile,"\"%s.mrc.algt\"",mName.c_str()); 530 } getAreaType()531 void getAreaType()const 532 { 533 fprintf(mFile,"\"%s.mrc.atyp\"",mName.c_str()); 534 } getAreaShapeIntensity()535 void getAreaShapeIntensity()const 536 { 537 fprintf(mFile,"\"%s.mrc.alsi\"",mName.c_str()); 538 } getAreaHiSamples()539 void getAreaHiSamples()const 540 { 541 fprintf(mFile,"\"%s.mrc.ahs\"",mName.c_str()); 542 } getAreaHiSampleLimit()543 void getAreaHiSampleLimit()const 544 { 545 fprintf(mFile,"\"%s.mrc.alev\"",mName.c_str()); 546 } getAreaLoSamples()547 void getAreaLoSamples()const 548 { 549 fprintf(mFile,"\"%s.mrc.als\"",mName.c_str()); 550 } getAreaVisible()551 void getAreaVisible()const 552 { 553 fprintf(mFile,"\"%s.mrc.avis\"",mName.c_str()); 554 } getAreaObject()555 void getAreaObject()const 556 { 557 fprintf(mFile,"\"%s.mrc.aobj\"",mName.c_str()); 558 } 559 protected: 560 AreaLight(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)561 :NonExtendedLightShapeNode(file, name, parent, nodeType, shared, create) {} 562 563 }; 564 }//namespace MayaDM 565 #endif//__MayaDM_AREALIGHT_H__ 566