protected override bool OnTryBeginModify() { if (!Owner.IsAllowScale()) { return(false); } Axes axes = GetAxesByMousePosition(); if (axes.TrueCount != 0) { modifyPosition = Owner.GetPosition(); Vector2 screenPosition; if (CameraSettings.ProjectToScreenCoordinates(modifyPosition, out screenPosition)) { startMouseOffset = Viewport.MousePosition - screenPosition; startMousePosition = Viewport.MousePosition; //modifyScale = new Vec3( 1, 1, 1 ); selectedAxes = axes; helpText = ""; initialObjectsTransform = new TransformOfObject[Owner.Objects.Count]; for (int n = 0; n < Owner.Objects.Count; n++) { TransformToolObject obj = Owner.Objects[n]; initialObjectsTransform[n] = new TransformOfObject(obj.Position, obj.Rotation, obj.Scale); } return(true); } } return(base.OnTryBeginModify()); }
public override void OnUpdateInitialObjectsTransform() { initialObjectsTransform = new TransformOfObject[Owner.Objects.Count]; for (int n = 0; n < Owner.Objects.Count; n++) { TransformToolObject obj = Owner.Objects[n]; initialObjectsTransform[n] = new TransformOfObject(obj.Position, obj.Rotation, obj.Scale); } }
protected virtual void OnPositionModeUpdateObjects(TransformOfObject[] initialObjectsTransform, Vector3 positionOffset) { for (int n = 0; n < Objects.Count; n++) { TransformOfObject initialTransform = initialObjectsTransform[n]; Objects[n].Position = initialTransform.position + positionOffset; Objects[n].Rotation = initialTransform.rotation; } }
protected virtual void OnRotationModeUpdateObjects(TransformOfObject[] initialObjectsTransform, Vector3 modifyPosition, Quaternion rotationOffset) { for (int n = 0; n < Objects.Count; n++) { TransformOfObject initialTransform = initialObjectsTransform[n]; if (TransformToolConfig.moveObjectsDuringRotation) { Vector3 offset = initialTransform.position - modifyPosition; Objects[n].Position = modifyPosition + offset * rotationOffset; } Objects[n].Rotation = rotationOffset * initialTransform.rotation; } }
protected override bool OnTryBeginModify() { if (!Owner.IsAllowRotate()) { return(false); } Vector2 screenLinePointInPixels; Radian screenLineAngle; Axis axis = GetAxisByMousePosition(out screenLinePointInPixels, out screenLineAngle); if (axis != Axis.None) { modifyPosition = Owner.GetPosition(); Vector2 screenPosition; if (CameraSettings.ProjectToScreenCoordinates(modifyPosition, out screenPosition)) { Vector2 viewportSize = Owner.ViewportControl.Viewport.SizeInPixels.ToVector2(); selectedAxis = axis; selectedScreenLinePointInPixels = screenLinePointInPixels; selectedScreenLineAngle = screenLineAngle; mouseStartPosition = Viewport.MousePosition; //mouseStartPositionInPixels = EngineApp.Instance.MousePosition * viewportSize; helpText = ""; initialObjectsTransform = new TransformOfObject[Owner.Objects.Count]; for (int n = 0; n < Owner.Objects.Count; n++) { TransformToolObject obj = Owner.Objects[n]; initialObjectsTransform[n] = new TransformOfObject(obj.Position, obj.Rotation, obj.Scale); } return(true); } } return(base.OnTryBeginModify()); }