Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
	}
}