summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorleo2005-11-03 00:56:59 +0000
committerleo2005-11-03 00:56:59 +0000
commit6d4405129a48b9c4bd4f559098e236604c20fcbc (patch)
tree77f8668aff2c08427c37d1c2bcd1dee388a1dbba /common
parent8a8f437f7fe9b24be98af03489e2b65f6e3e28b1 (diff)
New movement snap values.
git-svn-id: http://svn.leocad.org/trunk@433 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'common')
-rw-r--r--common/project.cpp70
-rw-r--r--common/project.h2
2 files changed, 49 insertions, 23 deletions
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)
{