mirror of
https://github.com/leozide/leocad
synced 2025-01-17 18:11:42 +01:00
Support more than 255 steps.
This commit is contained in:
parent
1b79096bd4
commit
109ec00f5f
19 changed files with 516 additions and 501 deletions
|
@ -269,7 +269,7 @@ void lcCamera::FileSave(lcFile& file) const
|
|||
|
||||
Object::FileSave(file);
|
||||
|
||||
lcuint8 ch = (unsigned char)strlen(m_strName);
|
||||
lcuint8 ch = (lcuint8)strlen(m_strName);
|
||||
file.WriteU8(ch);
|
||||
file.WriteBuffer(m_strName, ch);
|
||||
|
||||
|
@ -284,7 +284,7 @@ void lcCamera::FileSave(lcFile& file) const
|
|||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Camera operations
|
||||
|
||||
void lcCamera::Move(unsigned short nTime, bool AddKey, const lcVector3& Distance)
|
||||
void lcCamera::Move(lcStep Step, bool AddKey, const lcVector3& Distance)
|
||||
{
|
||||
if (IsSimple())
|
||||
AddKey = false;
|
||||
|
@ -293,20 +293,20 @@ void lcCamera::Move(unsigned short nTime, bool AddKey, const lcVector3& Distance
|
|||
{
|
||||
mPosition += Distance;
|
||||
lcAlign(mOrthoTarget, mPosition, mTargetPosition);
|
||||
ChangeKey(nTime, AddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_CK_EYE);
|
||||
}
|
||||
|
||||
if (IsSelected(LC_CAMERA_SECTION_TARGET))
|
||||
{
|
||||
mTargetPosition += Distance;
|
||||
ChangeKey(nTime, AddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_CK_TARGET);
|
||||
}
|
||||
|
||||
if (IsSelected(LC_CAMERA_SECTION_UPVECTOR))
|
||||
{
|
||||
mUpVector += Distance;
|
||||
mUpVector.Normalize();
|
||||
ChangeKey(nTime, AddKey, mTargetPosition, LC_CK_UP);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_CK_UP);
|
||||
}
|
||||
|
||||
lcVector3 FrontVector(mTargetPosition - mPosition);
|
||||
|
@ -319,9 +319,9 @@ void lcCamera::Move(unsigned short nTime, bool AddKey, const lcVector3& Distance
|
|||
mUpVector.Normalize();
|
||||
}
|
||||
|
||||
void lcCamera::UpdatePosition(unsigned short nTime)
|
||||
void lcCamera::UpdatePosition(lcStep Step)
|
||||
{
|
||||
CalculateKeys(nTime);
|
||||
CalculateKeys(Step);
|
||||
|
||||
lcVector3 FrontVector(mPosition - mTargetPosition);
|
||||
lcVector3 SideVector = lcCross(FrontVector, mUpVector);
|
||||
|
@ -592,7 +592,7 @@ void lcCamera::BoxTest(lcObjectBoxTest& ObjectBoxTest) const
|
|||
}
|
||||
}
|
||||
|
||||
void lcCamera::ZoomExtents(View* view, const lcVector3& Center, const lcVector3* Points, int NumPoints, unsigned short nTime, bool bAddKey)
|
||||
void lcCamera::ZoomExtents(View* view, const lcVector3& Center, const lcVector3* Points, int NumPoints, lcStep Step, bool AddKey)
|
||||
{
|
||||
int Viewport[4] = { 0, 0, view->mWidth, view->mHeight };
|
||||
|
||||
|
@ -607,15 +607,15 @@ void lcCamera::ZoomExtents(View* view, const lcVector3& Center, const lcVector3*
|
|||
mOrthoTarget = mTargetPosition;
|
||||
|
||||
if (IsSimple())
|
||||
bAddKey = false;
|
||||
AddKey = false;
|
||||
|
||||
ChangeKey(nTime, bAddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(nTime, bAddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_CK_TARGET);
|
||||
|
||||
UpdatePosition(nTime);
|
||||
UpdatePosition(Step);
|
||||
}
|
||||
|
||||
void lcCamera::ZoomRegion(const lcVector3* Points, float RatioX, float RatioY, unsigned short nTime, bool bAddKey)
|
||||
void lcCamera::ZoomRegion(const lcVector3* Points, float RatioX, float RatioY, lcStep Step, bool AddKey)
|
||||
{
|
||||
// Center camera.
|
||||
lcVector3 Eye = mPosition;
|
||||
|
@ -633,15 +633,15 @@ void lcCamera::ZoomRegion(const lcVector3* Points, float RatioX, float RatioY, u
|
|||
|
||||
// Change the camera and redraw.
|
||||
if (IsSimple())
|
||||
bAddKey = false;
|
||||
AddKey = false;
|
||||
|
||||
ChangeKey(nTime, bAddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(nTime, bAddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_CK_TARGET);
|
||||
|
||||
UpdatePosition(nTime);
|
||||
UpdatePosition(Step);
|
||||
}
|
||||
|
||||
void lcCamera::Zoom(float Distance, unsigned short nTime, bool bAddKey)
|
||||
void lcCamera::Zoom(float Distance, lcStep Step, bool AddKey)
|
||||
{
|
||||
lcVector3 FrontVector(mPosition - mTargetPosition);
|
||||
FrontVector.Normalize();
|
||||
|
@ -658,15 +658,15 @@ void lcCamera::Zoom(float Distance, unsigned short nTime, bool bAddKey)
|
|||
mTargetPosition += FrontVector;
|
||||
|
||||
if (IsSimple())
|
||||
bAddKey = false;
|
||||
AddKey = false;
|
||||
|
||||
ChangeKey(nTime, bAddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(nTime, bAddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_CK_TARGET);
|
||||
|
||||
UpdatePosition(nTime);
|
||||
UpdatePosition(Step);
|
||||
}
|
||||
|
||||
void lcCamera::Pan(float DistanceX, float DistanceY, unsigned short nTime, bool bAddKey)
|
||||
void lcCamera::Pan(float DistanceX, float DistanceY, lcStep Step, bool AddKey)
|
||||
{
|
||||
lcVector3 FrontVector(mPosition - mTargetPosition);
|
||||
lcVector3 SideVector = lcNormalize(lcCross(FrontVector, mUpVector));
|
||||
|
@ -677,15 +677,15 @@ void lcCamera::Pan(float DistanceX, float DistanceY, unsigned short nTime, bool
|
|||
mOrthoTarget += MoveVec;
|
||||
|
||||
if (IsSimple())
|
||||
bAddKey = false;
|
||||
AddKey = false;
|
||||
|
||||
ChangeKey(nTime, bAddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(nTime, bAddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_CK_TARGET);
|
||||
|
||||
UpdatePosition(nTime);
|
||||
UpdatePosition(Step);
|
||||
}
|
||||
|
||||
void lcCamera::Orbit(float DistanceX, float DistanceY, const lcVector3& CenterPosition, unsigned short nTime, bool bAddKey)
|
||||
void lcCamera::Orbit(float DistanceX, float DistanceY, const lcVector3& CenterPosition, lcStep Step, bool AddKey)
|
||||
{
|
||||
lcVector3 FrontVector(mPosition - mTargetPosition);
|
||||
|
||||
|
@ -709,16 +709,16 @@ void lcCamera::Orbit(float DistanceX, float DistanceY, const lcVector3& CenterPo
|
|||
mUpVector = lcMul31(mUpVector, transform);
|
||||
|
||||
if (IsSimple())
|
||||
bAddKey = false;
|
||||
AddKey = false;
|
||||
|
||||
ChangeKey(nTime, bAddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(nTime, bAddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(nTime, bAddKey, mUpVector, LC_CK_UP);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(Step, AddKey, mUpVector, LC_CK_UP);
|
||||
|
||||
UpdatePosition(nTime);
|
||||
UpdatePosition(Step);
|
||||
}
|
||||
|
||||
void lcCamera::Roll(float Distance, unsigned short nTime, bool bAddKey)
|
||||
void lcCamera::Roll(float Distance, lcStep Step, bool AddKey)
|
||||
{
|
||||
lcVector3 FrontVector(mPosition - mTargetPosition);
|
||||
lcMatrix44 Rotation = lcMatrix44FromAxisAngle(FrontVector, Distance);
|
||||
|
@ -726,27 +726,27 @@ void lcCamera::Roll(float Distance, unsigned short nTime, bool bAddKey)
|
|||
mUpVector = lcMul30(mUpVector, Rotation);
|
||||
|
||||
if (IsSimple())
|
||||
bAddKey = false;
|
||||
AddKey = false;
|
||||
|
||||
ChangeKey(nTime, bAddKey, mUpVector, LC_CK_UP);
|
||||
ChangeKey(Step, AddKey, mUpVector, LC_CK_UP);
|
||||
|
||||
UpdatePosition(nTime);
|
||||
UpdatePosition(Step);
|
||||
}
|
||||
|
||||
void lcCamera::Center(lcVector3& point, unsigned short nTime, bool bAddKey)
|
||||
void lcCamera::Center(lcVector3& point, lcStep Step, bool AddKey)
|
||||
{
|
||||
lcAlign(mTargetPosition, mPosition, point);
|
||||
|
||||
if (IsSimple())
|
||||
bAddKey = false;
|
||||
AddKey = false;
|
||||
|
||||
ChangeKey(nTime, bAddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(nTime, bAddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_CK_TARGET);
|
||||
|
||||
UpdatePosition(nTime);
|
||||
UpdatePosition(Step);
|
||||
}
|
||||
|
||||
void lcCamera::SetViewpoint(LC_VIEWPOINT Viewpoint, unsigned short nTime, bool bAddKey)
|
||||
void lcCamera::SetViewpoint(LC_VIEWPOINT Viewpoint, lcStep Step, bool AddKey)
|
||||
{
|
||||
lcVector3 Positions[] =
|
||||
{
|
||||
|
@ -776,13 +776,13 @@ void lcCamera::SetViewpoint(LC_VIEWPOINT Viewpoint, unsigned short nTime, bool b
|
|||
mUpVector = Ups[Viewpoint];
|
||||
|
||||
if (IsSimple())
|
||||
bAddKey = false;
|
||||
AddKey = false;
|
||||
|
||||
ChangeKey(nTime, bAddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(nTime, bAddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(nTime, bAddKey, mUpVector, LC_CK_UP);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(Step, AddKey, mUpVector, LC_CK_UP);
|
||||
|
||||
UpdatePosition(nTime);
|
||||
UpdatePosition(Step);
|
||||
}
|
||||
|
||||
void lcCamera::StartTiledRendering(int tw, int th, int iw, int ih, float AspectRatio)
|
||||
|
@ -828,7 +828,7 @@ bool lcCamera::EndTile()
|
|||
return false;
|
||||
}
|
||||
|
||||
void lcCamera::SetFocalPoint(const lcVector3& focus, unsigned short nTime, bool bAddKey)
|
||||
void lcCamera::SetFocalPoint(const lcVector3& focus, lcStep Step, bool AddKey)
|
||||
{
|
||||
if (IsOrtho())
|
||||
{
|
||||
|
@ -846,10 +846,10 @@ void lcCamera::SetFocalPoint(const lcVector3& focus, unsigned short nTime, bool
|
|||
}
|
||||
|
||||
if (IsSimple())
|
||||
bAddKey = false;
|
||||
AddKey = false;
|
||||
|
||||
ChangeKey(nTime, bAddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(nTime, bAddKey, mTargetPosition, LC_CK_TARGET);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_CK_EYE);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_CK_TARGET);
|
||||
|
||||
UpdatePosition(nTime);
|
||||
UpdatePosition(Step);
|
||||
}
|
||||
|
|
|
@ -252,20 +252,20 @@ public:
|
|||
void Select(bool bSelecting, bool bFocus, bool bMultiple);
|
||||
|
||||
|
||||
void UpdatePosition(unsigned short nTime);
|
||||
void UpdatePosition(lcStep Step);
|
||||
void CopyPosition(const Camera* camera);
|
||||
void Render(View* View);
|
||||
|
||||
void ZoomExtents(View* view, const lcVector3& Center, const lcVector3* Points, int NumPoints, unsigned short nTime, bool bAddKey);
|
||||
void ZoomRegion(const lcVector3* Points, float RatioX, float RatioY, unsigned short nTime, bool bAddKey);
|
||||
void Zoom(float Distance, unsigned short nTime, bool bAddKey);
|
||||
void Pan(float DistanceX, float DistanceY, unsigned short nTime, bool bAddKey);
|
||||
void Orbit(float DistanceX, float DistanceY, const lcVector3& CenterPosition, unsigned short nTime, bool bAddKey);
|
||||
void Roll(float Distance, unsigned short nTime, bool bAddKey);
|
||||
void Center(lcVector3& point, unsigned short nTime, bool bAddKey);
|
||||
void Move(unsigned short nTime, bool AddKey, const lcVector3& Distance);
|
||||
void SetViewpoint(LC_VIEWPOINT Viewpoint, unsigned short nTime, bool bAddKey);
|
||||
void SetFocalPoint(const lcVector3& focus, unsigned short nTime, bool bAddKey);
|
||||
void ZoomExtents(View* view, const lcVector3& Center, const lcVector3* Points, int NumPoints, lcStep Step, bool AddKey);
|
||||
void ZoomRegion(const lcVector3* Points, float RatioX, float RatioY, lcStep Step, bool AddKey);
|
||||
void Zoom(float Distance, lcStep Step, bool AddKey);
|
||||
void Pan(float DistanceX, float DistanceY, lcStep Step, bool AddKey);
|
||||
void Orbit(float DistanceX, float DistanceY, const lcVector3& CenterPosition, lcStep Step, bool AddKey);
|
||||
void Roll(float Distance, lcStep Step, bool AddKey);
|
||||
void Center(lcVector3& point, lcStep Step, bool AddKey);
|
||||
void Move(lcStep Step, bool AddKey, const lcVector3& Distance);
|
||||
void SetViewpoint(LC_VIEWPOINT Viewpoint, lcStep Step, bool AddKey);
|
||||
void SetFocalPoint(const lcVector3& focus, lcStep Step, bool AddKey);
|
||||
|
||||
void StartTiledRendering(int tw, int th, int iw, int ih, float fAspect);
|
||||
void GetTileInfo(int* row, int* col, int* width, int* height);
|
||||
|
|
|
@ -132,6 +132,7 @@ void lcApplication::ParseIntegerArgument(int* CurArg, int argc, char* argv[], in
|
|||
}
|
||||
else
|
||||
{
|
||||
*Value = 0;
|
||||
printf("Not enough parameters for the %s argument.", argv[(*CurArg) - 1]);
|
||||
}
|
||||
}
|
||||
|
@ -158,8 +159,8 @@ bool lcApplication::Initialize(int argc, char* argv[], const char* LibraryInstal
|
|||
bool ImageHighlight = false;
|
||||
int ImageWidth = lcGetProfileInt(LC_PROFILE_IMAGE_WIDTH);
|
||||
int ImageHeight = lcGetProfileInt(LC_PROFILE_IMAGE_HEIGHT);
|
||||
int ImageStart = 0;
|
||||
int ImageEnd = 0;
|
||||
lcStep ImageStart = 0;
|
||||
lcStep ImageEnd = 0;
|
||||
char* ImageName = NULL;
|
||||
|
||||
// File to open.
|
||||
|
@ -196,11 +197,15 @@ bool lcApplication::Initialize(int argc, char* argv[], const char* LibraryInstal
|
|||
}
|
||||
else if ((strcmp(Param, "-f") == 0) || (strcmp(Param, "--from") == 0))
|
||||
{
|
||||
ParseIntegerArgument(&i, argc, argv, &ImageStart);
|
||||
int Step;
|
||||
ParseIntegerArgument(&i, argc, argv, &Step);
|
||||
ImageStart = Step;
|
||||
}
|
||||
else if ((strcmp(Param, "-t") == 0) || (strcmp(Param, "--to") == 0))
|
||||
{
|
||||
ParseIntegerArgument(&i, argc, argv, &ImageEnd);
|
||||
int Step;
|
||||
ParseIntegerArgument(&i, argc, argv, &Step);
|
||||
ImageEnd = Step;
|
||||
}
|
||||
else if (strcmp(Param, "--highlight") == 0)
|
||||
ImageHighlight = true;
|
||||
|
@ -323,7 +328,7 @@ bool lcApplication::Initialize(int argc, char* argv[], const char* LibraryInstal
|
|||
|
||||
if ((ImageStart == 0) && (ImageEnd == 0))
|
||||
{
|
||||
ImageStart = ImageEnd = mProject->GetCurrentTime();
|
||||
ImageStart = ImageEnd = mProject->GetCurrentStep();
|
||||
}
|
||||
else if ((ImageStart == 0) && (ImageEnd != 0))
|
||||
{
|
||||
|
@ -343,14 +348,14 @@ bool lcApplication::Initialize(int argc, char* argv[], const char* LibraryInstal
|
|||
Image* images = new Image[ImageEnd - ImageStart + 1];
|
||||
mProject->CreateImages(images, ImageWidth, ImageHeight, ImageStart, ImageEnd, ImageHighlight);
|
||||
|
||||
for (int i = 0; i <= ImageEnd - ImageStart; i++)
|
||||
for (lcStep Step = 0; Step <= ImageEnd - ImageStart; Step++)
|
||||
{
|
||||
char idx[256];
|
||||
String Frame;
|
||||
|
||||
if (ImageStart != ImageEnd)
|
||||
{
|
||||
sprintf(idx, "%02d", i+1);
|
||||
sprintf(idx, "%02d", Step + 1);
|
||||
int Ext = FileName.ReverseFind('.');
|
||||
|
||||
Frame = FileName.Left(Ext) + idx + FileName.Right(FileName.GetLength() - Ext);
|
||||
|
@ -358,7 +363,7 @@ bool lcApplication::Initialize(int argc, char* argv[], const char* LibraryInstal
|
|||
else
|
||||
Frame = FileName;
|
||||
|
||||
images[i].FileSave(Frame, ImageFormat, ImageTransparent);
|
||||
images[Step].FileSave(Frame, ImageFormat, ImageTransparent);
|
||||
}
|
||||
|
||||
delete []images;
|
||||
|
|
|
@ -60,7 +60,7 @@ class lcMainWindow : public lcBaseWindow
|
|||
void UpdateSelectedObjects(int Flags, int SelectedCount, Object* Focus);
|
||||
void UpdateAction(int NewAction);
|
||||
void UpdatePaste(bool Enabled);
|
||||
void UpdateTime(int CurrentTime, int TotalTime);
|
||||
void UpdateCurrentStep();
|
||||
void SetAddKeys(bool AddKeys);
|
||||
void UpdateLockSnap(lcuint32 Snap);
|
||||
void UpdateSnap();
|
||||
|
|
|
@ -46,3 +46,13 @@ lcModel::lcModel()
|
|||
lcModel::~lcModel()
|
||||
{
|
||||
}
|
||||
|
||||
lcStep lcModel::GetLastStep() const
|
||||
{
|
||||
lcStep Step = 1;
|
||||
|
||||
for (int PieceIdx = 0; PieceIdx < mPieces.GetSize(); PieceIdx++)
|
||||
Step = lcMax(Step, mPieces[PieceIdx]->GetStepShow());
|
||||
|
||||
return Step;
|
||||
}
|
||||
|
|
|
@ -85,6 +85,11 @@ public:
|
|||
lcModel();
|
||||
~lcModel();
|
||||
|
||||
bool IsModified() const
|
||||
{
|
||||
return mSavedHistory != mUndoHistory[0];
|
||||
}
|
||||
|
||||
const lcArray<lcPiece*>& GetPieces() const
|
||||
{
|
||||
return mPieces;
|
||||
|
@ -105,9 +110,17 @@ public:
|
|||
return mGroups;
|
||||
}
|
||||
|
||||
lcStep GetLastStep() const;
|
||||
lcStep GetCurrentStep() const
|
||||
{
|
||||
return mCurrentStep;
|
||||
}
|
||||
|
||||
protected:
|
||||
lcModelProperties mProperties;
|
||||
|
||||
lcStep mCurrentStep;
|
||||
|
||||
lcArray<lcPiece*> mPieces;
|
||||
lcArray<lcCamera*> mCameras;
|
||||
lcArray<lcLight*> mLights;
|
||||
|
|
|
@ -214,26 +214,26 @@ void lcLight::BoxTest(lcObjectBoxTest& ObjectBoxTest) const
|
|||
}
|
||||
}
|
||||
|
||||
void lcLight::Move(unsigned short nTime, bool AddKey, const lcVector3& Distance)
|
||||
void lcLight::Move(lcStep Step, bool AddKey, const lcVector3& Distance)
|
||||
{
|
||||
if (IsSelected(LC_LIGHT_SECTION_POSITION))
|
||||
{
|
||||
mPosition += Distance;
|
||||
|
||||
ChangeKey(nTime, AddKey, mPosition, LC_LK_POSITION);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_LK_POSITION);
|
||||
}
|
||||
|
||||
if (IsSelected(LC_LIGHT_SECTION_TARGET))
|
||||
{
|
||||
mTargetPosition += Distance;
|
||||
|
||||
ChangeKey(nTime, AddKey, mTargetPosition, LC_LK_TARGET);
|
||||
ChangeKey(Step, AddKey, mTargetPosition, LC_LK_TARGET);
|
||||
}
|
||||
}
|
||||
|
||||
void lcLight::UpdatePosition(unsigned short nTime)
|
||||
void lcLight::UpdatePosition(lcStep Step)
|
||||
{
|
||||
CalculateKeys(nTime);
|
||||
CalculateKeys(Step);
|
||||
|
||||
if (IsPointLight())
|
||||
{
|
||||
|
|
|
@ -203,8 +203,8 @@ public:
|
|||
void RenderTarget();
|
||||
void RenderSphere();
|
||||
|
||||
void UpdatePosition(unsigned short nTime);
|
||||
void Move(unsigned short nTime, bool AddKey, const lcVector3& Distance);
|
||||
void UpdatePosition(lcStep Step);
|
||||
void Move(lcStep Step, bool AddKey, const lcVector3& Distance);
|
||||
bool Setup(int LightIndex);
|
||||
void CreateName(const lcArray<Light*>& Lights);
|
||||
bool FileLoad(lcFile& file);
|
||||
|
|
|
@ -70,7 +70,8 @@ void lcObject::FileSave(lcFile& file) const
|
|||
|
||||
for (node = m_pInstructionKeys; node; node = node->next)
|
||||
{
|
||||
file.WriteU16(node->time);
|
||||
lcuint16 Step = lcMin(node->Step, 0xFFFFU);
|
||||
file.WriteU16(Step);
|
||||
file.WriteFloats(node->param, 4);
|
||||
file.WriteU8(node->type);
|
||||
}
|
||||
|
@ -81,7 +82,7 @@ void lcObject::FileSave(lcFile& file) const
|
|||
// =============================================================================
|
||||
// Key handling
|
||||
|
||||
static LC_OBJECT_KEY* AddNode(LC_OBJECT_KEY *node, unsigned short nTime, unsigned char nType)
|
||||
static LC_OBJECT_KEY* AddNode(LC_OBJECT_KEY *node, lcStep Step, unsigned char nType)
|
||||
{
|
||||
LC_OBJECT_KEY* newnode = (LC_OBJECT_KEY*)malloc(sizeof(LC_OBJECT_KEY));
|
||||
|
||||
|
@ -94,7 +95,7 @@ static LC_OBJECT_KEY* AddNode(LC_OBJECT_KEY *node, unsigned short nTime, unsigne
|
|||
newnode->next = NULL;
|
||||
|
||||
newnode->type = nType;
|
||||
newnode->time = nTime;
|
||||
newnode->Step = Step;
|
||||
newnode->param[0] = newnode->param[1] = newnode->param[2] = newnode->param[3] = 0;
|
||||
|
||||
return newnode;
|
||||
|
@ -130,29 +131,28 @@ void lcObject::RemoveKeys()
|
|||
}
|
||||
}
|
||||
|
||||
void lcObject::ChangeKey(unsigned short nTime, bool bAddKey, const float *param, unsigned char nKeyType)
|
||||
void lcObject::ChangeKey(lcStep Step, bool AddKey, const float *param, unsigned char nKeyType)
|
||||
{
|
||||
LC_OBJECT_KEY *node, *poskey = NULL, *newpos = NULL;
|
||||
node = m_pInstructionKeys;
|
||||
|
||||
while (node)
|
||||
{
|
||||
if ((node->time <= nTime) &&
|
||||
(node->type == nKeyType))
|
||||
if ((node->Step <= Step) && (node->type == nKeyType))
|
||||
poskey = node;
|
||||
|
||||
node = node->next;
|
||||
}
|
||||
|
||||
if (bAddKey)
|
||||
if (AddKey)
|
||||
{
|
||||
if (poskey)
|
||||
{
|
||||
if (poskey->time != nTime)
|
||||
newpos = AddNode(poskey, nTime, nKeyType);
|
||||
if (poskey->Step != Step)
|
||||
newpos = AddNode(poskey, Step, nKeyType);
|
||||
}
|
||||
else
|
||||
newpos = AddNode(poskey, nTime, nKeyType);
|
||||
newpos = AddNode(poskey, Step, nKeyType);
|
||||
}
|
||||
|
||||
if (newpos == NULL)
|
||||
|
@ -162,38 +162,15 @@ void lcObject::ChangeKey(unsigned short nTime, bool bAddKey, const float *param,
|
|||
newpos->param[i] = param[i];
|
||||
}
|
||||
|
||||
void lcObject::CalculateKeys(unsigned short nTime)
|
||||
void lcObject::CalculateKeys(lcStep Step)
|
||||
{
|
||||
// LC_OBJECT_KEY *next[m_nKeyInfoCount], *prev[m_nKeyInfoCount], *node;
|
||||
LC_OBJECT_KEY *next[32], *prev[32], *node;
|
||||
int i, empty = m_nKeyInfoCount;
|
||||
LC_OBJECT_KEY* prev[32];
|
||||
|
||||
for (i = 0; i < m_nKeyInfoCount; i++)
|
||||
next[i] = NULL;
|
||||
|
||||
node = m_pInstructionKeys;
|
||||
|
||||
// Get the previous and next keys for each variable
|
||||
while (node && empty)
|
||||
{
|
||||
if (node->time <= nTime)
|
||||
{
|
||||
for (LC_OBJECT_KEY* node = m_pInstructionKeys; node; node = node->next)
|
||||
if (node->Step <= Step)
|
||||
prev[node->type] = node;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (next[node->type] == NULL)
|
||||
{
|
||||
next[node->type] = node;
|
||||
empty--;
|
||||
}
|
||||
}
|
||||
|
||||
node = node->next;
|
||||
}
|
||||
|
||||
// TODO: USE KEY IN/OUT WEIGHTS
|
||||
for (i = 0; i < m_nKeyInfoCount; i++)
|
||||
for (int i = 0; i < m_nKeyInfoCount; i++)
|
||||
{
|
||||
LC_OBJECT_KEY *p = prev[i];
|
||||
|
||||
|
@ -202,46 +179,20 @@ void lcObject::CalculateKeys(unsigned short nTime)
|
|||
}
|
||||
}
|
||||
|
||||
void lcObject::CalculateSingleKey(unsigned short nTime, int keytype, float *value) const
|
||||
{
|
||||
LC_OBJECT_KEY *prev = NULL, *node;
|
||||
|
||||
node = m_pInstructionKeys;
|
||||
|
||||
while (node)
|
||||
{
|
||||
if (node->type == keytype)
|
||||
{
|
||||
if (node->time <= nTime)
|
||||
prev = node;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
node = node->next;
|
||||
}
|
||||
|
||||
for (int j = 0; j < m_pKeyInfo[keytype].size; j++)
|
||||
value[j] = prev->param[j];
|
||||
}
|
||||
|
||||
void lcObject::InsertTime(unsigned short start, unsigned short time)
|
||||
void lcObject::InsertTime(lcStep Start, lcStep Time)
|
||||
{
|
||||
LC_OBJECT_KEY *node, *prev = NULL;
|
||||
unsigned short last;
|
||||
bool end[32];
|
||||
int i;
|
||||
|
||||
for (i = 0; i < m_nKeyInfoCount; i++)
|
||||
for (int i = 0; i < m_nKeyInfoCount; i++)
|
||||
end[i] = false;
|
||||
|
||||
node = m_pInstructionKeys;
|
||||
last = 255;
|
||||
|
||||
for (; node != NULL; prev = node, node = node->next)
|
||||
{
|
||||
// skip everything before the start time
|
||||
if ((node->time < start) || (node->time == 1))
|
||||
if ((node->Step < Start) || (node->Step == 1))
|
||||
continue;
|
||||
|
||||
// there's already a key at the end, delete this one
|
||||
|
@ -254,28 +205,27 @@ void lcObject::InsertTime(unsigned short start, unsigned short time)
|
|||
continue;
|
||||
}
|
||||
|
||||
node->time += time;
|
||||
if (node->time >= last)
|
||||
if (node->Step >= LC_STEP_MAX - Time)
|
||||
{
|
||||
node->time = last;
|
||||
node->Step = LC_STEP_MAX;
|
||||
end[node->type] = true;
|
||||
}
|
||||
else
|
||||
node->Step += Time;
|
||||
}
|
||||
}
|
||||
|
||||
void lcObject::RemoveTime(unsigned short start, unsigned short time)
|
||||
void lcObject::RemoveTime(lcStep Start, lcStep Time)
|
||||
{
|
||||
LC_OBJECT_KEY *node, *prev = NULL;
|
||||
|
||||
node = m_pInstructionKeys;
|
||||
LC_OBJECT_KEY *node = m_pInstructionKeys, *prev = NULL;
|
||||
|
||||
for (; node != NULL; prev = node, node = node->next)
|
||||
{
|
||||
// skip everything before the start time
|
||||
if ((node->time < start) || (node->time == 1))
|
||||
if ((node->Step < Start) || (node->Step == 1))
|
||||
continue;
|
||||
|
||||
if (node->time < (start + time))
|
||||
if (node->Step < Start + Time)
|
||||
{
|
||||
// delete this key
|
||||
prev->next = node->next;
|
||||
|
@ -285,8 +235,8 @@ void lcObject::RemoveTime(unsigned short start, unsigned short time)
|
|||
continue;
|
||||
}
|
||||
|
||||
node->time -= time;
|
||||
if (node->time < 1)
|
||||
node->time = 1;
|
||||
node->Step -= Time;
|
||||
if (node->Step < 1)
|
||||
node->Step = 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
#include "lc_math.h"
|
||||
#include "lc_array.h"
|
||||
|
||||
typedef lcuint32 lcStep;
|
||||
#define LC_STEP_MAX 0xffffffff
|
||||
|
||||
enum lcObjectType
|
||||
{
|
||||
LC_OBJECT_PIECE,
|
||||
|
@ -14,7 +17,7 @@ enum lcObjectType
|
|||
// key handling
|
||||
struct LC_OBJECT_KEY
|
||||
{
|
||||
unsigned short time;
|
||||
lcStep Step;
|
||||
float param[4];
|
||||
unsigned char type;
|
||||
LC_OBJECT_KEY* next;
|
||||
|
@ -87,7 +90,7 @@ public:
|
|||
virtual lcuint32 GetFocusSection() const = 0;
|
||||
|
||||
virtual lcVector3 GetSectionPosition(lcuint32 Section) const = 0;
|
||||
virtual void Move(unsigned short nTime, bool AddKey, const lcVector3& Distance) = 0;
|
||||
virtual void Move(lcStep Step, bool AddKey, const lcVector3& Distance) = 0;
|
||||
virtual void RayTest(lcObjectRayTest& ObjectRayTest) const = 0;
|
||||
virtual void BoxTest(lcObjectBoxTest& ObjectBoxTest) const = 0;
|
||||
virtual const char* GetName() const = 0;
|
||||
|
@ -97,10 +100,9 @@ protected:
|
|||
virtual void FileSave(lcFile& file) const;
|
||||
|
||||
public:
|
||||
void CalculateSingleKey(unsigned short nTime, int keytype, float *value) const;
|
||||
void ChangeKey(unsigned short time, bool addkey, const float *param, unsigned char keytype);
|
||||
virtual void InsertTime(unsigned short start, unsigned short time);
|
||||
virtual void RemoveTime(unsigned short start, unsigned short time);
|
||||
void ChangeKey(lcStep Step, bool AddKey, const float *param, unsigned char keytype);
|
||||
virtual void InsertTime(lcStep Start, lcStep Time);
|
||||
virtual void RemoveTime(lcStep Start, lcStep Time);
|
||||
|
||||
int GetKeyTypeCount() const
|
||||
{
|
||||
|
@ -119,7 +121,7 @@ public:
|
|||
|
||||
protected:
|
||||
void RegisterKeys(float *values[], LC_OBJECT_KEY_INFO* info, int count);
|
||||
void CalculateKeys(unsigned short nTime);
|
||||
void CalculateKeys(lcStep Step);
|
||||
|
||||
private:
|
||||
void RemoveKeys();
|
||||
|
|
111
common/piece.cpp
111
common/piece.cpp
|
@ -34,8 +34,8 @@ lcPiece::lcPiece(PieceInfo* pPieceInfo)
|
|||
mState = 0;
|
||||
mColorIndex = 0;
|
||||
mColorCode = 0;
|
||||
m_nStepShow = 1;
|
||||
m_nStepHide = 255;
|
||||
mStepShow = 1;
|
||||
mStepHide = LC_STEP_MAX;
|
||||
memset(m_strName, 0, sizeof(m_strName));
|
||||
mGroup = NULL;
|
||||
|
||||
|
@ -193,11 +193,16 @@ bool lcPiece::FileLoad(lcFile& file)
|
|||
file.ReadU32(&mColorCode, 1);
|
||||
mColorIndex = lcGetColorIndex(mColorCode);
|
||||
|
||||
file.ReadU8(&m_nStepShow, 1);
|
||||
lcuint8 Step;
|
||||
file.ReadU8(&Step, 1);
|
||||
mStepShow = Step;
|
||||
if (version > 1)
|
||||
file.ReadU8(&m_nStepHide, 1);
|
||||
{
|
||||
file.ReadU8(&Step, 1);
|
||||
mStepHide = Step == 255 ? LC_STEP_MAX : Step;
|
||||
}
|
||||
else
|
||||
m_nStepHide = 255;
|
||||
mStepHide = LC_STEP_MAX;
|
||||
|
||||
if (version > 5)
|
||||
{
|
||||
|
@ -252,8 +257,8 @@ void lcPiece::FileSave(lcFile& file) const
|
|||
|
||||
file.WriteBuffer(mPieceInfo->m_strName, LC_PIECE_NAME_LEN);
|
||||
file.WriteU32(mColorCode);
|
||||
file.WriteU8(m_nStepShow);
|
||||
file.WriteU8(m_nStepHide);
|
||||
file.WriteU8(lcMin(mStepShow, 254U));
|
||||
file.WriteU8(lcMin(mStepHide, 255U));
|
||||
file.WriteU16(1); // m_nFrameShow
|
||||
file.WriteU16(100); // m_nFrameHide
|
||||
|
||||
|
@ -269,9 +274,9 @@ void lcPiece::FileSave(lcFile& file) const
|
|||
file.WriteS32(GroupIndex);
|
||||
}
|
||||
|
||||
void lcPiece::Initialize(float x, float y, float z, unsigned char nStep)
|
||||
void lcPiece::Initialize(float x, float y, float z, lcStep Step)
|
||||
{
|
||||
m_nStepShow = nStep;
|
||||
mStepShow = Step;
|
||||
|
||||
float pos[3] = { x, y, z }, rot[4] = { 0, 0, 1, 0 };
|
||||
ChangeKey(1, true, pos, LC_PK_POSITION);
|
||||
|
@ -298,26 +303,68 @@ void lcPiece::CreateName(const lcArray<Piece*>& Pieces)
|
|||
m_strName[sizeof(m_strName) - 1] = 0;
|
||||
}
|
||||
|
||||
void lcPiece::InsertTime(unsigned short start, unsigned short time)
|
||||
void lcPiece::InsertTime(lcStep Start, lcStep Time)
|
||||
{
|
||||
if (m_nStepShow >= start)
|
||||
m_nStepShow = lcMin(m_nStepShow + time, 255);
|
||||
|
||||
if (m_nStepHide >= start)
|
||||
m_nStepHide = lcMin(m_nStepHide + time, 255);
|
||||
|
||||
Object::InsertTime(start, time);
|
||||
if (mStepShow >= Start)
|
||||
{
|
||||
if (mStepShow < LC_STEP_MAX - Time)
|
||||
mStepShow += Time;
|
||||
else
|
||||
mStepShow = LC_STEP_MAX;
|
||||
}
|
||||
|
||||
void lcPiece::RemoveTime (unsigned short start, unsigned short time)
|
||||
if (mStepHide >= Start)
|
||||
{
|
||||
if (m_nStepShow >= start)
|
||||
m_nStepShow = lcMax(m_nStepShow - time, 1);
|
||||
if (mStepHide < LC_STEP_MAX - Time)
|
||||
mStepHide += Time;
|
||||
else
|
||||
mStepHide = LC_STEP_MAX;
|
||||
}
|
||||
|
||||
if (m_nStepHide != 255)
|
||||
m_nStepHide = lcMax(m_nStepHide - time, 1);
|
||||
if (mStepShow >= mStepHide)
|
||||
{
|
||||
if (mStepShow != LC_STEP_MAX)
|
||||
mStepHide = mStepShow + 1;
|
||||
else
|
||||
{
|
||||
mStepShow = LC_STEP_MAX - 1;
|
||||
mStepHide = LC_STEP_MAX;
|
||||
}
|
||||
}
|
||||
|
||||
Object::RemoveTime(start, time);
|
||||
Object::InsertTime(Start, Time);
|
||||
}
|
||||
|
||||
void lcPiece::RemoveTime(lcStep Start, lcStep Time)
|
||||
{
|
||||
if (mStepShow >= Start)
|
||||
{
|
||||
if (mStepShow > Time)
|
||||
mStepShow -= Time;
|
||||
else
|
||||
mStepShow = 1;
|
||||
}
|
||||
|
||||
if (mStepHide != LC_STEP_MAX)
|
||||
{
|
||||
if (mStepHide > Time)
|
||||
mStepHide -= Time;
|
||||
else
|
||||
mStepHide = 1;
|
||||
}
|
||||
|
||||
if (mStepShow >= mStepHide)
|
||||
{
|
||||
if (mStepShow != LC_STEP_MAX)
|
||||
mStepHide = mStepShow + 1;
|
||||
else
|
||||
{
|
||||
mStepShow = LC_STEP_MAX - 1;
|
||||
mStepHide = LC_STEP_MAX;
|
||||
}
|
||||
}
|
||||
|
||||
Object::RemoveTime(Start, Time);
|
||||
}
|
||||
|
||||
void lcPiece::RayTest(lcObjectRayTest& ObjectRayTest) const
|
||||
|
@ -402,27 +449,21 @@ void lcPiece::BoxTest(lcObjectBoxTest& ObjectBoxTest) const
|
|||
}
|
||||
}
|
||||
|
||||
void lcPiece::Move(unsigned short nTime, bool AddKey, const lcVector3& Distance)
|
||||
void lcPiece::Move(lcStep Step, bool AddKey, const lcVector3& Distance)
|
||||
{
|
||||
mPosition += Distance;
|
||||
|
||||
ChangeKey(nTime, AddKey, mPosition, LC_PK_POSITION);
|
||||
ChangeKey(Step, AddKey, mPosition, LC_PK_POSITION);
|
||||
|
||||
mModelWorld.SetTranslation(mPosition);
|
||||
}
|
||||
|
||||
bool lcPiece::IsVisible(unsigned short nTime)
|
||||
bool lcPiece::IsVisible(lcStep Step)
|
||||
{
|
||||
if (mState & LC_PIECE_HIDDEN)
|
||||
return false;
|
||||
|
||||
if (m_nStepShow > nTime)
|
||||
return false;
|
||||
|
||||
if ((m_nStepHide == 255) || (m_nStepHide > nTime))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return (mStepShow <= Step) && (mStepHide > Step);
|
||||
}
|
||||
|
||||
void lcPiece::CompareBoundingBox(float box[6])
|
||||
|
@ -457,9 +498,9 @@ lcGroup* lcPiece::GetTopGroup()
|
|||
return mGroup ? mGroup->GetTopGroup() : NULL;
|
||||
}
|
||||
|
||||
void lcPiece::UpdatePosition(unsigned short nTime)
|
||||
void lcPiece::UpdatePosition(lcStep Step)
|
||||
{
|
||||
CalculateKeys(nTime);
|
||||
CalculateKeys(Step);
|
||||
|
||||
mModelWorld = lcMatrix44FromAxisAngle(lcVector3(mRotation[0], mRotation[1], mRotation[2]), mRotation[3] * LC_DTOR);
|
||||
mModelWorld.SetTranslation(mPosition);
|
||||
|
|
|
@ -98,8 +98,8 @@ public:
|
|||
virtual void RayTest(lcObjectRayTest& ObjectRayTest) const;
|
||||
virtual void BoxTest(lcObjectBoxTest& ObjectBoxTest) const;
|
||||
|
||||
virtual void InsertTime(unsigned short start, unsigned short time);
|
||||
virtual void RemoveTime(unsigned short start, unsigned short time);
|
||||
virtual void InsertTime(lcStep Start, lcStep Time);
|
||||
virtual void RemoveTime(lcStep Start, lcStep Time);
|
||||
|
||||
bool IsHidden()
|
||||
{
|
||||
|
@ -119,16 +119,16 @@ public:
|
|||
return m_strName;
|
||||
}
|
||||
|
||||
bool IsVisible(unsigned short nTime);
|
||||
void Initialize(float x, float y, float z, unsigned char nStep);
|
||||
bool IsVisible(lcStep Step);
|
||||
void Initialize(float x, float y, float z, lcStep Step);
|
||||
void CreateName(const lcArray<Piece*>& Pieces);
|
||||
void CompareBoundingBox(float box[6]);
|
||||
void SetPieceInfo(PieceInfo* pPieceInfo);
|
||||
bool FileLoad(lcFile& file);
|
||||
void FileSave(lcFile& file) const;
|
||||
|
||||
void UpdatePosition(unsigned short nTime);
|
||||
void Move(unsigned short nTime, bool AddKey, const lcVector3& Distance);
|
||||
void UpdatePosition(lcStep Step);
|
||||
void Move(lcStep Step, bool AddKey, const lcVector3& Distance);
|
||||
|
||||
lcGroup* GetTopGroup();
|
||||
|
||||
|
@ -146,14 +146,26 @@ public:
|
|||
{ strcpy(m_strName, name); }
|
||||
const char* GetName()
|
||||
{ return m_strName; }
|
||||
void SetStepShow(unsigned char step)
|
||||
{ m_nStepShow = step; }
|
||||
unsigned char GetStepShow()
|
||||
{ return m_nStepShow; }
|
||||
void SetStepHide(unsigned char step)
|
||||
{ m_nStepHide = step; }
|
||||
unsigned char GetStepHide()
|
||||
{ return (unsigned char)m_nStepHide; }
|
||||
|
||||
lcStep GetStepShow() const
|
||||
{
|
||||
return mStepShow;
|
||||
}
|
||||
|
||||
lcStep GetStepHide() const
|
||||
{
|
||||
return mStepHide;
|
||||
}
|
||||
|
||||
void SetStepHide(lcStep Step)
|
||||
{
|
||||
mStepHide = Step;
|
||||
}
|
||||
|
||||
void SetStepShow(lcStep Step)
|
||||
{
|
||||
mStepShow = Step;
|
||||
}
|
||||
|
||||
void SetColorCode(lcuint32 ColorCode)
|
||||
{
|
||||
|
@ -181,8 +193,8 @@ protected:
|
|||
// Atributes
|
||||
Group* mGroup;
|
||||
|
||||
lcuint8 m_nStepShow;
|
||||
lcuint8 m_nStepHide;
|
||||
lcStep mStepShow;
|
||||
lcStep mStepHide;
|
||||
|
||||
lcuint8 mState;
|
||||
char m_strName[81];
|
||||
|
|
|
@ -67,7 +67,7 @@ void Project::UpdateInterface()
|
|||
gMainWindow->UpdatePerspective();
|
||||
|
||||
UpdateSelection();
|
||||
gMainWindow->UpdateTime(m_nCurStep, 255);
|
||||
gMainWindow->UpdateCurrentStep();
|
||||
|
||||
const lcArray<View*> Views = gMainWindow->GetViews();
|
||||
for (int i = 0; i < Views.GetSize(); i++)
|
||||
|
@ -135,8 +135,8 @@ void Project::LoadDefaults(bool cameras)
|
|||
gMainWindow->UpdateLockSnap(m_nSnap);
|
||||
m_nMoveSnap = 0x0304;
|
||||
gMainWindow->UpdateSnap();
|
||||
m_nCurStep = 1;
|
||||
gMainWindow->UpdateTime(1, 255);
|
||||
mCurrentStep = 1;
|
||||
gMainWindow->UpdateCurrentStep();
|
||||
strcpy(m_strHeader, "");
|
||||
strcpy(m_strFooter, "Page &P");
|
||||
m_pTerrain->LoadDefaults(true);
|
||||
|
@ -239,7 +239,7 @@ bool Project::FileLoad(lcFile* file, bool bUndo, bool bMerge)
|
|||
file->ReadS32(&i, 1); //m_nCurGroup = i;
|
||||
file->ReadS32(&i, 1); //m_nCurColor = i;
|
||||
file->ReadS32(&i, 1); //action = i;
|
||||
file->ReadS32(&i, 1); m_nCurStep = i;
|
||||
file->ReadS32(&i, 1); mCurrentStep = i;
|
||||
}
|
||||
|
||||
if (fv > 0.8f)
|
||||
|
@ -605,7 +605,7 @@ bool Project::FileLoad(lcFile* file, bool bUndo, bool bMerge)
|
|||
gMainWindow->UpdateSnap();
|
||||
gMainWindow->UpdateCameraMenu();
|
||||
UpdateSelection();
|
||||
gMainWindow->UpdateTime(m_nCurStep, 255);
|
||||
gMainWindow->UpdateCurrentStep();
|
||||
gMainWindow->UpdateAllViews();
|
||||
|
||||
return true;
|
||||
|
@ -637,7 +637,7 @@ void Project::FileSave(lcFile* file, bool bUndo)
|
|||
i = 0;//i = m_nCurColor;
|
||||
file->WriteS32(&i, 1);
|
||||
i = 0; file->WriteS32(&i, 1); // m_nCurAction
|
||||
i = m_nCurStep; file->WriteS32(&i, 1);
|
||||
i = mCurrentStep; file->WriteS32(&i, 1);
|
||||
file->WriteU32(0);//m_nScene
|
||||
|
||||
file->WriteS32(mPieces.GetSize());
|
||||
|
@ -733,8 +733,7 @@ void Project::FileSave(lcFile* file, bool bUndo)
|
|||
opts.transparent = false;
|
||||
opts.format = LC_IMAGE_GIF;
|
||||
|
||||
i = m_bAnimation ? m_nCurFrame : m_nCurStep;
|
||||
CreateImages(image, 120, 100, i, i, false);
|
||||
CreateImages(image, 120, 100, mCurrentStep, mCurrentStep, false);
|
||||
image[0].FileSave (*file, &opts);
|
||||
delete []image;
|
||||
}
|
||||
|
@ -1021,7 +1020,6 @@ bool Project::DoSave(const char* FileName)
|
|||
|
||||
if ((strcmp(ext, "dat") == 0) || (strcmp(ext, "ldr") == 0))
|
||||
{
|
||||
int i, steps = GetLastStep();
|
||||
char buf[256];
|
||||
|
||||
ptr = strrchr(m_strPathName, '\\');
|
||||
|
@ -1032,8 +1030,7 @@ bool Project::DoSave(const char* FileName)
|
|||
else
|
||||
ptr++;
|
||||
|
||||
sprintf(buf, "0 Model exported from LeoCAD\r\n"
|
||||
"0 Original name: %s\r\n", ptr);
|
||||
sprintf(buf, "0 Model exported from LeoCAD\r\n0 Original name: %s\r\n", ptr);
|
||||
if (!mProperties.mAuthor.IsEmpty())
|
||||
{
|
||||
strcat(buf, "0 Author: ");
|
||||
|
@ -1045,13 +1042,14 @@ bool Project::DoSave(const char* FileName)
|
|||
|
||||
const char* OldLocale = setlocale(LC_NUMERIC, "C");
|
||||
|
||||
for (i = 1; i <= steps; i++)
|
||||
lcStep LastStep = GetLastStep();
|
||||
for (lcStep Step = 1; Step <= LastStep; Step++)
|
||||
{
|
||||
for (int PieceIdx = 0; PieceIdx < mPieces.GetSize(); PieceIdx++)
|
||||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if ((Piece->IsVisible(i)) && (Piece->GetStepShow() == i))
|
||||
if ((Piece->IsVisible(Step)) && (Piece->GetStepShow() == Step))
|
||||
{
|
||||
const float* f = Piece->mModelWorld;
|
||||
sprintf (buf, "1 %d %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %s.DAT\r\n",
|
||||
|
@ -1060,7 +1058,7 @@ bool Project::DoSave(const char* FileName)
|
|||
}
|
||||
}
|
||||
|
||||
if (i != steps)
|
||||
if (Step != LastStep)
|
||||
file.WriteBuffer("0 STEP\r\n", 8);
|
||||
}
|
||||
file.WriteBuffer("0\r\n", 3);
|
||||
|
@ -1220,8 +1218,8 @@ bool Project::OnOpenDocument(const char* lpszPathName)
|
|||
else
|
||||
FileReadLDraw(&file, mat, &ok, 16, &step, FileArray);
|
||||
|
||||
m_nCurStep = step;
|
||||
gMainWindow->UpdateTime(m_nCurStep, 255);
|
||||
mCurrentStep = step;
|
||||
gMainWindow->UpdateCurrentStep();
|
||||
gMainWindow->UpdateFocusObject(GetFocusObject());
|
||||
UpdateSelection();
|
||||
CalculateStep();
|
||||
|
@ -1460,7 +1458,7 @@ void Project::RenderScenePieces(View* view, bool DrawInterface)
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if (!Piece->IsVisible(m_nCurStep))
|
||||
if (!Piece->IsVisible(mCurrentStep))
|
||||
continue;
|
||||
|
||||
PieceInfo* Info = Piece->mPieceInfo;
|
||||
|
@ -1506,7 +1504,7 @@ void Project::RenderScenePieces(View* view, bool DrawInterface)
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if (!Piece->IsVisible(m_nCurStep) || !Piece->IsSelected())
|
||||
if (!Piece->IsVisible(mCurrentStep) || !Piece->IsSelected())
|
||||
continue;
|
||||
|
||||
PieceInfo* PieceInfo = Piece->mPieceInfo;
|
||||
|
@ -1626,7 +1624,7 @@ void Project::RenderSceneObjects(View* view)
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if (Piece->IsVisible(m_nCurStep))
|
||||
if (Piece->IsVisible(mCurrentStep))
|
||||
Piece->CompareBoundingBox(bs);
|
||||
}
|
||||
|
||||
|
@ -1989,11 +1987,11 @@ void Project::CalculateStep()
|
|||
for (int PieceIdx = 0; PieceIdx < mPieces.GetSize(); PieceIdx++)
|
||||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
Piece->UpdatePosition(m_nCurStep);
|
||||
Piece->UpdatePosition(mCurrentStep);
|
||||
|
||||
if (Piece->IsSelected())
|
||||
{
|
||||
if (!Piece->IsVisible(m_nCurStep))
|
||||
if (!Piece->IsVisible(mCurrentStep))
|
||||
Piece->SetSelected(false);
|
||||
else
|
||||
SelectGroup(Piece->GetTopGroup(), true);
|
||||
|
@ -2001,10 +1999,10 @@ void Project::CalculateStep()
|
|||
}
|
||||
|
||||
for (int CameraIdx = 0; CameraIdx < mCameras.GetSize(); CameraIdx++)
|
||||
mCameras[CameraIdx]->UpdatePosition(m_nCurStep);
|
||||
mCameras[CameraIdx]->UpdatePosition(mCurrentStep);
|
||||
|
||||
for (int LightIdx = 0; LightIdx < mLights.GetSize(); LightIdx++)
|
||||
mLights[LightIdx]->UpdatePosition(m_nCurStep);
|
||||
mLights[LightIdx]->UpdatePosition(mCurrentStep);
|
||||
}
|
||||
|
||||
bool Project::RemoveSelectedObjects()
|
||||
|
@ -2199,15 +2197,6 @@ void Project::CheckAutoSave()
|
|||
*/
|
||||
}
|
||||
|
||||
unsigned char Project::GetLastStep()
|
||||
{
|
||||
unsigned char last = 1;
|
||||
for (int PieceIdx = 0; PieceIdx < mPieces.GetSize(); PieceIdx++)
|
||||
last = lcMax(last, mPieces[PieceIdx]->GetStepShow());
|
||||
|
||||
return last;
|
||||
}
|
||||
|
||||
void Project::FindPiece(bool FindFirst, bool SearchForward)
|
||||
{
|
||||
if (mPieces.IsEmpty())
|
||||
|
@ -2220,7 +2209,7 @@ void Project::FindPiece(bool FindFirst, bool SearchForward)
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if (Piece->IsFocused() && Piece->IsVisible(m_nCurStep))
|
||||
if (Piece->IsFocused() && Piece->IsVisible(mCurrentStep))
|
||||
{
|
||||
StartIdx = PieceIdx;
|
||||
break;
|
||||
|
@ -2248,7 +2237,7 @@ void Project::FindPiece(bool FindFirst, bool SearchForward)
|
|||
|
||||
Piece* Current = mPieces[CurrentIdx];
|
||||
|
||||
if (!Current->IsVisible(m_nCurStep))
|
||||
if (!Current->IsVisible(mCurrentStep))
|
||||
continue;
|
||||
|
||||
if ((!mSearchOptions.MatchInfo || Current->mPieceInfo == mSearchOptions.Info) &&
|
||||
|
@ -2274,7 +2263,7 @@ void Project::ZoomExtents(int FirstView, int LastView)
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if (Piece->IsVisible(m_nCurStep))
|
||||
if (Piece->IsVisible(mCurrentStep))
|
||||
Piece->CompareBoundingBox(bs);
|
||||
}
|
||||
|
||||
|
@ -2297,7 +2286,7 @@ void Project::ZoomExtents(int FirstView, int LastView)
|
|||
{
|
||||
View* view = Views[vp];
|
||||
|
||||
view->mCamera->ZoomExtents(view, Center, Points, 8, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
view->mCamera->ZoomExtents(view, Center, Points, 8, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
}
|
||||
|
||||
gMainWindow->UpdateFocusObject(GetFocusObject());
|
||||
|
@ -2336,7 +2325,7 @@ void Project::GetPiecesUsed(lcArray<lcPiecesUsedEntry>& PiecesUsed) const
|
|||
}
|
||||
|
||||
// Create a series of pictures
|
||||
void Project::CreateImages(Image* images, int width, int height, unsigned short from, unsigned short to, bool hilite)
|
||||
void Project::CreateImages(Image* images, int width, int height, lcStep from, lcStep to, bool hilite)
|
||||
{
|
||||
if (!GL_BeginRenderToTexture(width, height))
|
||||
{
|
||||
|
@ -2344,9 +2333,8 @@ void Project::CreateImages(Image* images, int width, int height, unsigned short
|
|||
return;
|
||||
}
|
||||
|
||||
unsigned short oldtime;
|
||||
lcStep CurrentStep = mCurrentStep;
|
||||
unsigned char* buf = (unsigned char*)malloc(width*height*3);
|
||||
oldtime = m_nCurStep;
|
||||
|
||||
View view(this);
|
||||
view.SetCamera(gMainWindow->GetActiveView()->mCamera, false);
|
||||
|
@ -2359,9 +2347,9 @@ void Project::CreateImages(Image* images, int width, int height, unsigned short
|
|||
|
||||
RenderInitialize();
|
||||
|
||||
for (int i = from; i <= to; i++)
|
||||
for (lcStep i = from; i <= to; i++)
|
||||
{
|
||||
m_nCurStep = i;
|
||||
mCurrentStep = i;
|
||||
|
||||
if (hilite)
|
||||
{
|
||||
|
@ -2380,14 +2368,13 @@ void Project::CreateImages(Image* images, int width, int height, unsigned short
|
|||
if (hilite)
|
||||
SelectAndFocusNone(false);
|
||||
|
||||
m_nCurStep = (unsigned char)oldtime;
|
||||
CalculateStep();
|
||||
SetCurrentStep(CurrentStep);
|
||||
free(buf);
|
||||
|
||||
GL_EndRenderToTexture();
|
||||
}
|
||||
|
||||
void Project::CreateHTMLPieceList(FILE* f, int nStep, bool bImages, const char* ext)
|
||||
void Project::CreateHTMLPieceList(FILE* f, lcStep Step, bool bImages, const char* ext)
|
||||
{
|
||||
int* ColorsUsed = new int[gColorList.GetSize()];
|
||||
memset(ColorsUsed, 0, sizeof(ColorsUsed[0]) * gColorList.GetSize());
|
||||
|
@ -2398,7 +2385,7 @@ void Project::CreateHTMLPieceList(FILE* f, int nStep, bool bImages, const char*
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if ((Piece->GetStepShow() == nStep) || (nStep == 0))
|
||||
if ((Piece->GetStepShow() == Step) || (Step == 0))
|
||||
ColorsUsed[Piece->mColorIndex]++;
|
||||
}
|
||||
|
||||
|
@ -2427,7 +2414,7 @@ void Project::CreateHTMLPieceList(FILE* f, int nStep, bool bImages, const char*
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if ((Piece->mPieceInfo == pInfo) && ((Piece->GetStepShow() == nStep) || (nStep == 0)))
|
||||
if ((Piece->mPieceInfo == pInfo) && ((Piece->GetStepShow() == Step) || (Step == 0)))
|
||||
{
|
||||
PiecesUsed[Piece->mColorIndex]++;
|
||||
Add = true;
|
||||
|
@ -3306,8 +3293,8 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
}
|
||||
}
|
||||
|
||||
Options.Start = m_nCurStep;
|
||||
Options.End = m_nCurStep;
|
||||
Options.Start = mCurrentStep;
|
||||
Options.End = mCurrentStep;
|
||||
|
||||
if (!gMainWindow->DoDialog(LC_DIALOG_SAVE_IMAGE, &Options))
|
||||
break;
|
||||
|
@ -3461,8 +3448,7 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
FILE* f;
|
||||
const char *ext, *htmlext;
|
||||
char fn[LC_MAXPATH];
|
||||
int i;
|
||||
unsigned short last = GetLastStep();
|
||||
lcStep LastStep = GetLastStep();
|
||||
|
||||
switch (Options.ImageFormat)
|
||||
{
|
||||
|
@ -3492,13 +3478,13 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
|
||||
fprintf (f, "<HTML>\n<HEAD>\n<TITLE>Instructions for %s</TITLE>\n</HEAD>\n<BR>\n<CENTER>\n", m_strTitle);
|
||||
|
||||
for (i = 1; i <= last; i++)
|
||||
for (lcStep Step = 1; Step <= LastStep; Step++)
|
||||
{
|
||||
fprintf(f, "<IMG SRC=\"%s-%02d%s\" ALT=\"Step %02d\" WIDTH=%d HEIGHT=%d><BR><BR>\n",
|
||||
m_strTitle, i, ext, i, Options.StepImagesWidth, Options.StepImagesHeight);
|
||||
m_strTitle, Step, ext, Step, Options.StepImagesWidth, Options.StepImagesHeight);
|
||||
|
||||
if (Options.PartsListStep)
|
||||
CreateHTMLPieceList(f, i, Options.PartsListImages, ext);
|
||||
CreateHTMLPieceList(f, Step, Options.PartsListImages, ext);
|
||||
}
|
||||
|
||||
if (Options.PartsListEnd)
|
||||
|
@ -3525,8 +3511,8 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
|
||||
fprintf(f, "<HTML>\n<HEAD>\n<TITLE>Instructions for %s</TITLE>\n</HEAD>\n<BR>\n<CENTER>\n", m_strTitle);
|
||||
|
||||
for (i = 1; i <= last; i++)
|
||||
fprintf(f, "<A HREF=\"%s-%02d%s\">Step %d<BR>\n</A>", m_strTitle, i, htmlext, i);
|
||||
for (lcStep Step = 1; Step <= LastStep; Step++)
|
||||
fprintf(f, "<A HREF=\"%s-%02d%s\">Step %d<BR>\n</A>", m_strTitle, Step, htmlext, Step);
|
||||
|
||||
if (Options.PartsListEnd)
|
||||
fprintf(f, "<A HREF=\"%s-pieces%s\">Pieces Used</A><BR>\n", m_strTitle, htmlext);
|
||||
|
@ -3536,9 +3522,9 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
}
|
||||
|
||||
// Create each step
|
||||
for (i = 1; i <= last; i++)
|
||||
for (lcStep Step = 1; Step <= LastStep; Step++)
|
||||
{
|
||||
sprintf(fn, "%s%s-%02d%s", Options.PathName, m_strTitle, i, htmlext);
|
||||
sprintf(fn, "%s%s-%02d%s", Options.PathName, m_strTitle, Step, htmlext);
|
||||
f = fopen(fn, "wt");
|
||||
|
||||
if (!f)
|
||||
|
@ -3547,22 +3533,22 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
break;
|
||||
}
|
||||
|
||||
fprintf(f, "<HTML>\n<HEAD>\n<TITLE>%s - Step %02d</TITLE>\n</HEAD>\n<BR>\n<CENTER>\n", m_strTitle, i);
|
||||
fprintf(f, "<HTML>\n<HEAD>\n<TITLE>%s - Step %02d</TITLE>\n</HEAD>\n<BR>\n<CENTER>\n", m_strTitle, Step);
|
||||
fprintf(f, "<IMG SRC=\"%s-%02d%s\" ALT=\"Step %02d\" WIDTH=%d HEIGHT=%d><BR><BR>\n",
|
||||
m_strTitle, i, ext, i, Options.StepImagesWidth, Options.StepImagesHeight);
|
||||
m_strTitle, Step, ext, Step, Options.StepImagesWidth, Options.StepImagesHeight);
|
||||
|
||||
if (Options.PartsListStep)
|
||||
CreateHTMLPieceList(f, i, Options.PartsListImages, ext);
|
||||
CreateHTMLPieceList(f, Step, Options.PartsListImages, ext);
|
||||
|
||||
fputs("</CENTER>\n<BR><HR><BR>", f);
|
||||
if (i != 1)
|
||||
fprintf(f, "<A HREF=\"%s-%02d%s\">Previous</A> ", m_strTitle, i-1, htmlext);
|
||||
if (Step != 1)
|
||||
fprintf(f, "<A HREF=\"%s-%02d%s\">Previous</A> ", m_strTitle, Step - 1, htmlext);
|
||||
|
||||
if (Options.IndexPage)
|
||||
fprintf(f, "<A HREF=\"%s-index%s\">Index</A> ", m_strTitle, htmlext);
|
||||
|
||||
if (i != last)
|
||||
fprintf(f, "<A HREF=\"%s-%02d%s\">Next</A>", m_strTitle, i+1, htmlext);
|
||||
if (Step != LastStep)
|
||||
fprintf(f, "<A HREF=\"%s-%02d%s\">Next</A>", m_strTitle, Step + 1, htmlext);
|
||||
else if (Options.PartsListEnd)
|
||||
fprintf(f, "<A HREF=\"%s-pieces%s\">Pieces Used</A>", m_strTitle, htmlext);
|
||||
|
||||
|
@ -3589,7 +3575,7 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
CreateHTMLPieceList(f, 0, Options.PartsListImages, ext);
|
||||
|
||||
fputs("</CENTER>\n<BR><HR><BR>", f);
|
||||
fprintf(f, "<A HREF=\"%s-%02d%s\">Previous</A> ", m_strTitle, i-1, htmlext);
|
||||
fprintf(f, "<A HREF=\"%s-%02d%s\">Previous</A> ", m_strTitle, LastStep, htmlext);
|
||||
|
||||
if (Options.IndexPage)
|
||||
fprintf(f, "<A HREF=\"%s-index%s\">Index</A> ", m_strTitle, htmlext);
|
||||
|
@ -3600,13 +3586,13 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
}
|
||||
|
||||
// Save step pictures
|
||||
Image* images = new Image[last];
|
||||
CreateImages(images, Options.StepImagesWidth, Options.StepImagesHeight, 1, last, Options.HighlightNewParts);
|
||||
Image* images = new Image[LastStep];
|
||||
CreateImages(images, Options.StepImagesWidth, Options.StepImagesHeight, 1, LastStep, Options.HighlightNewParts);
|
||||
|
||||
for (i = 0; i < last; i++)
|
||||
for (lcStep Step = 0; Step < LastStep; Step++)
|
||||
{
|
||||
sprintf(fn, "%s%s-%02d%s", Options.PathName, m_strTitle, i+1, ext);
|
||||
images[i].FileSave(fn, Options.ImageFormat, Options.TransparentImages);
|
||||
sprintf(fn, "%s%s-%02d%s", Options.PathName, m_strTitle, Step + 1, ext);
|
||||
images[Step].FileSave(fn, Options.ImageFormat, Options.TransparentImages);
|
||||
}
|
||||
delete []images;
|
||||
|
||||
|
@ -4131,7 +4117,7 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
{
|
||||
lcPiece* Piece = PastedPieces[PieceIdx];
|
||||
Piece->CreateName(mPieces);
|
||||
Piece->SetStepShow(m_nCurStep);
|
||||
Piece->SetStepShow(mCurrentStep);
|
||||
mPieces.Add(Piece);
|
||||
Piece->SetSelected(true);
|
||||
|
||||
|
@ -4231,7 +4217,7 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if (Piece->IsVisible(m_nCurStep))
|
||||
if (Piece->IsVisible(mCurrentStep))
|
||||
Piece->SetSelected(true);
|
||||
}
|
||||
|
||||
|
@ -4253,7 +4239,7 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if (Piece->IsVisible(m_nCurStep))
|
||||
if (Piece->IsVisible(mCurrentStep))
|
||||
Piece->SetSelected(!Piece->IsSelected());
|
||||
}
|
||||
|
||||
|
@ -4370,7 +4356,7 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
{
|
||||
lcVector3 FocusVector;
|
||||
GetSelectionCenter(FocusVector);
|
||||
gMainWindow->GetActiveView()->mCamera->SetFocalPoint(FocusVector, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->GetActiveView()->mCamera->SetFocalPoint(FocusVector, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->UpdateAllViews();
|
||||
}
|
||||
break;
|
||||
|
@ -4400,13 +4386,13 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
|
||||
GetPieceInsertPosition(Last, Pos, Rot);
|
||||
|
||||
pPiece->Initialize(Pos[0], Pos[1], Pos[2], m_nCurStep);
|
||||
pPiece->Initialize(Pos[0], Pos[1], Pos[2], mCurrentStep);
|
||||
|
||||
pPiece->ChangeKey(m_nCurStep, false, Rot, LC_PK_ROTATION);
|
||||
pPiece->UpdatePosition(m_nCurStep);
|
||||
pPiece->ChangeKey(mCurrentStep, false, Rot, LC_PK_ROTATION);
|
||||
pPiece->UpdatePosition(mCurrentStep);
|
||||
}
|
||||
else
|
||||
pPiece->Initialize(0, 0, 0, m_nCurStep);
|
||||
pPiece->Initialize(0, 0, 0, mCurrentStep);
|
||||
|
||||
pPiece->SetColorIndex(gMainWindow->mColorIndex);
|
||||
pPiece->CreateName(mPieces);
|
||||
|
@ -4558,14 +4544,14 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
lcVector4& Position = Minifig.Matrices[i][3];
|
||||
lcVector4 Rotation = lcMatrix44ToAxisAngle(Minifig.Matrices[i]);
|
||||
Rotation[3] *= LC_RTOD;
|
||||
pPiece->Initialize(Position[0], Position[1], Position[2], m_nCurStep);
|
||||
pPiece->Initialize(Position[0], Position[1], Position[2], mCurrentStep);
|
||||
pPiece->SetColorIndex(Minifig.Colors[i]);
|
||||
pPiece->CreateName(mPieces);
|
||||
mPieces.Add(pPiece);
|
||||
pPiece->SetSelected(true);
|
||||
|
||||
pPiece->ChangeKey(1, false, Rotation, LC_PK_ROTATION);
|
||||
pPiece->UpdatePosition(m_nCurStep);
|
||||
pPiece->UpdatePosition(mCurrentStep);
|
||||
|
||||
SystemPieceComboAdd(Minifig.Parts[i]->m_strDescription);
|
||||
}
|
||||
|
@ -4693,7 +4679,7 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
Piece* NewPiece = new Piece(pPiece->mPieceInfo);
|
||||
NewPieces.Add(NewPiece);
|
||||
|
||||
NewPiece->Initialize(Position[0] + Offset[0], Position[1] + Offset[1], Position[2] + Offset[2], m_nCurStep);
|
||||
NewPiece->Initialize(Position[0] + Offset[0], Position[1] + Offset[1], Position[2] + Offset[2], mCurrentStep);
|
||||
NewPiece->SetColorIndex(pPiece->mColorIndex);
|
||||
NewPiece->ChangeKey(1, false, AxisAngle, LC_PK_ROTATION);
|
||||
}
|
||||
|
@ -4705,7 +4691,7 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
{
|
||||
Piece* Piece = NewPieces[PieceIdx];
|
||||
Piece->CreateName(mPieces);
|
||||
Piece->UpdatePosition(m_nCurStep);
|
||||
Piece->UpdatePosition(mCurrentStep);
|
||||
mPieces.Add(Piece);
|
||||
}
|
||||
|
||||
|
@ -4940,7 +4926,7 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
|
||||
case LC_PIECE_SHOW_EARLIER:
|
||||
{
|
||||
bool redraw = false;
|
||||
bool Redraw = false;
|
||||
|
||||
for (int PieceIdx = 0; PieceIdx < mPieces.GetSize(); PieceIdx++)
|
||||
{
|
||||
|
@ -4948,25 +4934,27 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
|
||||
if (Piece->IsSelected())
|
||||
{
|
||||
unsigned char t = Piece->GetStepShow();
|
||||
if (t > 1)
|
||||
lcStep Step = Piece->GetStepShow();
|
||||
|
||||
if (Step > 1)
|
||||
{
|
||||
redraw = true;
|
||||
Piece->SetStepShow(t-1);
|
||||
Redraw = true;
|
||||
Piece->SetStepShow(Step - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (redraw)
|
||||
if (Redraw)
|
||||
{
|
||||
CheckPoint("Modifying");
|
||||
gMainWindow->UpdateAllViews();
|
||||
UpdateSelection();
|
||||
}
|
||||
} break;
|
||||
|
||||
case LC_PIECE_SHOW_LATER:
|
||||
{
|
||||
bool redraw = false;
|
||||
bool Redraw = false;
|
||||
|
||||
for (int PieceIdx = 0; PieceIdx < mPieces.GetSize(); PieceIdx++)
|
||||
{
|
||||
|
@ -4974,19 +4962,21 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
|
||||
if (Piece->IsSelected())
|
||||
{
|
||||
unsigned char t = Piece->GetStepShow();
|
||||
if (t < 255)
|
||||
{
|
||||
redraw = true;
|
||||
Piece->SetStepShow(t+1);
|
||||
lcStep Step = Piece->GetStepShow();
|
||||
|
||||
if (t == m_nCurStep)
|
||||
if (Step < LC_STEP_MAX)
|
||||
{
|
||||
Step++;
|
||||
Redraw = true;
|
||||
Piece->SetStepShow(Step);
|
||||
|
||||
if (Step > mCurrentStep)
|
||||
Piece->SetSelected(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (redraw)
|
||||
if (Redraw)
|
||||
{
|
||||
CheckPoint("Modifying");
|
||||
gMainWindow->UpdateAllViews();
|
||||
|
@ -5049,57 +5039,58 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
Center = lcVector3((bs[0] + bs[3]) * 0.5f, (bs[1] + bs[4]) * 0.5f, (bs[2] + bs[5]) * 0.5f);
|
||||
}
|
||||
|
||||
gMainWindow->GetActiveView()->mCamera->Center(Center, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->GetActiveView()->mCamera->Center(Center, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->UpdateAllViews();
|
||||
break;
|
||||
}
|
||||
|
||||
case LC_VIEW_TIME_NEXT:
|
||||
{
|
||||
m_nCurStep++;
|
||||
if (mCurrentStep == LC_STEP_MAX)
|
||||
break;
|
||||
|
||||
mCurrentStep++;
|
||||
|
||||
CalculateStep();
|
||||
UpdateSelection();
|
||||
gMainWindow->UpdateFocusObject(GetFocusObject());
|
||||
gMainWindow->UpdateAllViews();
|
||||
|
||||
gMainWindow->UpdateTime(m_nCurStep, 255);
|
||||
gMainWindow->UpdateCurrentStep();
|
||||
} break;
|
||||
|
||||
case LC_VIEW_TIME_PREVIOUS:
|
||||
{
|
||||
m_nCurStep--;
|
||||
if (mCurrentStep == 1)
|
||||
break;
|
||||
mCurrentStep--;
|
||||
|
||||
CalculateStep();
|
||||
UpdateSelection();
|
||||
gMainWindow->UpdateFocusObject(GetFocusObject());
|
||||
gMainWindow->UpdateAllViews();
|
||||
|
||||
gMainWindow->UpdateTime(m_nCurStep, 255);
|
||||
gMainWindow->UpdateCurrentStep();
|
||||
} break;
|
||||
|
||||
case LC_VIEW_TIME_FIRST:
|
||||
{
|
||||
m_nCurStep = 1;
|
||||
mCurrentStep = 1;
|
||||
|
||||
CalculateStep();
|
||||
UpdateSelection();
|
||||
gMainWindow->UpdateFocusObject(GetFocusObject());
|
||||
gMainWindow->UpdateAllViews();
|
||||
|
||||
gMainWindow->UpdateTime(m_nCurStep, 255);
|
||||
gMainWindow->UpdateCurrentStep();
|
||||
} break;
|
||||
|
||||
case LC_VIEW_TIME_LAST:
|
||||
{
|
||||
m_nCurStep = GetLastStep ();
|
||||
mCurrentStep = GetLastStep();
|
||||
|
||||
CalculateStep();
|
||||
UpdateSelection();
|
||||
gMainWindow->UpdateFocusObject(GetFocusObject());
|
||||
gMainWindow->UpdateAllViews();
|
||||
|
||||
gMainWindow->UpdateTime(m_nCurStep, 255);
|
||||
gMainWindow->UpdateCurrentStep();
|
||||
} break;
|
||||
|
||||
case LC_VIEW_TIME_INSERT:
|
||||
|
@ -5107,16 +5098,16 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
for (int PieceIdx = 0; PieceIdx < mPieces.GetSize(); PieceIdx++)
|
||||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
Piece->InsertTime(m_nCurStep, 1);
|
||||
if (Piece->IsSelected() && !Piece->IsVisible(m_nCurStep))
|
||||
Piece->InsertTime(mCurrentStep, 1);
|
||||
if (Piece->IsSelected() && !Piece->IsVisible(mCurrentStep))
|
||||
Piece->SetSelected(false);
|
||||
}
|
||||
|
||||
for (int CameraIdx = 0; CameraIdx < mCameras.GetSize(); CameraIdx++)
|
||||
mCameras[CameraIdx]->InsertTime(m_nCurStep, 1);
|
||||
mCameras[CameraIdx]->InsertTime(mCurrentStep, 1);
|
||||
|
||||
for (int LightIdx = 0; LightIdx < mLights.GetSize(); LightIdx++)
|
||||
mLights[LightIdx]->InsertTime(m_nCurStep, 1);
|
||||
mLights[LightIdx]->InsertTime(mCurrentStep, 1);
|
||||
|
||||
CheckPoint("Adding Step");
|
||||
CalculateStep();
|
||||
|
@ -5130,16 +5121,16 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
for (int PieceIdx = 0; PieceIdx < mPieces.GetSize(); PieceIdx++)
|
||||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
Piece->RemoveTime(m_nCurStep, 1);
|
||||
if (Piece->IsSelected() && !Piece->IsVisible(m_nCurStep))
|
||||
Piece->RemoveTime(mCurrentStep, 1);
|
||||
if (Piece->IsSelected() && !Piece->IsVisible(mCurrentStep))
|
||||
Piece->SetSelected(false);
|
||||
}
|
||||
|
||||
for (int CameraIdx = 0; CameraIdx < mCameras.GetSize(); CameraIdx++)
|
||||
mCameras[CameraIdx]->RemoveTime(m_nCurStep, 1);
|
||||
mCameras[CameraIdx]->RemoveTime(mCurrentStep, 1);
|
||||
|
||||
for (int LightIdx = 0; LightIdx < mLights.GetSize(); LightIdx++)
|
||||
mLights[LightIdx]->RemoveTime(m_nCurStep, 1);
|
||||
mLights[LightIdx]->RemoveTime(mCurrentStep, 1);
|
||||
|
||||
CheckPoint("Removing Step");
|
||||
CalculateStep();
|
||||
|
@ -5150,49 +5141,49 @@ void Project::HandleCommand(LC_COMMANDS id)
|
|||
|
||||
case LC_VIEW_VIEWPOINT_FRONT:
|
||||
{
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_FRONT, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_FRONT, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
HandleCommand(LC_VIEW_ZOOM_EXTENTS);
|
||||
gMainWindow->UpdateAllViews();
|
||||
} break;
|
||||
|
||||
case LC_VIEW_VIEWPOINT_BACK:
|
||||
{
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_BACK, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_BACK, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
HandleCommand(LC_VIEW_ZOOM_EXTENTS);
|
||||
gMainWindow->UpdateAllViews();
|
||||
} break;
|
||||
|
||||
case LC_VIEW_VIEWPOINT_TOP:
|
||||
{
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_TOP, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_TOP, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
HandleCommand(LC_VIEW_ZOOM_EXTENTS);
|
||||
gMainWindow->UpdateAllViews();
|
||||
} break;
|
||||
|
||||
case LC_VIEW_VIEWPOINT_BOTTOM:
|
||||
{
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_BOTTOM, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_BOTTOM, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
HandleCommand(LC_VIEW_ZOOM_EXTENTS);
|
||||
gMainWindow->UpdateAllViews();
|
||||
} break;
|
||||
|
||||
case LC_VIEW_VIEWPOINT_LEFT:
|
||||
{
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_LEFT, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_LEFT, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
HandleCommand(LC_VIEW_ZOOM_EXTENTS);
|
||||
gMainWindow->UpdateAllViews();
|
||||
} break;
|
||||
|
||||
case LC_VIEW_VIEWPOINT_RIGHT:
|
||||
{
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_RIGHT, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_RIGHT, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
HandleCommand(LC_VIEW_ZOOM_EXTENTS);
|
||||
gMainWindow->UpdateAllViews();
|
||||
} break;
|
||||
|
||||
case LC_VIEW_VIEWPOINT_HOME:
|
||||
{
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_HOME, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->GetActiveView()->mCamera->SetViewpoint(LC_VIEWPOINT_HOME, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
HandleCommand(LC_VIEW_ZOOM_EXTENTS);
|
||||
gMainWindow->UpdateAllViews();
|
||||
} break;
|
||||
|
@ -5684,7 +5675,7 @@ void Project::SelectGroup(Group* TopGroup, bool Select)
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if (!Piece->IsSelected() && Piece->IsVisible(m_nCurStep) && (Piece->GetTopGroup() == TopGroup))
|
||||
if (!Piece->IsSelected() && Piece->IsVisible(mCurrentStep) && (Piece->GetTopGroup() == TopGroup))
|
||||
Piece->SetSelected(Select);
|
||||
}
|
||||
}
|
||||
|
@ -5921,7 +5912,7 @@ void Project::RayTest(lcObjectRayTest& ObjectRayTest) const
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if (Piece->IsVisible(m_nCurStep))
|
||||
if (Piece->IsVisible(mCurrentStep))
|
||||
Piece->RayTest(ObjectRayTest);
|
||||
}
|
||||
|
||||
|
@ -5947,7 +5938,7 @@ void Project::BoxTest(lcObjectBoxTest& ObjectBoxTest) const
|
|||
{
|
||||
Piece* Piece = mPieces[PieceIdx];
|
||||
|
||||
if (Piece->IsVisible(m_nCurStep))
|
||||
if (Piece->IsVisible(mCurrentStep))
|
||||
Piece->BoxTest(ObjectBoxTest);
|
||||
}
|
||||
|
||||
|
@ -6154,8 +6145,8 @@ bool Project::MoveSelectedObjects(lcVector3& Move, lcVector3& Remainder, bool Sn
|
|||
|
||||
if (Piece->IsSelected())
|
||||
{
|
||||
Piece->Move(m_nCurStep, gMainWindow->GetAddKeys(), TransformedMove);
|
||||
Piece->UpdatePosition(m_nCurStep);
|
||||
Piece->Move(mCurrentStep, gMainWindow->GetAddKeys(), TransformedMove);
|
||||
Piece->UpdatePosition(mCurrentStep);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6165,8 +6156,8 @@ bool Project::MoveSelectedObjects(lcVector3& Move, lcVector3& Remainder, bool Sn
|
|||
|
||||
if (Camera->IsSelected())
|
||||
{
|
||||
Camera->Move(m_nCurStep, gMainWindow->GetAddKeys(), TransformedMove);
|
||||
Camera->UpdatePosition(m_nCurStep);
|
||||
Camera->Move(mCurrentStep, gMainWindow->GetAddKeys(), TransformedMove);
|
||||
Camera->UpdatePosition(mCurrentStep);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6176,8 +6167,8 @@ bool Project::MoveSelectedObjects(lcVector3& Move, lcVector3& Remainder, bool Sn
|
|||
|
||||
if (Light->IsSelected())
|
||||
{
|
||||
Light->Move(m_nCurStep, gMainWindow->GetAddKeys(), TransformedMove);
|
||||
Light->UpdatePosition(m_nCurStep);
|
||||
Light->Move(mCurrentStep, gMainWindow->GetAddKeys(), TransformedMove);
|
||||
Light->UpdatePosition(mCurrentStep);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6335,7 +6326,7 @@ bool Project::RotateSelectedObjects(lcVector3& Delta, lcVector3& Remainder, bool
|
|||
pos[1] = Center[1] + Distance[1];
|
||||
pos[2] = Center[2] + Distance[2];
|
||||
|
||||
Piece->ChangeKey(m_nCurStep, gMainWindow->GetAddKeys(), pos, LC_PK_POSITION);
|
||||
Piece->ChangeKey(mCurrentStep, gMainWindow->GetAddKeys(), pos, LC_PK_POSITION);
|
||||
}
|
||||
|
||||
rot[0] = NewRotation[0];
|
||||
|
@ -6343,8 +6334,8 @@ bool Project::RotateSelectedObjects(lcVector3& Delta, lcVector3& Remainder, bool
|
|||
rot[2] = NewRotation[2];
|
||||
rot[3] = NewRotation[3] * LC_RTOD;
|
||||
|
||||
Piece->ChangeKey(m_nCurStep, gMainWindow->GetAddKeys(), rot, LC_PK_ROTATION);
|
||||
Piece->UpdatePosition(m_nCurStep);
|
||||
Piece->ChangeKey(mCurrentStep, gMainWindow->GetAddKeys(), rot, LC_PK_ROTATION);
|
||||
Piece->UpdatePosition(mCurrentStep);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -6388,8 +6379,8 @@ void Project::TransformSelectedObjects(LC_TRANSFORM_TYPE Type, const lcVector3&
|
|||
|
||||
if (pCamera->IsSelected())
|
||||
{
|
||||
pCamera->Move(m_nCurStep, gMainWindow->GetAddKeys(), Offset);
|
||||
pCamera->UpdatePosition(m_nCurStep);
|
||||
pCamera->Move(mCurrentStep, gMainWindow->GetAddKeys(), Offset);
|
||||
pCamera->UpdatePosition(mCurrentStep);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6399,8 +6390,8 @@ void Project::TransformSelectedObjects(LC_TRANSFORM_TYPE Type, const lcVector3&
|
|||
|
||||
if (pLight->IsSelected())
|
||||
{
|
||||
pLight->Move(m_nCurStep, gMainWindow->GetAddKeys(), Offset);
|
||||
pLight->UpdatePosition (m_nCurStep);
|
||||
pLight->Move(mCurrentStep, gMainWindow->GetAddKeys(), Offset);
|
||||
pLight->UpdatePosition (mCurrentStep);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6410,8 +6401,8 @@ void Project::TransformSelectedObjects(LC_TRANSFORM_TYPE Type, const lcVector3&
|
|||
|
||||
if (Piece->IsSelected())
|
||||
{
|
||||
Piece->Move(m_nCurStep, gMainWindow->GetAddKeys(), Offset);
|
||||
Piece->UpdatePosition(m_nCurStep);
|
||||
Piece->Move(mCurrentStep, gMainWindow->GetAddKeys(), Offset);
|
||||
Piece->UpdatePosition(mCurrentStep);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6469,8 +6460,8 @@ void Project::TransformSelectedObjects(LC_TRANSFORM_TYPE Type, const lcVector3&
|
|||
|
||||
if (Piece->IsSelected())
|
||||
{
|
||||
Piece->ChangeKey(m_nCurStep, gMainWindow->GetAddKeys(), NewRotation, LC_PK_ROTATION);
|
||||
Piece->UpdatePosition(m_nCurStep);
|
||||
Piece->ChangeKey(mCurrentStep, gMainWindow->GetAddKeys(), NewRotation, LC_PK_ROTATION);
|
||||
Piece->UpdatePosition(mCurrentStep);
|
||||
nSel++;
|
||||
}
|
||||
}
|
||||
|
@ -6510,8 +6501,8 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
|
||||
if (Part->mPosition != Position)
|
||||
{
|
||||
Part->ChangeKey(m_nCurStep, gMainWindow->GetAddKeys(), Position, LC_PK_POSITION);
|
||||
Part->UpdatePosition(m_nCurStep);
|
||||
Part->ChangeKey(mCurrentStep, gMainWindow->GetAddKeys(), Position, LC_PK_POSITION);
|
||||
Part->UpdatePosition(mCurrentStep);
|
||||
|
||||
CheckPointString = "Moving";
|
||||
}
|
||||
|
@ -6524,8 +6515,8 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
|
||||
if (Rotation != Part->mRotation)
|
||||
{
|
||||
Part->ChangeKey(m_nCurStep, gMainWindow->GetAddKeys(), Rotation, LC_PK_ROTATION);
|
||||
Part->UpdatePosition(m_nCurStep);
|
||||
Part->ChangeKey(mCurrentStep, gMainWindow->GetAddKeys(), Rotation, LC_PK_ROTATION);
|
||||
Part->UpdatePosition(mCurrentStep);
|
||||
|
||||
CheckPointString = "Rotating";
|
||||
}
|
||||
|
@ -6533,13 +6524,13 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
|
||||
case LC_PIECE_PROPERTY_SHOW:
|
||||
{
|
||||
lcuint32 Show = *(lcuint32*)Value;
|
||||
lcStep Step = *(lcStep*)Value;
|
||||
Piece* Part = (Piece*)Object;
|
||||
|
||||
if (Show != Part->GetStepShow())
|
||||
if (Step != Part->GetStepShow())
|
||||
{
|
||||
Part->SetStepShow(Show);
|
||||
if (Part->IsSelected() && !Part->IsVisible(m_nCurStep))
|
||||
Part->SetStepShow(Step);
|
||||
if (Part->IsSelected() && !Part->IsVisible(mCurrentStep))
|
||||
Part->SetSelected(false);
|
||||
|
||||
CheckPointString = "Show";
|
||||
|
@ -6548,12 +6539,12 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
|
||||
case LC_PIECE_PROPERTY_HIDE:
|
||||
{
|
||||
lcuint32 Hide = *(lcuint32*)Value;
|
||||
lcStep Step = *(lcuint32*)Value;
|
||||
Piece* Part = (Piece*)Object;
|
||||
|
||||
if (Hide != Part->GetStepHide())
|
||||
if (Step != Part->GetStepHide())
|
||||
{
|
||||
Part->SetStepHide(Hide);
|
||||
Part->SetStepHide(Step);
|
||||
|
||||
CheckPointString = "Hide";
|
||||
}
|
||||
|
@ -6594,8 +6585,8 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
|
||||
if (camera->mPosition != Position)
|
||||
{
|
||||
camera->ChangeKey(m_nCurStep, gMainWindow->GetAddKeys(), Position, LC_CK_EYE);
|
||||
camera->UpdatePosition(m_nCurStep);
|
||||
camera->ChangeKey(mCurrentStep, gMainWindow->GetAddKeys(), Position, LC_CK_EYE);
|
||||
camera->UpdatePosition(mCurrentStep);
|
||||
|
||||
CheckPointString = "Camera";
|
||||
}
|
||||
|
@ -6608,8 +6599,8 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
|
||||
if (camera->mTargetPosition != TargetPosition)
|
||||
{
|
||||
camera->ChangeKey(m_nCurStep, gMainWindow->GetAddKeys(), TargetPosition, LC_CK_TARGET);
|
||||
camera->UpdatePosition(m_nCurStep);
|
||||
camera->ChangeKey(mCurrentStep, gMainWindow->GetAddKeys(), TargetPosition, LC_CK_TARGET);
|
||||
camera->UpdatePosition(mCurrentStep);
|
||||
|
||||
CheckPointString = "Camera";
|
||||
}
|
||||
|
@ -6622,8 +6613,8 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
|
||||
if (camera->mUpVector != Up)
|
||||
{
|
||||
camera->ChangeKey(m_nCurStep, gMainWindow->GetAddKeys(), Up, LC_CK_UP);
|
||||
camera->UpdatePosition(m_nCurStep);
|
||||
camera->ChangeKey(mCurrentStep, gMainWindow->GetAddKeys(), Up, LC_CK_UP);
|
||||
camera->UpdatePosition(mCurrentStep);
|
||||
|
||||
CheckPointString = "Camera";
|
||||
}
|
||||
|
@ -6637,7 +6628,7 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
if (camera->IsOrtho() != Ortho)
|
||||
{
|
||||
camera->SetOrtho(Ortho);
|
||||
camera->UpdatePosition(m_nCurStep);
|
||||
camera->UpdatePosition(mCurrentStep);
|
||||
|
||||
CheckPointString = "Camera";
|
||||
}
|
||||
|
@ -6651,7 +6642,7 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
if (camera->m_fovy != FOV)
|
||||
{
|
||||
camera->m_fovy = FOV;
|
||||
camera->UpdatePosition(m_nCurStep);
|
||||
camera->UpdatePosition(mCurrentStep);
|
||||
|
||||
CheckPointString = "Camera";
|
||||
}
|
||||
|
@ -6665,7 +6656,7 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
if (camera->m_zNear != Near)
|
||||
{
|
||||
camera->m_zNear= Near;
|
||||
camera->UpdatePosition(m_nCurStep);
|
||||
camera->UpdatePosition(mCurrentStep);
|
||||
|
||||
CheckPointString = "Camera";
|
||||
}
|
||||
|
@ -6679,7 +6670,7 @@ void Project::ModifyObject(Object* Object, lcObjectProperty Property, void* Valu
|
|||
if (camera->m_zFar != Far)
|
||||
{
|
||||
camera->m_zFar = Far;
|
||||
camera->UpdatePosition(m_nCurStep);
|
||||
camera->UpdatePosition(mCurrentStep);
|
||||
|
||||
CheckPointString = "Camera";
|
||||
}
|
||||
|
@ -6714,7 +6705,7 @@ void Project::ZoomActiveView(int Amount)
|
|||
{
|
||||
float ScaledAmount = 2.0f * Amount / (21 - lcGetProfileInt(LC_PROFILE_MOUSE_SENSITIVITY));
|
||||
|
||||
gMainWindow->GetActiveView()->mCamera->Zoom(ScaledAmount, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->GetActiveView()->mCamera->Zoom(ScaledAmount, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
gMainWindow->UpdateFocusObject(GetFocusObject());
|
||||
gMainWindow->UpdateAllViews();
|
||||
}
|
||||
|
@ -6791,10 +6782,10 @@ void Project::EndMouseTool(lcTool Tool, bool Accept)
|
|||
void Project::InsertPieceToolClicked(const lcVector3& Position, const lcVector4& Rotation)
|
||||
{
|
||||
lcPiece* Piece = new lcPiece(m_pCurPiece);
|
||||
Piece->Initialize(Position[0], Position[1], Position[2], m_nCurStep);
|
||||
Piece->Initialize(Position[0], Position[1], Position[2], mCurrentStep);
|
||||
Piece->SetColorIndex(gMainWindow->mColorIndex);
|
||||
Piece->ChangeKey(m_nCurStep, false, Rotation, LC_PK_ROTATION);
|
||||
Piece->UpdatePosition(m_nCurStep);
|
||||
Piece->ChangeKey(mCurrentStep, false, Rotation, LC_PK_ROTATION);
|
||||
Piece->UpdatePosition(mCurrentStep);
|
||||
Piece->CreateName(mPieces);
|
||||
mPieces.Add(Piece);
|
||||
|
||||
|
@ -6936,14 +6927,14 @@ void Project::PaintToolClicked(lcObject* Object)
|
|||
|
||||
void Project::UpdateZoomTool(lcCamera* Camera, float Mouse)
|
||||
{
|
||||
Camera->Zoom(Mouse - mMouseToolDistance.x, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
Camera->Zoom(Mouse - mMouseToolDistance.x, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
mMouseToolDistance.x = Mouse;
|
||||
gMainWindow->UpdateAllViews();
|
||||
}
|
||||
|
||||
void Project::UpdatePanTool(lcCamera* Camera, float MouseX, float MouseY)
|
||||
{
|
||||
Camera->Pan(MouseX - mMouseToolDistance.x, MouseY - mMouseToolDistance.y, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
Camera->Pan(MouseX - mMouseToolDistance.x, MouseY - mMouseToolDistance.y, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
mMouseToolDistance.x = MouseX;
|
||||
mMouseToolDistance.y = MouseY;
|
||||
gMainWindow->UpdateAllViews();
|
||||
|
@ -6953,7 +6944,7 @@ void Project::UpdateOrbitTool(lcCamera* Camera, float MouseX, float MouseY)
|
|||
{
|
||||
lcVector3 Center;
|
||||
GetSelectionCenter(Center);
|
||||
Camera->Orbit(MouseX - mMouseToolDistance.x, MouseY - mMouseToolDistance.y, Center, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
Camera->Orbit(MouseX - mMouseToolDistance.x, MouseY - mMouseToolDistance.y, Center, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
mMouseToolDistance.x = MouseX;
|
||||
mMouseToolDistance.y = MouseY;
|
||||
gMainWindow->UpdateAllViews();
|
||||
|
@ -6961,14 +6952,14 @@ void Project::UpdateOrbitTool(lcCamera* Camera, float MouseX, float MouseY)
|
|||
|
||||
void Project::UpdateRollTool(lcCamera* Camera, float Mouse)
|
||||
{
|
||||
Camera->Roll(Mouse - mMouseToolDistance.x, m_nCurStep, gMainWindow->GetAddKeys());
|
||||
Camera->Roll(Mouse - mMouseToolDistance.x, mCurrentStep, gMainWindow->GetAddKeys());
|
||||
mMouseToolDistance.x = Mouse;
|
||||
gMainWindow->UpdateAllViews();
|
||||
}
|
||||
|
||||
void Project::ZoomRegionToolClicked(lcCamera* Camera, const lcVector3* Points, float RatioX, float RatioY)
|
||||
{
|
||||
Camera->ZoomRegion(Points, m_nCurStep, gMainWindow->GetAddKeys(), RatioX, RatioY);
|
||||
Camera->ZoomRegion(Points, mCurrentStep, gMainWindow->GetAddKeys(), RatioX, RatioY);
|
||||
|
||||
gMainWindow->UpdateFocusObject(GetFocusObject());
|
||||
gMainWindow->UpdateAllViews();
|
||||
|
|
|
@ -160,19 +160,12 @@ protected:
|
|||
lcVector3 mMouseToolDistance;
|
||||
|
||||
public:
|
||||
bool IsModified() const
|
||||
void SetCurrentStep(lcStep Step)
|
||||
{
|
||||
return mSavedHistory != mUndoHistory[0];
|
||||
}
|
||||
|
||||
unsigned char GetLastStep();
|
||||
unsigned short GetCurrentTime ()
|
||||
{ return m_nCurStep; }
|
||||
void SetCurrentTime(unsigned short Time)
|
||||
{
|
||||
m_nCurStep = (unsigned char)Time;
|
||||
mCurrentStep = Step;
|
||||
CalculateStep();
|
||||
}
|
||||
|
||||
void SetCurrentPiece(PieceInfo* pInfo)
|
||||
{ m_pCurPiece = pInfo; }
|
||||
float* GetBackgroundColor() // todo: remove
|
||||
|
@ -182,11 +175,6 @@ public:
|
|||
void GetSnapIndex(int* SnapXY, int* SnapZ, int* SnapAngle) const;
|
||||
void GetSnapText(char* SnapXY, char* SnapZ, char* SnapAngle) const;
|
||||
void GetSnapDistance(float* SnapXY, float* SnapZ) const;
|
||||
void GetTimeRange(int* from, int* to)
|
||||
{
|
||||
*from = m_nCurStep;
|
||||
*to = 255;
|
||||
}
|
||||
|
||||
int GetGroupIndex(lcGroup* Group) const
|
||||
{
|
||||
|
@ -207,7 +195,7 @@ public:
|
|||
void RenderInitialize();
|
||||
|
||||
void GetPiecesUsed(lcArray<lcPiecesUsedEntry>& PiecesUsed) const;
|
||||
void CreateImages(Image* images, int width, int height, unsigned short from, unsigned short to, bool hilite);
|
||||
void CreateImages(Image* images, int width, int height, lcStep from, lcStep to, bool hilite);
|
||||
void Render(View* view, bool bToMemory);
|
||||
void CheckAutoSave();
|
||||
bool GetSelectionCenter(lcVector3& Center) const;
|
||||
|
@ -260,7 +248,7 @@ protected:
|
|||
void RenderSceneObjects(View* view);
|
||||
void RenderViewports(View* view);
|
||||
|
||||
void CreateHTMLPieceList(FILE* f, int nStep, bool bImages, const char* ext);
|
||||
void CreateHTMLPieceList(FILE* f, lcStep Step, bool bImages, const char* ext);
|
||||
void Export3DStudio();
|
||||
void ExportPOVRay(lcFile& File);
|
||||
void ZoomExtents(int FirstView, int LastView);
|
||||
|
@ -275,10 +263,8 @@ public:
|
|||
lcuint32 m_nSnap;
|
||||
|
||||
protected:
|
||||
// State variables
|
||||
int mTransformType;
|
||||
PieceInfo* m_pCurPiece;
|
||||
unsigned char m_nCurStep;
|
||||
|
||||
lcuint16 m_nMoveSnap;
|
||||
lcuint16 m_nAngleSnap;
|
||||
|
|
|
@ -819,7 +819,7 @@ void lcQMainWindow::print(QPrinter *printer)
|
|||
GL_BeginRenderToTexture(tileWidth, tileHeight);
|
||||
glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
||||
|
||||
unsigned short previousTime = project->GetCurrentTime();
|
||||
lcStep previousTime = project->GetCurrentStep();
|
||||
|
||||
QPainter painter(printer);
|
||||
lcuint8 *buffer = (lcuint8*)malloc(tileWidth * tileHeight * 4);
|
||||
|
@ -836,7 +836,7 @@ void lcQMainWindow::print(QPrinter *printer)
|
|||
if (printer->printerState() == QPrinter::Aborted || printer->printerState() == QPrinter::Error)
|
||||
return;
|
||||
|
||||
int currentStep = 1 + ((page - 1) * rows * columns);
|
||||
lcStep currentStep = 1 + ((page - 1) * rows * columns);
|
||||
|
||||
for (int row = 0; row < rows; row++)
|
||||
{
|
||||
|
@ -845,7 +845,7 @@ void lcQMainWindow::print(QPrinter *printer)
|
|||
if (currentStep > project->GetLastStep())
|
||||
break;
|
||||
|
||||
project->SetCurrentTime(currentStep);
|
||||
project->SetCurrentStep(currentStep);
|
||||
|
||||
if (stepWidth > tileWidth || stepHeight > tileHeight)
|
||||
{
|
||||
|
@ -1001,7 +1001,7 @@ void lcQMainWindow::print(QPrinter *printer)
|
|||
|
||||
free(buffer);
|
||||
|
||||
project->SetCurrentTime(previousTime);
|
||||
project->SetCurrentStep(previousTime);
|
||||
|
||||
GL_EndRenderToTexture();
|
||||
}
|
||||
|
@ -1135,14 +1135,18 @@ void lcQMainWindow::updatePaste(bool enabled)
|
|||
action->setEnabled(enabled);
|
||||
}
|
||||
|
||||
void lcQMainWindow::updateTime(int currentTime, int totalTime)
|
||||
void lcQMainWindow::updateCurrentStep()
|
||||
{
|
||||
actions[LC_VIEW_TIME_FIRST]->setEnabled(currentTime != 1);
|
||||
actions[LC_VIEW_TIME_PREVIOUS]->setEnabled(currentTime > 1);
|
||||
actions[LC_VIEW_TIME_NEXT]->setEnabled(currentTime < totalTime);
|
||||
actions[LC_VIEW_TIME_LAST]->setEnabled(currentTime != totalTime);
|
||||
Project *project = lcGetActiveProject();
|
||||
lcStep currentStep = project->GetCurrentStep();
|
||||
lcStep lastStep = project->GetLastStep();
|
||||
|
||||
statusTimeLabel->setText(QString(tr(" Step %1 ")).arg(QString::number(currentTime)));
|
||||
actions[LC_VIEW_TIME_FIRST]->setEnabled(currentStep != 1);
|
||||
actions[LC_VIEW_TIME_PREVIOUS]->setEnabled(currentStep > 1);
|
||||
actions[LC_VIEW_TIME_NEXT]->setEnabled(currentStep < LC_STEP_MAX);
|
||||
actions[LC_VIEW_TIME_LAST]->setEnabled(currentStep != lastStep);
|
||||
|
||||
statusTimeLabel->setText(QString(tr("Step %1")).arg(QString::number(currentStep)));
|
||||
}
|
||||
|
||||
void lcQMainWindow::setAddKeys(bool addKeys)
|
||||
|
|
|
@ -34,7 +34,7 @@ public:
|
|||
void updateSelectedObjects(int flags, int selectedCount, Object* focus);
|
||||
void updateAction(int newAction);
|
||||
void updatePaste(bool enabled);
|
||||
void updateTime(int currentTime, int totalTime);
|
||||
void updateCurrentStep();
|
||||
void setAddKeys(bool addKeys);
|
||||
void updateLockSnap(lcuint32 snap);
|
||||
void updateSnap();
|
||||
|
|
|
@ -555,13 +555,13 @@ void lcQPropertiesTree::slotReturnPressed()
|
|||
}
|
||||
else if (item == partShow)
|
||||
{
|
||||
lcuint32 value = editor->text().toUInt();
|
||||
lcStep value = editor->text().toUInt();
|
||||
|
||||
project->ModifyObject(focusObject, LC_PIECE_PROPERTY_SHOW, &value);
|
||||
}
|
||||
else if (item == partHide)
|
||||
{
|
||||
lcuint32 value = editor->text().toUInt();
|
||||
lcStep value = editor->text().toUInt();
|
||||
|
||||
project->ModifyObject(focusObject, LC_PIECE_PROPERTY_HIDE, &value);
|
||||
}
|
||||
|
@ -805,8 +805,8 @@ void lcQPropertiesTree::setPart(Object *newFocusObject)
|
|||
partRotationZ->setText(1, QString::number(rotation[2]));
|
||||
partRotationZ->setData(0, PropertyValueRole, rotation[2]);
|
||||
|
||||
lcuint32 show = part->GetStepShow();
|
||||
lcuint32 hide = part->GetStepHide();
|
||||
lcStep show = part->GetStepShow();
|
||||
lcStep hide = part->GetStepHide();
|
||||
|
||||
partShow->setText(1, QString::number(show));
|
||||
partShow->setData(0, PropertyValueRole, show);
|
||||
|
|
|
@ -166,6 +166,7 @@ void lcQSelectDialog::addChildren(QTreeWidgetItem *parentItem, Group *parentGrou
|
|||
}
|
||||
|
||||
const lcArray<lcPiece*>& pieces = project->GetPieces();
|
||||
lcStep currentStep = project->GetCurrentStep();
|
||||
|
||||
for (int pieceIdx = 0; pieceIdx < pieces.GetSize(); pieceIdx++, numObjects++)
|
||||
{
|
||||
|
@ -174,7 +175,7 @@ void lcQSelectDialog::addChildren(QTreeWidgetItem *parentItem, Group *parentGrou
|
|||
if (piece->GetGroup() != parentGroup)
|
||||
continue;
|
||||
|
||||
if (!piece->IsVisible(project->GetCurrentTime()))
|
||||
if (!piece->IsVisible(currentStep))
|
||||
continue;
|
||||
|
||||
QTreeWidgetItem *pieceItem = new QTreeWidgetItem(parentItem, QStringList(piece->GetName()));
|
||||
|
|
|
@ -500,12 +500,12 @@ void lcMainWindow::UpdatePaste(bool Enabled)
|
|||
window->updatePaste(Enabled);
|
||||
}
|
||||
|
||||
void lcMainWindow::UpdateTime(int CurrentTime, int TotalTime)
|
||||
void lcMainWindow::UpdateCurrentStep()
|
||||
{
|
||||
lcQMainWindow* window = (lcQMainWindow*)mHandle;
|
||||
|
||||
if (window)
|
||||
window->updateTime(CurrentTime, TotalTime);
|
||||
window->updateCurrentStep();
|
||||
}
|
||||
|
||||
void lcMainWindow::SetAddKeys(bool AddKeys)
|
||||
|
|
Loading…
Reference in a new issue