| 106 |
double scale = e.Delta / 1200.00; |
double scale = e.Delta / 1200.00; |
| 107 |
double distance = Point3D.Subtract(_cameraLookPoint, _camera.Position).Length; |
double distance = Point3D.Subtract(_cameraLookPoint, _camera.Position).Length; |
| 108 |
|
|
| 109 |
if (distance > 1024 || distance <= 1) |
if (distance > 1024 || distance <= 10) |
| 110 |
{ |
{ |
| 111 |
if (touch == false) |
if (touch == false) |
| 112 |
{ |
{ |
| 204 |
Mouse.Capture(EventSource, CaptureMode.None); |
Mouse.Capture(EventSource, CaptureMode.None); |
| 205 |
isTracking = false; |
isTracking = false; |
| 206 |
|
|
| 207 |
Transform3DGroup clickedtransformGroup = new Transform3DGroup(); |
//Transform3DGroup clickedtransformGroup = new Transform3DGroup(); |
| 208 |
clickedtransformGroup.Children.Add(_clickedRotate); |
//clickedtransformGroup.Children.Add(_clickedRotate); |
| 209 |
clickedtransformGroup.Children.Add(_clickedTranslate); |
//clickedtransformGroup.Children.Add(_clickedTranslate); |
|
|
|
|
visul3d.Transform = clickedtransformGroup; |
|
|
|
|
| 210 |
|
|
| 211 |
|
//visul3d.Transform = clickedtransformGroup; |
| 212 |
|
|
| 213 |
_eventSource.ReleaseMouseCapture(); |
_eventSource.ReleaseMouseCapture(); |
| 214 |
_eventSource.Cursor = Cursors.Arrow; |
_eventSource.Cursor = Cursors.Arrow; |
|
string mmm = mm; |
|
| 215 |
} |
} |
| 216 |
|
|
| 217 |
private void OnMouseMove(object sender, MouseEventArgs e) |
private void OnMouseMove(object sender, MouseEventArgs e) |
| 236 |
} |
} |
| 237 |
else if (e.RightButton == MouseButtonState.Pressed && Keyboard.IsKeyDown(Key.A)) |
else if (e.RightButton == MouseButtonState.Pressed && Keyboard.IsKeyDown(Key.A)) |
| 238 |
{ |
{ |
| 239 |
|
//TODO: |
| 240 |
CameraPanLeft(currentPosition); |
CameraPanLeft(currentPosition); |
| 241 |
} |
} |
| 242 |
else if (e.LeftButton == MouseButtonState.Pressed && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) |
else if (e.LeftButton == MouseButtonState.Pressed && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) |
| 243 |
&& (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))) |
&& (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))) |
| 244 |
{ |
{ |
| 245 |
if (isTracking) |
if (isTracking) |
| 246 |
|
{ |
| 247 |
|
_eventSource.Cursor = Cursors.None; |
| 248 |
RotateObject(currentPosition); |
RotateObject(currentPosition); |
| 249 |
} |
} |
| 250 |
|
} |
| 251 |
else if (e.LeftButton == MouseButtonState.Pressed && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))) |
else if (e.LeftButton == MouseButtonState.Pressed && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))) |
| 252 |
{ |
{ |
| 253 |
if(isTracking) |
if(isTracking) |
| 254 |
|
{ |
| 255 |
|
_eventSource.Cursor = Cursors.None; |
| 256 |
PanObject(currentPosition); |
PanObject(currentPosition); |
| 257 |
} |
} |
| 258 |
|
} |
| 259 |
|
|
| 260 |
_previousPosition2D = currentPosition; |
_previousPosition2D = currentPosition; |
| 261 |
} |
} |
| 276 |
|
|
| 277 |
// Write the new orientation back to the Rotation3D |
// Write the new orientation back to the Rotation3D |
| 278 |
|
|
| 279 |
_clickedAxisAngleRotate.Axis = q.Axis; |
if (_clickedAxisAngleRotate.Angle >= 360||_clickedAxisAngleRotate.Angle<=-360) |
|
_clickedAxisAngleRotate.Angle += q.Angle/4; |
|
|
if (_clickedAxisAngleRotate.Angle >= 360) |
|
| 280 |
_clickedAxisAngleRotate.Angle = 0; |
_clickedAxisAngleRotate.Angle = 0; |
| 281 |
|
|
| 282 |
|
_clickedAxisAngleRotate.Axis = q.Axis; |
| 283 |
|
_clickedAxisAngleRotate.Angle -= q.Angle; |
| 284 |
|
|
| 285 |
|
|
| 286 |
_previousPosition3D = currentPosition3D; |
_previousPosition3D = currentPosition3D; |
| 287 |
} |
} |
| 288 |
|
|
| 302 |
|
|
| 303 |
#endregion Event Handling |
#endregion Event Handling |
| 304 |
|
|
| 305 |
|
|
| 306 |
private void CameraPanLeft(Point currentPosition) |
private void CameraPanLeft(Point currentPosition) |
| 307 |
{ |
{ |
| 308 |
LineRange range; |
LineRange range; |
| 329 |
|
|
| 330 |
Vector3D vectMouse = pointNew - _cameraLookPoint; |
Vector3D vectMouse = pointNew - _cameraLookPoint; |
| 331 |
//vectMouse = Vector3D.Multiply(_cameraLookDirection, visul3d.Transform.Value); |
//vectMouse = Vector3D.Multiply(_cameraLookDirection, visul3d.Transform.Value); |
| 332 |
_clickedTranslate.OffsetX += scalex * vectMouse.X;// _clickedTranslateOriginal.OffsetX + vectMouse.X; |
_clickedTranslate.OffsetX = _clickedTranslateOriginal.OffsetX + vectMouse.X; |
| 333 |
|
_clickedTranslate.OffsetY = _clickedTranslateOriginal.OffsetY + vectMouse.Y; |
| 334 |
|
_clickedTranslate.OffsetZ = _clickedTranslateOriginal.OffsetZ + vectMouse.Z;// vectMouse.Z; |
| 335 |
|
|
| 336 |
|
// //vectMouse = Vector3D.Multiply(_cameraLookDirection, visul3d.Transform.Value); |
| 337 |
|
//_clickedTranslate.OffsetX += scalex * vectMouse.X;// _clickedTranslateOriginal.OffsetX + vectMouse.X; |
| 338 |
// _clickedTranslate.OffsetY += scaley * vectMouse.Y;// _clickedTranslateOriginal.OffsetY + vectMouse.Y; |
// _clickedTranslate.OffsetY += scaley * vectMouse.Y;// _clickedTranslateOriginal.OffsetY + vectMouse.Y; |
| 339 |
_clickedTranslate.OffsetZ += scaley * vectMouse.Z;// _clickedTranslateOriginal.OffsetZ + vectMouse.Z;// vectMouse.Z; |
// //_clickedTranslate.OffsetZ += scaley * vectMouse.Z;// _clickedTranslateOriginal.OffsetZ + vectMouse.Z;// vectMouse.Z; |
| 340 |
|
|
| 341 |
|
|
| 342 |
mm += vectMouse.Y.ToString() + "/n"; |
//mm += vectMouse.Y.ToString() + "/n"; |
| 343 |
|
|
| 344 |
} |
} |
| 345 |
|
|
| 357 |
private void Focus(Point currentPosition) |
private void Focus(Point currentPosition) |
| 358 |
{ |
{ |
| 359 |
double yDelta = currentPosition.Y - _previousPosition2D.Y; |
double yDelta = currentPosition.Y - _previousPosition2D.Y; |
| 360 |
double scale = yDelta / 100; |
double scale = yDelta / 100.0; |
| 361 |
//Maybe this part need replaced by collision detection method |
//Maybe this part need replaced by collision detection method |
| 362 |
double distance = Point3D.Subtract(_cameraLookPoint, _camera.Position).Length; |
double distance = Point3D.Subtract(_cameraLookPoint, _camera.Position).Length; |
| 363 |
if (distance > 1024 || distance <= 0.5) |
if (distance > 1024 || distance <= 1) |
| 364 |
{ |
{ |
| 365 |
if (touch == false) |
if (touch == false) |
| 366 |
touch = true; |
touch = true; |
| 383 |
double axisAngle = currentPosition.X - _previousPosition2D.X; |
double axisAngle = currentPosition.X - _previousPosition2D.X; |
| 384 |
double angletimes = axisAngle; |
double angletimes = axisAngle; |
| 385 |
|
|
| 386 |
if (angletimes > 360 || angletimes < -360) |
if ( _rotation.Angle- angletimes <= -360) |
|
angletimes = 0; |
|
|
|
|
|
if (angletimes + _rotation.Angle >= 360) |
|
| 387 |
_rotation.Angle = 0; |
_rotation.Angle = 0; |
| 388 |
_rotation.Axis = new Vector3D(0, 0, 1); |
_rotation.Axis = new Vector3D(0, 0, 1); |
| 389 |
_rotation.Angle += axisAngle; |
_rotation.Angle -= axisAngle; |
| 390 |
} |
} |
| 391 |
|
|
| 392 |
public HitTestResultBehavior HitTestCallback(HitTestResult result) |
public HitTestResultBehavior HitTestCallback(HitTestResult result) |
| 402 |
{ |
{ |
| 403 |
double yDelta = currentPosition.Y - _previousPosition2D.Y; |
double yDelta = currentPosition.Y - _previousPosition2D.Y; |
| 404 |
double xDelta = currentPosition.X - _previousPosition2D.X; |
double xDelta = currentPosition.X - _previousPosition2D.X; |
| 405 |
double scale = yDelta / 10; |
double scale = yDelta / 5.00; |
| 406 |
|
|
| 407 |
_camera.Position = new Point3D(_camera.Position.X, _camera.Position.Y, _camera.Position.Z + scale); |
_camera.Position = new Point3D(_camera.Position.X, _camera.Position.Y, _camera.Position.Z + scale); |
| 408 |
} |
} |