From c8cb6842991990860196af287844011961aec3cc Mon Sep 17 00:00:00 2001 From: leo Date: Wed, 28 Mar 2012 01:07:18 +0000 Subject: [PATCH] Keep LDraw color codes. --- common/lc_colors.cpp | 12 +++++++ common/lc_colors.h | 8 +++++ common/piece.cpp | 71 ++++++++++++++++++++++++------------------ common/piece.h | 38 +++++++++++----------- common/project.cpp | 68 ++++++++++++++++++++++------------------ win/Print.cpp | 6 ++-- win/Tools.cpp | 2 +- win/propertiespane.cpp | 2 +- 8 files changed, 123 insertions(+), 84 deletions(-) diff --git a/common/lc_colors.cpp b/common/lc_colors.cpp index d3c9a05f..0cf262a7 100644 --- a/common/lc_colors.cpp +++ b/common/lc_colors.cpp @@ -376,3 +376,15 @@ void LoadDefaultColors() File.Seek(0, SEEK_SET); LoadColorFile(File); } + +int lcGetColorIndex(lcuint32 ColorCode) +{ + unsigned char ConvertColor(int c); // temp fix + return ConvertColor(ColorCode); +} + +int lcGetColorCode(int ColorIndex) +{ + const int ExtendedColorTable[LC_MAXCOLORS] = { 4,12,2,10,1,9,14,15,8,0,6,13,13,334,36,44,34,42,33,41,46,47,7,382,6,13,11,383 }; // temp fix + return ExtendedColorTable[ColorIndex]; +} diff --git a/common/lc_colors.h b/common/lc_colors.h index 78ff2e99..2f7f60dc 100644 --- a/common/lc_colors.h +++ b/common/lc_colors.h @@ -15,6 +15,14 @@ struct lcColor extern lcColor* gColorList; extern int gNumColors; +int lcGetColorIndex(lcuint32 ColorCode); +int lcGetColorCode(int ColorIndex); + +inline bool lcIsColorTranslucent(int ColorIndex) +{ + return (ColorIndex > 13 && ColorIndex < 22); // temp +} + inline void lcSetColor(int ColorIndex) { float* Color = gColorList[ColorIndex].Value; diff --git a/common/piece.cpp b/common/piece.cpp index f3ab6a67..dc6e2c8e 100644 --- a/common/piece.cpp +++ b/common/piece.cpp @@ -17,7 +17,7 @@ #include "algebra.h" #include "lc_application.h" -#define LC_PIECE_SAVE_VERSION 10 // LeoCAD 0.75.2 +#define LC_PIECE_SAVE_VERSION 11 // LeoCAD 0.77 static LC_OBJECT_KEY_INFO piece_key_info[LC_PK_COUNT] = { @@ -72,7 +72,8 @@ Piece::Piece(PieceInfo* pPieceInfo) m_pNext = NULL; m_pPieceInfo = pPieceInfo; m_nState = 0; - m_nColor = 0; + mColorIndex = 0; + mColorCode = 0; m_nStepShow = 1; m_nStepHide = 255; m_nFrameHide = 65535; @@ -253,13 +254,25 @@ bool Piece::FileLoad(lcFile& file, char* name) } else file.ReadBuffer(name, LC_PIECE_NAME_LEN); - file.ReadU8(&m_nColor, 1); - if (version < 5) - { - const unsigned char conv[20] = { 0,2,4,9,7,6,22,8,10,11,14,16,18,9,21,20,22,8,10,11 }; - m_nColor = conv[m_nColor]; - } + if (version < 11) + { + lcuint8 Color; + + file.ReadU8(&Color, 1); + + if (version < 5) + { + const int OriginalColorTable[20] = { 0,2,4,9,7,6,22,8,10,11,14,16,18,9,21,20,22,8,10,11 }; + Color = OriginalColorTable[Color]; + } + + const int ExtendedColorTable[28] = { 4,12,2,10,1,9,14,15,8,0,6,13,13,334,36,44,34,42,33,41,46,47,7,382,6,13,11,383 }; + mColorCode = ExtendedColorTable[Color]; + } + else + file.ReadU32(&mColorCode, 1); + mColorIndex = lcGetColorIndex(mColorCode); file.ReadU8(&m_nStepShow, 1); if (version > 1) @@ -320,7 +333,7 @@ void Piece::FileSave(lcFile& file, Group* pGroups) Object::FileSave (file); file.WriteBuffer(m_pPieceInfo->m_strName, LC_PIECE_NAME_LEN); - file.WriteU8(m_nColor); + file.WriteU32(mColorCode); file.WriteU8(m_nStepShow); file.WriteU8(m_nStepHide); file.WriteU16(m_nFrameShow); @@ -351,20 +364,18 @@ void Piece::FileSave(lcFile& file, Group* pGroups) file.WriteS32(i); } -void Piece::Initialize(float x, float y, float z, unsigned char nStep, unsigned short nFrame, unsigned char nColor) +void Piece::Initialize(float x, float y, float z, unsigned char nStep, unsigned short nFrame) { - m_nFrameShow = nFrame; - m_nStepShow = nStep; + m_nFrameShow = nFrame; + m_nStepShow = nStep; - float pos[3] = { x, y, z }, rot[4] = { 0, 0, 1, 0 }; - ChangeKey (1, false, true, pos, LC_PK_POSITION); - ChangeKey (1, false, true, rot, LC_PK_ROTATION); - ChangeKey (1, true, true, pos, LC_PK_POSITION); - ChangeKey (1, true, true, rot, LC_PK_ROTATION); + float pos[3] = { x, y, z }, rot[4] = { 0, 0, 1, 0 }; + ChangeKey (1, false, true, pos, LC_PK_POSITION); + ChangeKey (1, false, true, rot, LC_PK_ROTATION); + ChangeKey (1, true, true, pos, LC_PK_POSITION); + ChangeKey (1, true, true, rot, LC_PK_ROTATION); - UpdatePosition (1, false); - - m_nColor = nColor; + UpdatePosition (1, false); } void Piece::CreateName(Piece* pPiece) @@ -886,12 +897,12 @@ void Piece::BuildDrawInfo() for (group = m_pPieceInfo->m_nGroupCount, dg = m_pPieceInfo->m_pGroups; group--; dg++) { lcuint16* sh = dg->connections; - add = IsTransparent() || *sh == 0xFFFF; + add = IsTranslucent() || *sh == 0xFFFF; if (!add) for (; *sh != 0xFFFF; sh++) if ((m_pConnections[*sh].link == NULL) || - (m_pConnections[*sh].link->owner->IsTransparent())) + (m_pConnections[*sh].link->owner->IsTranslucent())) { add = true; break; @@ -977,12 +988,12 @@ void Piece::BuildDrawInfo() for (group = m_pPieceInfo->m_nGroupCount, dg = m_pPieceInfo->m_pGroups; group--; dg++) { lcuint16* sh = dg->connections; - add = IsTransparent() || *sh == 0xFFFF; + add = IsTranslucent() || *sh == 0xFFFF; if (!add) for (; *sh != 0xFFFF; sh++) if ((m_pConnections[*sh].link == NULL) || - (m_pConnections[*sh].link->owner->IsTransparent())) + (m_pConnections[*sh].link->owner->IsTranslucent())) { add = true; break; @@ -1066,12 +1077,12 @@ void Piece::BuildDrawInfo() for (group = m_pPieceInfo->m_nGroupCount, dg = m_pPieceInfo->m_pGroups; group--; dg++) { lcuint16* sh = dg->connections; - add = IsTransparent() || *sh == 0xFFFF; + add = IsTranslucent() || *sh == 0xFFFF; if (!add) for (; *sh != 0xFFFF; sh++) if ((m_pConnections[*sh].link == NULL) || - (m_pConnections[*sh].link->owner->IsTransparent())) + (m_pConnections[*sh].link->owner->IsTranslucent())) { add = true; break; @@ -1153,7 +1164,7 @@ void Piece::RenderBox(bool bHilite, float fLineWidth) } else { - glColor3ubv(FlatColorArray[m_nColor]); + glColor3ubv(FlatColorArray[mColorIndex]); glCallList(m_pPieceInfo->GetBoxDisplayList()); } glPopMatrix(); @@ -1172,7 +1183,7 @@ void Piece::Render(bool bLighting, bool bEdges) m_pPieceInfo->m_pTextures[sh].texture->MakeCurrent(); if (m_pPieceInfo->m_pTextures[sh].color == LC_COL_DEFAULT) - SetCurrentColor(m_nColor, bLighting); + SetCurrentColor(mColorIndex, bLighting); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); @@ -1199,7 +1210,7 @@ void Piece::Render(bool bLighting, bool bEdges) bool lock = lockarrays && (*info == LC_COL_DEFAULT || *info == LC_COL_EDGES); if (*info == LC_COL_DEFAULT) - SetCurrentColor(m_nColor, bLighting); + SetCurrentColor(mColorIndex, bLighting); else SetCurrentColor((unsigned char)*info, bLighting); info++; @@ -1264,7 +1275,7 @@ void Piece::Render(bool bLighting, bool bEdges) bool lock = lockarrays && (*info == LC_COL_DEFAULT || *info == LC_COL_EDGES); if (*info == LC_COL_DEFAULT) - SetCurrentColor(m_nColor, bLighting); + SetCurrentColor(mColorIndex, bLighting); else SetCurrentColor((unsigned char)*info, bLighting); info++; diff --git a/common/piece.h b/common/piece.h index 363e1641..1912453e 100644 --- a/common/piece.h +++ b/common/piece.h @@ -8,6 +8,7 @@ class PieceInfo; #include "object.h" #include "globals.h" #include "typedefs.h" +#include "lc_colors.h" #define LC_PIECE_HIDDEN 0x01 #define LC_PIECE_SELECTED 0x02 @@ -54,7 +55,7 @@ public: void MinIntersectDist(LC_CLICKLINE* pLine); bool IsVisible(unsigned short nTime, bool bAnimation); - void Initialize(float x, float y, float z, unsigned char nStep, unsigned short nFrame, unsigned char nColor); + void Initialize(float x, float y, float z, unsigned char nStep, unsigned short nFrame); void CreateName(Piece* pPiece); void AddConnections(CONNECTION_TYPE* pConnections); void RemoveConnections(CONNECTION_TYPE* pConnections); @@ -78,10 +79,6 @@ public: { strcpy(m_strName, name); } const char* GetName() { return m_strName; } - const unsigned char GetColor() - { return m_nColor; } - void SetColor(unsigned char color) - { m_nColor = color; } PieceInfo* GetPieceInfo() { return m_pPieceInfo; } void SetStepShow(unsigned char step) @@ -112,20 +109,26 @@ public: void Render(bool bLighting, bool bEdges); void RenderBox(bool bHilite, float fLineWidth); - inline bool IsTransparent() + void SetColorCode(lcuint32 ColorCode) { - if (m_nColor < 14) return false; - if (m_nColor > 21) return false; - return true; - }; - -/* - inline void UseTransform() - { - glTranslatef(m_fPosition[0], m_fPosition[1], m_fPosition[2]); - glRotatef(m_fRotation[3], m_fRotation[0], m_fRotation[1], m_fRotation[2]); + mColorCode = ColorCode; + mColorIndex = lcGetColorIndex(ColorCode); } -*/ + + void SetColorIndex(int ColorIndex) + { + mColorIndex = ColorIndex; + mColorCode = lcGetColorCode(ColorIndex); + } + + bool IsTranslucent() const + { + return lcIsColorTranslucent(mColorIndex); + } + + int mColorIndex; + lcuint32 mColorCode; + protected: void BuildDrawInfo(); @@ -138,7 +141,6 @@ protected: unsigned char m_nStepShow; unsigned char m_nStepHide; - unsigned char m_nColor; unsigned char m_nState; char m_strName[81]; diff --git a/common/project.cpp b/common/project.cpp index 88b8a4c7..42afc6ff 100644 --- a/common/project.cpp +++ b/common/project.cpp @@ -496,6 +496,8 @@ bool Project::FileLoad(lcFile* file, bool bUndo, bool bMerge) const unsigned char conv[20] = { 0,2,4,9,7,6,22,8,10,11,14,16,18,9,21,20,22,8,10,11 }; color = conv[color]; + const int ExtendedColorTable[LC_MAXCOLORS] = { 4,12,2,10,1,9,14,15,8,0,6,13,13,334,36,44,34,42,33,41,46,47,7,382,6,13,11,383 }; + lcuint32 ColorCode = ExtendedColorTable[color]; PieceInfo* pInfo = lcGetPiecesLibrary()->FindPieceInfo(name); if (pInfo != NULL) @@ -503,7 +505,8 @@ bool Project::FileLoad(lcFile* file, bool bUndo, bool bMerge) Piece* pPiece = new Piece(pInfo); Matrix mat; - pPiece->Initialize(pos[0], pos[1], pos[2], step, 1, color); + pPiece->Initialize(pos[0], pos[1], pos[2], step, 1); + pPiece->SetColorCode(ColorCode); pPiece->CreateName(m_pPieces); AddPiece(pPiece); mat.CreateOld(0,0,0, rot[0],rot[1],rot[2]); @@ -1040,8 +1043,6 @@ void Project::FileReadLDraw(lcFile* file, Matrix* prevmat, int* nOk, int DefColo int cl = 0; if (color == 16) cl = DefColor; - else - cl = ConvertColor(color); strcpy(pn, tmp); ptr = strrchr(tmp, '.'); @@ -1063,7 +1064,8 @@ void Project::FileReadLDraw(lcFile* file, Matrix* prevmat, int* nOk, int DefColo read = false; tmpmat.GetTranslation(&x, &y, &z); - pPiece->Initialize(x, y, z, *nStep, 1, cl); + pPiece->Initialize(x, y, z, *nStep, 1); + pPiece->SetColorCode(cl); pPiece->CreateName(m_pPieces); AddPiece(pPiece); tmpmat.ToAxisAngle(rot); @@ -1110,7 +1112,8 @@ void Project::FileReadLDraw(lcFile* file, Matrix* prevmat, int* nOk, int DefColo read = false; tmpmat.GetTranslation(&x, &y, &z); - pPiece->Initialize(x, y, z, *nStep, 1, cl); + pPiece->Initialize(x, y, z, *nStep, 1); + pPiece->SetColorCode(cl); pPiece->CreateName(m_pPieces); AddPiece(pPiece); tmpmat.ToAxisAngle(rot); @@ -1216,7 +1219,6 @@ bool Project::DoSave(char* lpszPathName, bool bReplace) if ((strcmp(ext, "dat") == 0) || (strcmp(ext, "ldr") == 0)) { - const int col[28] = { 4,12,2,10,1,9,14,15,8,0,6,13,13,334,36,44,34,42,33,41,46,47,7,382,6,13,11,383 }; Piece* pPiece; int i, steps = GetLastStep(); char buf[256], *ptr; @@ -1254,7 +1256,7 @@ bool Project::DoSave(char* lpszPathName, bool bReplace) Matrix mat(rotation, position); mat.ToLDraw(f); sprintf (buf, " 1 %d %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %s.DAT\r\n", - col[pPiece->GetColor()], f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8], f[9], f[10], f[11], pPiece->GetPieceInfo()->m_strName); + pPiece->mColorCode, f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8], f[9], f[10], f[11], pPiece->GetPieceInfo()->m_strName); file.WriteBuffer(buf, strlen(buf)); } } @@ -1935,7 +1937,7 @@ void Project::RenderScenePieces(View* view) if (!pPiece->IsVisible(m_bAnimation ? m_nCurFrame : m_nCurStep, m_bAnimation)) continue; - if (!pPiece->IsTransparent()) + if (!pPiece->IsTranslucent()) { if (pPiece->IsSelected()) { @@ -2846,11 +2848,11 @@ void CCADDoc::AddPiece(CPiece* pNewPiece) for (pos1 = m_Pieces.GetHeadPosition(); (pos2 = pos1) != NULL;) { CPiece* pPiece = m_Pieces.GetNext(pos1); - if (pPiece->IsTransparent()) + if (pPiece->IsTranslucent()) break; } - if (pos2 == NULL || pNewPiece->IsTransparent()) + if (pos2 == NULL || pNewPiece->IsTranslucent()) m_Pieces.AddTail(pNewPiece); else m_Pieces.InsertBefore(pos2, pNewPiece); @@ -3212,7 +3214,7 @@ void Project::CreateHTMLPieceList(FILE* f, int nStep, bool bImages, const char* for (pPiece = m_pPieces; pPiece; pPiece = pPiece->m_pNext) { if ((pPiece->GetStepShow() == nStep) || (nStep == 0)) - col[pPiece->GetColor()]++; + col[pPiece->mColorCode]++; } fputs("
\n",f); @@ -3239,7 +3241,7 @@ void Project::CreateHTMLPieceList(FILE* f, int nStep, bool bImages, const char* if ((pPiece->GetPieceInfo() == pInfo) && ((pPiece->GetStepShow() == nStep) || (nStep == 0))) { - count [pPiece->GetColor()]++; + count [pPiece->mColorCode]++; Add = true; } } @@ -3347,7 +3349,7 @@ void Project::HandleNotify(LC_NOTIFY id, unsigned long param) pPiece->UnHide(); pPiece->SetName(mod->name); - pPiece->SetColor(mod->color); + pPiece->SetColorIndex(mod->color); pPiece->UpdatePosition(m_bAnimation ? m_nCurFrame : m_nCurStep, m_bAnimation); pPiece->CalculateConnections(m_pConnections, m_bAnimation ? m_nCurFrame : m_nCurStep, m_bAnimation, false, true); @@ -4166,7 +4168,7 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam) float fl[12], pos[3], rot[4]; int Color; - Color = piece->GetColor(); + Color = piece->mColorIndex; const char* Suffix = (Color > 13 && Color < 22) ? "_clear" : ""; piece->GetPosition(pos); @@ -4314,7 +4316,7 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam) buf[i] = '_'; fprintf(stream, "g %s\n", buf); - pPiece->GetPieceInfo()->WriteWavefront(stream, pPiece->GetColor(), &vert); + pPiece->GetPieceInfo()->WriteWavefront(stream, pPiece->mColorCode, &vert); } fclose(stream); @@ -4340,7 +4342,7 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam) for (Piece* pPiece = m_pPieces; pPiece; pPiece = pPiece->m_pNext) { int idx = lcGetPiecesLibrary()->GetPieceIndex (pPiece->GetPieceInfo ()); - opts.count[idx*LC_MAXCOLORS+pPiece->GetColor()]++; + opts.count[idx*LC_MAXCOLORS+pPiece->mColorIndex]++; } if (SystemDoDialog(LC_DLG_PROPERTIES, &opts)) @@ -4810,16 +4812,17 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam) GetPieceInsertPosition(pLast, Pos, Rot); - pPiece->Initialize(Pos[0], Pos[1], Pos[2], m_nCurStep, m_nCurFrame, m_nCurColor); + pPiece->Initialize(Pos[0], Pos[1], Pos[2], m_nCurStep, m_nCurFrame); pPiece->ChangeKey(m_nCurStep, false, false, Rot, LC_PK_ROTATION); pPiece->ChangeKey(m_nCurFrame, true, false, Rot, LC_PK_ROTATION); pPiece->UpdatePosition(m_bAnimation ? m_nCurFrame : m_nCurStep, m_bAnimation); } else - pPiece->Initialize(0, 0, 0, m_nCurStep, m_nCurFrame, m_nCurColor); + pPiece->Initialize(0, 0, 0, m_nCurStep, m_nCurFrame); SelectAndFocusNone(false); + pPiece->SetColorIndex(m_nCurColor); pPiece->CreateName(m_pPieces); AddPiece(pPiece); pPiece->CalculateConnections(m_pConnections, m_bAnimation ? m_nCurFrame : m_nCurStep, m_bAnimation, true, true); @@ -4869,7 +4872,8 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam) Vector4& Position = Wizard.m_Matrices[i][3]; Vector4 Rotation = Wizard.m_Matrices[i].ToAxisAngle(); Rotation[3] *= LC_RTOD; - pPiece->Initialize(Position[0], Position[1], Position[2], m_nCurStep, m_nCurFrame, Wizard.m_Colors[i]); + pPiece->Initialize(Position[0], Position[1], Position[2], m_nCurStep, m_nCurFrame); + pPiece->SetColorIndex(Wizard.m_Colors[i]); pPiece->CreateName(m_pPieces); AddPiece(pPiece); pPiece->Select(true, false, false); @@ -5000,8 +5004,8 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam) else pLast = pFirst = new Piece(pPiece->GetPieceInfo()); - pLast->Initialize(pos[0]+i*opts.fMove[0], pos[1]+i*opts.fMove[1], pos[2]+i*opts.fMove[2], - m_nCurStep, m_nCurFrame, pPiece->GetColor()); + pLast->Initialize(pos[0]+i*opts.fMove[0], pos[1]+i*opts.fMove[1], pos[2]+i*opts.fMove[2], m_nCurStep, m_nCurFrame); + pLast->SetColorIndex(pPiece->mColorIndex); pLast->ChangeKey(1, false, false, param, LC_PK_ROTATION); pLast->ChangeKey(1, true, false, param, LC_PK_ROTATION); } @@ -5021,8 +5025,8 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam) else pLast = pFirst = new Piece(pPiece->GetPieceInfo()); - pLast->Initialize(pos[0]+i*opts.fMove[0]+j*opts.f2D[0], pos[1]+i*opts.fMove[1]+j*opts.f2D[1], pos[2]+i*opts.fMove[2]+j*opts.f2D[2], - m_nCurStep, m_nCurFrame, pPiece->GetColor()); + pLast->Initialize(pos[0]+i*opts.fMove[0]+j*opts.f2D[0], pos[1]+i*opts.fMove[1]+j*opts.f2D[1], pos[2]+i*opts.fMove[2]+j*opts.f2D[2], m_nCurStep, m_nCurFrame); + pLast->SetColorIndex(pPiece->mColorIndex); pLast->ChangeKey(1, false, false, param, LC_PK_ROTATION); pLast->ChangeKey(1, true, false, param, LC_PK_ROTATION); } @@ -5040,8 +5044,8 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam) else pLast = pFirst = new Piece(pPiece->GetPieceInfo()); - pLast->Initialize(pos[0]+i*opts.fMove[0]+j*opts.f2D[0]+k*opts.f3D[0], pos[1]+i*opts.fMove[1]+j*opts.f2D[1]+k*opts.f3D[1], pos[2]+i*opts.fMove[2]+j*opts.f2D[2]+k*opts.f3D[2], - m_nCurStep, m_nCurFrame, pPiece->GetColor()); + pLast->Initialize(pos[0]+i*opts.fMove[0]+j*opts.f2D[0]+k*opts.f3D[0], pos[1]+i*opts.fMove[1]+j*opts.f2D[1]+k*opts.f3D[1], pos[2]+i*opts.fMove[2]+j*opts.f2D[2]+k*opts.f3D[2], m_nCurStep, m_nCurFrame); + pLast->SetColorIndex(pPiece->mColorIndex); pLast->ChangeKey(1, false, false, param, LC_PK_ROTATION); pLast->ChangeKey(1, true, false, param, LC_PK_ROTATION); } @@ -7608,11 +7612,11 @@ void Project::OnLeftButtonDown(View* view, int x, int y, bool bControl, bool bSh { Piece* pPiece = (Piece*)Closest; - if (pPiece->GetColor() != m_nCurColor) + if (pPiece->mColorIndex != m_nCurColor) { - bool bTrans = pPiece->IsTransparent(); - pPiece->SetColor(m_nCurColor); - if (bTrans != pPiece->IsTransparent()) + bool bTrans = pPiece->IsTranslucent(); + pPiece->SetColorIndex(m_nCurColor); + if (bTrans != pPiece->IsTranslucent()) pPiece->CalculateConnections(m_pConnections, m_bAnimation ? m_nCurFrame : m_nCurStep, m_bAnimation, true, true); SetModifiedFlag(true); @@ -7634,7 +7638,8 @@ void Project::OnLeftButtonDown(View* view, int x, int y, bool bControl, bool bSh GetPieceInsertPosition(view, x, y, Pos, Rot); Piece* pPiece = new Piece(m_pCurPiece); - pPiece->Initialize(Pos[0], Pos[1], Pos[2], m_nCurStep, m_nCurFrame, m_nCurColor); + pPiece->Initialize(Pos[0], Pos[1], Pos[2], m_nCurStep, m_nCurFrame); + pPiece->SetColorIndex(m_nCurColor); pPiece->ChangeKey(m_nCurStep, false, false, Rot, LC_PK_ROTATION); pPiece->ChangeKey(m_nCurFrame, true, false, Rot, LC_PK_ROTATION); @@ -7866,7 +7871,8 @@ void Project::OnLeftButtonUp(View* view, int x, int y, bool bControl, bool bShif GetPieceInsertPosition(view, x, y, Pos, Rot); Piece* pPiece = new Piece(m_pCurPiece); - pPiece->Initialize(Pos[0], Pos[1], Pos[2], m_nCurStep, m_nCurFrame, m_nCurColor); + pPiece->Initialize(Pos[0], Pos[1], Pos[2], m_nCurStep, m_nCurFrame); + pPiece->SetColorIndex(m_nCurColor); pPiece->ChangeKey(m_nCurStep, false, false, Rot, LC_PK_ROTATION); pPiece->ChangeKey(m_nCurFrame, true, false, Rot, LC_PK_ROTATION); diff --git a/win/Print.cpp b/win/Print.cpp index 7a249c0d..14d1bf77 100644 --- a/win/Print.cpp +++ b/win/Print.cpp @@ -410,7 +410,7 @@ static void PrintPiecesThread(void* pv) CFrameWndEx* pFrame = (CFrameWndEx*)pv; CView* pView = pFrame->GetActiveView(); CPrintDialog* PD = new CPrintDialog(FALSE, PD_ALLPAGES|PD_USEDEVMODECOPIES|PD_NOPAGENUMS|PD_NOSELECTION, pFrame); - PiecesLibrary *pLib = lcGetPiecesLibrary(); + PiecesLibrary *pLib = lcGetPiecesLibrary(); Project* project = lcGetActiveProject(); UINT *pieces = (UINT*)malloc(pLib->GetPieceCount ()*28*sizeof(UINT)); @@ -421,8 +421,8 @@ static void PrintPiecesThread(void* pv) for (Piece* tmp = project->m_pPieces; tmp; tmp = tmp->m_pNext) { int idx = pLib->GetPieceIndex (tmp->GetPieceInfo ()); - pieces[(idx*28)+tmp->GetColor()]++; - col[tmp->GetColor()]++; + pieces[(idx*28)+tmp->mColorCode]++; // fix LC_MAXCOLORS + col[tmp->mColorCode]++; } int rows = 0, cols = 1, i, j; diff --git a/win/Tools.cpp b/win/Tools.cpp index a54aa6ab..0b89dea5 100644 --- a/win/Tools.cpp +++ b/win/Tools.cpp @@ -544,7 +544,7 @@ void Export3DStudio() if (facemats[j]) { InitMatArrayIndex3ds (mobj, i, facemats[j]); - sprintf(mobj->matarray[i].name, "Material%02d", j == LC_COL_DEFAULT ? pPiece->GetColor() : j); + sprintf(mobj->matarray[i].name, "Material%d", j == LC_COL_DEFAULT ? pPiece->mColorCode : j); mobj->matarray[i].nfaces = facemats[j]; UINT curface = 0; diff --git a/win/propertiespane.cpp b/win/propertiespane.cpp index 2c248b7e..1fe87953 100644 --- a/win/propertiespane.cpp +++ b/win/propertiespane.cpp @@ -237,7 +237,7 @@ void CPropertiesPane::SetPiece(Object* Focus) CMFCPropertyGridProperty* Appearence = m_wndPropList.GetProperty(2); UpdateProperty(Appearence->GetSubItem(0), From); UpdateProperty(Appearence->GetSubItem(1), To); - ((CLeoCADMFCPropertyGridColorProperty*)Appearence->GetSubItem(2))->SetColor(pPiece->GetColor(), true); + ((CLeoCADMFCPropertyGridColorProperty*)Appearence->GetSubItem(2))->SetColor(pPiece->mColorIndex, true); mObject = Focus; }
Piece