Save files with OMR style header.

This commit is contained in:
Leonardo Zide
2020-05-03 12:11:51 -07:00
parent 886ac9ca2c
commit b94b401b06
7 changed files with 111 additions and 59 deletions
+64 -13
View File
@@ -57,11 +57,9 @@ void lcModelProperties::SaveLDraw(QTextStream& Stream) const
{
QLatin1String LineEnding("\r\n");
if (!mAuthor.isEmpty())
Stream << QLatin1String("0 !LEOCAD MODEL AUTHOR ") << mAuthor << LineEnding;
if (!mDescription.isEmpty())
Stream << QLatin1String("0 !LEOCAD MODEL DESCRIPTION ") << mDescription << LineEnding;
Stream << QLatin1String("0 ") << mDescription << LineEnding;
Stream << QLatin1String("0 Name: ") << mModelName << LineEnding;
Stream << QLatin1String("0 Author: ") << mAuthor << LineEnding;
if (!mComments.isEmpty())
{
@@ -99,6 +97,40 @@ void lcModelProperties::SaveLDraw(QTextStream& Stream) const
// lcVector3 mAmbientColor;
}
bool lcModelProperties::ParseLDrawHeader(QString Line, bool FirstLine)
{
QTextStream LineStream(&Line, QIODevice::ReadOnly);
QString Token;
LineStream >> Token;
int StartPos = LineStream.pos();
LineStream >> Token;
if (Token == QLatin1String("!LEOCAD"))
return false;
if (FirstLine)
{
LineStream.seek(StartPos);
mDescription = LineStream.readLine().mid(1);
return true;
}
if (Token == QLatin1String("Name:"))
{
mModelName = LineStream.readLine().mid(1);
return true;
}
if (Token == QLatin1String("Author:"))
{
mAuthor = LineStream.readLine().mid(1);
return true;
}
return false;
}
void lcModelProperties::ParseLDrawLine(QTextStream& Stream)
{
QString Token;
@@ -148,9 +180,10 @@ void lcModelProperties::ParseLDrawLine(QTextStream& Stream)
}
}
lcModel::lcModel(const QString& Name)
lcModel::lcModel(const QString& FileName)
{
mProperties.mName = Name;
mProperties.mModelName = FileName;
mProperties.mFileName = FileName;
mProperties.LoadDefaults();
mActive = false;
@@ -259,7 +292,7 @@ void lcModel::DeleteModel()
void lcModel::CreatePieceInfo(Project* Project)
{
lcPiecesLibrary* Library = lcGetPiecesLibrary();
mPieceInfo = Library->FindPiece(mProperties.mName.toLatin1().constData(), Project, true, false);
mPieceInfo = Library->FindPiece(mProperties.mFileName.toLatin1().constData(), Project, true, false);
mPieceInfo->SetModel(this, true, Project, true);
Library->LoadPieceInfo(mPieceInfo, true, true);
}
@@ -492,13 +525,13 @@ int lcModel::SplitMPD(QIODevice& Device)
if (Token == QLatin1String("FILE"))
{
if (!mProperties.mName.isEmpty())
if (!mProperties.mFileName.isEmpty())
{
Device.seek(Pos);
break;
}
mProperties.mName = LineStream.readAll().trimmed();
SetFileName(LineStream.readAll().trimmed());
ModelPos = Pos;
}
else if (Token == QLatin1String("NOFILE"))
@@ -524,6 +557,8 @@ void lcModel::LoadLDraw(QIODevice& Device, Project* Project)
mProperties.mAuthor.clear();
mProperties.mDescription.clear();
mProperties.mComments.clear();
bool ReadingHeader = true;
bool FirstLine = true;
while (!Device.atEnd())
{
@@ -543,7 +578,7 @@ void lcModel::LoadLDraw(QIODevice& Device, Project* Project)
{
QString Name = LineStream.readAll().trimmed();
if (mProperties.mName != Name)
if (mProperties.mFileName != Name)
{
Device.seek(Pos);
break;
@@ -555,7 +590,17 @@ void lcModel::LoadLDraw(QIODevice& Device, Project* Project)
{
break;
}
else if (Token == QLatin1String("STEP"))
if (ReadingHeader)
{
ReadingHeader = mProperties.ParseLDrawHeader(Line, FirstLine);
FirstLine = false;
if (ReadingHeader)
continue;
}
if (Token == QLatin1String("STEP"))
{
CurrentStep++;
mFileLines.append(OriginalLine);
@@ -645,6 +690,7 @@ void lcModel::LoadLDraw(QIODevice& Device, Project* Project)
}
else if (Token == QLatin1String("1"))
{
ReadingHeader = false;
int ColorCode;
LineStream >> ColorCode;
@@ -691,7 +737,12 @@ void lcModel::LoadLDraw(QIODevice& Device, Project* Project)
}
}
else
mFileLines.append(OriginalLine);
{
ReadingHeader = false;
mFileLines.append(OriginalLine);
}
FirstLine = false;
}
mCurrentStep = CurrentStep;