int LDExporter::runInternal(void) { char *outputType = stringForKey("OutputType", NULL, false); int retValue; LDExporter *pExporter = NULL; if (outputType == NULL) { outputType = stringForKey("OT", "POV", false); } if (strcasecmp(outputType, "POV") == 0) { pExporter = new LDPovExporter; } retValue = runInternal(pExporter); delete[] outputType; TCObject::release(pExporter); return retValue; }
int LDExporter::runInternal(LDExporter *pExporter) { int retValue; if (pExporter != NULL) { std::string filename = getFilename(); if (filename.size() > 0) { LDLMainModel *pMainModel = new LDLMainModel; if (pMainModel->load(filename.c_str())) { char *cameraGlobe = stringForKey("CameraGlobe", NULL, false); LDLCamera camera; LDLAutoCamera *pAutoCamera = new LDLAutoCamera; pMainModel->getBoundingBox(pExporter->m_boundingMin, pExporter->m_boundingMax); pExporter->m_center = (pExporter->m_boundingMin + pExporter->m_boundingMax) / 2.0f; pExporter->m_radius = pMainModel->getMaxRadius(pExporter->m_center, true); pAutoCamera->setModel(pMainModel); pAutoCamera->setModelCenter(pExporter->m_center); pAutoCamera->setRotationMatrix(m_rotationMatrix); pAutoCamera->setCamera(camera); pAutoCamera->setCameraGlobe(cameraGlobe); //pAutoCamera->setDistanceMultiplier(distanceMultiplier); // Width and height are only needed for aspect ratio, not // absolute size. pAutoCamera->setWidth(m_width); pAutoCamera->setHeight(m_height); pAutoCamera->setFov(m_fov); pAutoCamera->setScanConditionalControlPoints(false); pAutoCamera->zoomToFit(); pExporter->m_camera = pAutoCamera->getCamera(); pAutoCamera->release(); retValue = pExporter->doExport(pMainModel); } else { #ifdef TC_NO_UNICODE consolePrintf(ls(_UC("ErrorLoadingModel")), filename.c_str()); #else // TC_NO_UNICODE std::wstring wfilename; stringtowstring(wfilename, filename); consolePrintf(ls(_UC("LDXErrorLoadingModel")), wfilename.c_str()); #endif // TC_NO_UNICODE retValue = 1; } TCObject::release(pMainModel); } else { consolePrintf(ls(_UC("LDXNoFilename"))); retValue = 1; } } else { consolePrintf(ls(_UC("LDXUnknownOutputType"))); retValue = 1; } return retValue; }
NS_DOROTHY_BEGIN oParticleDef* oParticleCache::load( const char* filename ) { auto it = _parDict.find(filename); if (it != _parDict.end()) { return it->second; } else { unsigned long size; auto data = oSharedContent.loadFile(filename, size); auto dict = CCDictionary::createWithContents(data, (unsigned int)size); oParticleDef* type = new oParticleDef(); type->autorelease(); type->maxParticles = (int)dict->numberForKey("maxParticles"); type->angle = (float)dict->numberForKey("angle"); type->angleVariance = (float)dict->numberForKey("angleVariance"); type->duration = (float)dict->numberForKey("duration"); type->blendFuncSource = (float)dict->numberForKey("blendFuncSource"); type->blendFuncDestination = (float)dict->numberForKey("blendFuncDestination"); type->startColorRed = (float)dict->numberForKey("startColorRed"); type->startColorGreen = (float)dict->numberForKey("startColorGreen"); type->startColorBlue = (float)dict->numberForKey("startColorBlue"); type->startColorAlpha = (float)dict->numberForKey("startColorAlpha"); type->startColorVarianceRed = (float)dict->numberForKey("startColorVarianceRed"); type->startColorVarianceGreen = (float)dict->numberForKey("startColorVarianceGreen"); type->startColorVarianceBlue = (float)dict->numberForKey("startColorVarianceBlue"); type->startColorVarianceAlpha = (float)dict->numberForKey("startColorVarianceAlpha"); type->finishColorRed = (float)dict->numberForKey("finishColorRed"); type->finishColorGreen = (float)dict->numberForKey("finishColorGreen"); type->finishColorBlue = (float)dict->numberForKey("finishColorBlue"); type->finishColorAlpha = (float)dict->numberForKey("finishColorAlpha"); type->finishColorVarianceRed = (float)dict->numberForKey("finishColorVarianceRed"); type->finishColorVarianceGreen = (float)dict->numberForKey("finishColorVarianceGreen"); type->finishColorVarianceBlue = (float)dict->numberForKey("finishColorVarianceBlue"); type->finishColorVarianceAlpha = (float)dict->numberForKey("finishColorVarianceAlpha"); type->startParticleSize = (float)dict->numberForKey("startParticleSize"); type->startParticleSizeVariance = (float)dict->numberForKey("startParticleSizeVariance"); type->finishParticleSize = (float)dict->numberForKey("finishParticleSize"); type->finishParticleSizeVariance = (float)dict->numberForKey("finishParticleSizeVariance"); type->sourcePositionx = (float)dict->numberForKey("sourcePositionx"); type->sourcePositiony = (float)dict->numberForKey("sourcePositiony"); type->sourcePositionVariancex = (float)dict->numberForKey("sourcePositionVariancex"); type->sourcePositionVariancey = (float)dict->numberForKey("sourcePositionVariancey"); type->rotationStart = (float)dict->numberForKey("rotationStart"); type->rotationStartVariance = (float)dict->numberForKey("rotationStartVariance"); type->rotationEnd = (float)dict->numberForKey("rotationEnd"); type->rotationEndVariance = (float)dict->numberForKey("rotationEndVariance"); type->emissionRate = (float)dict->numberForKey("emissionRate"); type->emitterType = (int)dict->numberForKey("emitterType"); type->gravityx = (float)dict->numberForKey("gravityx"); type->gravityy = (float)dict->numberForKey("gravityy"); type->speed = (float)dict->numberForKey("speed"); type->speedVariance = (float)dict->numberForKey("speedVariance"); type->radialAcceleration = (float)dict->numberForKey("radialAcceleration"); type->radialAccelVariance = (float)dict->numberForKey("radialAccelVariance"); type->tangentialAcceleration = (float)dict->numberForKey("tangentialAcceleration"); type->tangentialAccelVariance = (float)dict->numberForKey("tangentialAccelVariance"); type->rotationIsDir = dict->numberForKey("rotationIsDir") != 0; type->maxRadius = (float)dict->numberForKey("maxRadius"); type->maxRadiusVariance = (float)dict->numberForKey("maxRadiusVariance"); type->minRadius = (float)dict->numberForKey("minRadius"); type->minRadiusVariance = (float)dict->numberForKey("minRadiusVariance"); type->rotatePerSecond = (float)dict->numberForKey("rotatePerSecond"); type->rotatePerSecondVariance = (float)dict->numberForKey("rotatePerSecondVariance"); type->particleLifespan = (float)dict->numberForKey("particleLifespan"); type->particleLifespanVariance = (float)dict->numberForKey("particleLifespanVariance"); type->emissionRate = (float)(type->maxParticles) / type->particleLifespan; type->textureFileName = dict->stringForKey("textureFileName"); const char* textureData = dict->stringForKey("textureImageData"); if (textureData[0]) { CCParticleSystem::dataToTexture(type->textureFileName.c_str(), textureData); } float textureRectx = (float)dict->numberForKey("textureRectx"); float textureRecty = (float)dict->numberForKey("textureRecty"); float textureRectw = (float)dict->numberForKey("textureRectw"); float textureRecth = (float)dict->numberForKey("textureRecth"); CCRect textureRect(textureRectx, textureRecty, textureRectw, textureRecth); type->textureRect = textureRect; _parDict[filename] = type; return type; } }