std::string LD3dsExporter::getMeshName(LDLModel *model, Lib3dsMesh *&pMesh) { std::string modelName; std::string meshName = "LDXM_"; StringIntMap::iterator it; int index; if (model != NULL) { char *filename = filenameFromPath(model->getFilename()); size_t dotSpot; modelName = filename; dotSpot = modelName.rfind('.'); delete filename; if (dotSpot < modelName.size()) { modelName = modelName.substr(0, dotSpot); } } else { modelName = "no_name"; } it = m_names.find(modelName); if (it == m_names.end()) { index = (int)m_names.size() + 1; meshName += ltostr(index); pMesh = NULL; } else { index = it->second; meshName += ltostr(index); pMesh = m_meshes[meshName]; } //m_names[modelName] = index; return meshName; }
int main(int argc, char *argv[]) { int result; int i, count; FILE *inFile, *outFile; char *tmpname, *bakname; bool usageOnly; count = 1; gOptions.filename = NULL; gOptions.boilerplate = NULL; gOptions.onlyPrototypes = false; /* Run through the arguments, pulling out just the options. While we're doing this, shuffle down any non-option args (i.e. the filenames) so that they're contiguous */ usageOnly = (argc > 1); for (i = 1; i < argc; ++i) { if (argv[i][0] == '-') { switch (argv[i][1]) { case 'V': case 'v': printVersion(argv[0]); break; case '?': case 'h': printUsage(argv[0]); break; case 'b': if (++i < argc) { gOptions.boilerplate = argv[i]; usageOnly = false; } break; case 'p': gOptions.onlyPrototypes = true; usageOnly = false; break; case '-': /* the 'wordy' varients */ if (strcmp(argv[i],"--version") == 0) { printVersion(argv[0]); break; } else if (strcmp(argv[i],"--help") == 0) { printUsage(argv[0]); break; } /* fall through if there's no match */ default: fprintf(stderr, "### error: unknown option \'%s\' given to %s\n", argv[i],argv[0]); break; } } else { /* copy the pointer, if it's not at the same index */ if (count != i) argv[count] = argv[i]; ++count; usageOnly = false; } } /* argv[1] through argv[count] now contains only filenames */ result = 0; if (!usageOnly) { if (count <= 1) /* one is really zero, since it started at 1 */ { /* assume stdin to stdout */ gOptions.filename = NULL; result = processFile(stdout, stdin); } else for (i = 1; i < count; ++i) { gOptions.filename = filenameFromPath(argv[i]); tmpname = NULL; inFile = fopen(argv[i],"r"); if (inFile == NULL) { fprintf(stderr, "### error: unable to open '%s' for reading (in %s)\n", argv[i], argv[0]); result = -1; } else { tmpname = cpycat(argv[i],".tmp"); if (tmpname != NULL) { outFile = fopen(tmpname,"w"); if (outFile == NULL) { fprintf(stderr, "### error: unable to open '%s' for writing (in %s)\n", tmpname, argv[0]); result = -2; } else { /* this performs the actual processing */ result = processFile(outFile, inFile); fclose(outFile); } /* don't free tmpname yet; need it below */ } fclose(inFile); } /* only rename the files if everything went smoothly */ if (tmpname != NULL) { if (result == 0) { bakname = cpycat(argv[i],".bak"); if (bakname != NULL) { result = rename(argv[i], bakname); if (result != 0) { fprintf(stderr, "### error: unable to rename '%s' to '%s' (in %s)\n", argv[i], bakname, argv[0]); result = -3; } else { result = rename(tmpname, argv[i]); if (result != 0) { fprintf(stderr, "### error: unable to rename '%s' to '%s' (in %s)\n", tmpname, argv[i], argv[0]); result = -4; } } free(bakname); } } free(tmpname); } } } return result; }
bool LDModelParser::parseMainModel(LDLModel *mainLDLModel) { int colorNumber = 7; int edgeColorNumber; LDLPalette *palette = mainLDLModel->getMainModel()->getPalette(); m_topLDLModel = (LDLModel *)mainLDLModel->retain(); m_mainTREModel = new TREMainModel; if (m_alertSender != NULL) { m_mainTREModel->setAlertSender(m_alertSender); } else { m_mainTREModel->setSendProgressFlag(false); } m_mainTREModel->setMultiThreadedFlag(getMultiThreadedFlag()); m_mainTREModel->setPartFlag(mainLDLModel->isPart()); m_mainTREModel->setEdgeLinesFlag(getEdgeLinesFlag()); m_mainTREModel->setEdgesOnlyFlag(getEdgesOnlyFlag()); m_mainTREModel->setLightingFlag(getLightingFlag()); m_mainTREModel->setTwoSidedLightingFlag(getTwoSidedLightingFlag()); m_mainTREModel->setBFCFlag(getBFCFlag()); m_mainTREModel->setRedBackFacesFlag(getRedBackFacesFlag()); m_mainTREModel->setGreenFrontFacesFlag(getGreenFrontFacesFlag()); m_mainTREModel->setBlueNeutralFacesFlag(getBlueNeutralFacesFlag()); m_mainTREModel->setGl2psFlag(m_modelViewer->getGl2ps()); switch (m_modelViewer->getMemoryUsage()) { case 0: m_mainTREModel->setCompilePartsFlag(false); m_mainTREModel->setCompileAllFlag(false); m_mainTREModel->setFlattenConditionalsFlag(false); break; case 1: m_mainTREModel->setCompilePartsFlag(true); m_mainTREModel->setCompileAllFlag(false); m_mainTREModel->setFlattenConditionalsFlag(false); break; case 2: m_mainTREModel->setCompilePartsFlag(true); m_mainTREModel->setCompileAllFlag(true); m_mainTREModel->setFlattenConditionalsFlag(true); break; } m_mainTREModel->setPolygonOffsetFlag(getPolygonOffsetFlag()); m_mainTREModel->setEdgeLineWidth(m_modelViewer->getHighlightLineWidth()); m_mainTREModel->setStudAnisoLevel(m_modelViewer->getAnisoLevel()); m_mainTREModel->setAALinesFlag(getAALinesFlag()); m_mainTREModel->setSortTransparentFlag(getSortTransparentFlag()); m_mainTREModel->setStippleFlag(getStippleFlag()); m_mainTREModel->setWireframeFlag(getWireframeFlag()); m_mainTREModel->setConditionalLinesFlag(getConditionalLinesFlag()); m_mainTREModel->setSmoothCurvesFlag(getSmoothCurvesFlag()); m_mainTREModel->setShowAllConditionalFlag(getShowAllConditionalFlag()); m_mainTREModel->setConditionalControlPointsFlag( getConditionalControlPointsFlag()); m_mainTREModel->setStudLogoFlag(getStudLogoFlag()); m_mainTREModel->setStudTextureFilter(m_modelViewer->getTextureFilterType()); m_mainTREModel->setFlattenPartsFlag(getFlattenPartsFlag()); m_mainTREModel->setSeamWidth(getSeamWidth()); if (getDefaultColorNumberSetFlag()) { colorNumber = m_defaultColorNumber; } else if (getDefaultColorSetFlag()) { colorNumber = palette->getColorNumberForRGB(m_defaultR, m_defaultG, m_defaultB, m_flags.defaultTrans); } edgeColorNumber = mainLDLModel->getEdgeColorNumber(colorNumber); m_mainTREModel->setColor(mainLDLModel->getPackedRGBA(colorNumber), mainLDLModel->getPackedRGBA(edgeColorNumber)); m_obiTokens.clear(); if (parseModel(m_topLDLModel, m_mainTREModel, getBFCFlag(), m_defaultColorNumber)) { if (m_mainTREModel->isPart() || getFileIsPartFlag()) { m_mainTREModel->setPartFlag(true); //finishPart(m_mainTREModel); } m_mainTREModel->finish(); if (m_topLDLModel->getName()) { m_mainTREModel->setName(m_topLDLModel->getName()); } else { char *name = filenameFromPath(m_topLDLModel->getFilename()); m_mainTREModel->setName(name); delete name; } if (m_alertSender != NULL) { TCProgressAlert::send("LDModelParser", TCLocalStrings::get(_UC("ParsingStatus")), 1.0f, &m_abort, this); } if (m_abort) { return false; } else { return m_mainTREModel->postProcess(); } } else { return false; } }