From 6d4405129a48b9c4bd4f559098e236604c20fcbc Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 3 Nov 2005 00:56:59 +0000 Subject: New movement snap values. git-svn-id: http://svn.leocad.org/trunk@433 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- common/project.cpp | 70 ++++++++++++++++++++++++++++++++++++------------------ common/project.h | 2 ++ 2 files changed, 49 insertions(+), 23 deletions(-) (limited to 'common') diff --git a/common/project.cpp b/common/project.cpp index ff96ddd..ec6355f 100644 --- a/common/project.cpp +++ b/common/project.cpp @@ -558,7 +558,7 @@ void Project::LoadDefaults(bool cameras) m_nAngleSnap = (unsigned short)Sys_ProfileLoadInt ("Default", "Angle", 30); m_nSnap = Sys_ProfileLoadInt ("Default", "Snap", LC_DRAW_SNAP_A | LC_DRAW_SNAP_X | LC_DRAW_SNAP_Y | LC_DRAW_SNAP_Z | LC_DRAW_MOVE | LC_DRAW_PREVIEW); SystemUpdateSnap(m_nSnap); - m_nMoveSnap = 0; + m_nMoveSnap = 0x0604; SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap); m_fLineWidth = (float)Sys_ProfileLoadInt ("Default", "Line", 100)/100; m_fFogDensity = (float)Sys_ProfileLoadInt ("Default", "Density", 10)/100; @@ -7202,21 +7202,52 @@ void Project::StartTracking(int mode) FileSave(m_pTrackFile, true); } -void Project::SnapVector(Vector3& Delta, Vector3& Leftover) const +void Project::GetSnapDistance(float* SnapXY, float* SnapZ) const { - lcuint32 SXY = (m_nMoveSnap & 0xff); - lcuint32 SZ = ((m_nMoveSnap >> 8) & 0xff); - float SnapXY, SnapZ; + int SXY = (m_nMoveSnap & 0xff); + int SZ = ((m_nMoveSnap >> 8) & 0xff); - if (SXY > 0) - SnapXY = 0.8f * SXY; - else - SnapXY = 0.4f; + const float SnapXYTable[] = { 0.01f, 0.04f, 0.2f, 0.4f, 0.8f, 1.6f, 2.4f, 3.2f, 6.4f, 12.8f }; + const float SnapZTable[] = { 0.01f, 0.04f, 0.2f, 0.32f, 0.4f, 0.8f, 0.96f, 1.92f, 3.84f, 7.68f }; + + SXY = min(SXY, 9); + SZ = min(SZ, 9); + + *SnapXY = SnapXYTable[SXY]; + *SnapZ = SnapZTable[SZ]; +} - if (SZ > 0) - SnapZ = 0.96f * SZ; +void Project::GetSnapDistanceText(char* SnapXY, char* SnapZ) const +{ + if (m_nSnap & LC_DRAW_CM_UNITS) + { + float xy, z; + + GetSnapDistance(&xy, &z); + + sprintf(SnapXY, "%.2f", xy); + sprintf(SnapZ, "%.2f", z); + } else - SnapZ = 0.32f; + { + int SXY = (m_nMoveSnap & 0xff); + int SZ = ((m_nMoveSnap >> 8) & 0xff); + + const char* SnapXYText[] = { "0", "1/20S", "1/4S", "1/2S", "1S", "2S", "3S", "4S", "8S", "16S" }; + const char* SnapZText[] = { "0", "1/20S", "1/4S", "1F", "1/2S", "1S", "1B", "2B", "4B", "8B" }; + + SXY = min(SXY, 9); + SZ = min(SZ, 9); + + strcpy(SnapXY, SnapXYText[SXY]); + strcpy(SnapZ, SnapZText[SZ]); + } +} + +void Project::SnapVector(Vector3& Delta, Vector3& Leftover) const +{ + float SnapXY, SnapZ; + GetSnapDistance(&SnapXY, &SnapZ); if (m_nSnap & LC_DRAW_SNAP_X) { @@ -7625,18 +7656,11 @@ bool Project::OnKeyDown(char nKey, bool bControl, bool bShift) } else { - lcuint32 SnapXY = (m_nMoveSnap & 0xff); - lcuint32 SnapZ = ((m_nMoveSnap >> 8) & 0xff); + float xy, z; + GetSnapDistance(&xy, &z); - if (SnapXY > 0) - axis[0] = axis[1] = 0.8f * SnapXY; - else - axis[0] = axis[1] = 0.4f; - - if (SnapZ > 0) - axis[2] = 0.96f * SnapZ; - else - axis[2] = 0.32f; + axis[0] = axis[1] = xy; + axis[2] = z; if ((m_nSnap & LC_DRAW_SNAP_X == 0) || bControl) axis[0] = 0.01f; diff --git a/common/project.h b/common/project.h index 2182518..4a9c236 100644 --- a/common/project.h +++ b/common/project.h @@ -86,6 +86,8 @@ public: { return m_nCurAction; } int GetOverlayMode() const { return m_OverlayMode; } + void GetSnapDistance(float* SnapXY, float* SnapZ) const; + void GetSnapDistanceText(char* SnapXY, char* SnapZ) const; Camera* GetCamera(int i); void GetTimeRange(int* from, int* to) { -- cgit v1.2.3