예제 #1
0
        private void ApplyTransform(AbstractTransformAction transformAction, ref TransformChangeInfos transformChangeInfos)
        {
            if (!Selected)
            {
                return;
            }

            Vector3 pp = Position, pr = Rotation, ps = Scale;

            GlobalPosition = transformAction.NewPos(GlobalPosition, out bool posHasChanged);

            Matrix3 rotMtx = GlobalRotation;

            GlobalRotation = transformAction.NewRot(GlobalRotation, out bool rotHasChanged);
            GlobalScale    = transformAction.NewScale(GlobalScale, rotMtx, out bool scaleHasChanged);

            Mesh.Transform.Position = GlobalPosition;
            Mesh.Transform.Scale    = GlobalScale;
            Mesh.Transform.Rotation = GlobalRotation.ExtractRotation();

            transformChangeInfos.Add(this, 0,
                                     posHasChanged ? new Vector3?(pp) : new Vector3?(),
                                     rotHasChanged ? new Vector3?(pr) : new Vector3?(),
                                     scaleHasChanged ? new Vector3?(ps) : new Vector3?());
        }
        public override void ApplyTransformActionToSelection(EditorSceneBase scene, AbstractTransformAction transformAction, ref TransformChangeInfos infos)
        {
            if (PickingSelection == PickingMode.Mesh)
            {
                foreach (GenericPickableMesh point in PickableMeshes)
                {
                    point.ApplyTransformActionToSelection(scene, transformAction, ref infos);
                }
            }
            else if (Selected)
            {
                Vector3 pp = Position, pr = Rotation, ps = Scale;

                GlobalPosition = OnPositionChanged(transformAction.NewPos(GlobalPosition, out bool posHasChanged));

                Matrix3 rotMtx = GlobalRotation;

                GlobalRotation = transformAction.NewRot(GlobalRotation, out bool rotHasChanged);
                GlobalScale    = transformAction.NewScale(GlobalScale, rotMtx, out bool scaleHasChanged);

                infos.Add(this, 0,
                          posHasChanged ? new Vector3?(pp) : new Vector3?(),
                          rotHasChanged ? new Vector3?(pr) : new Vector3?(),
                          scaleHasChanged ? new Vector3?(ps) : new Vector3?());
            }
        }
예제 #3
0
        public override void ApplyTransformActionToSelection(AbstractTransformAction transformAction, ref TransformChangeInfos infos)
        {
            Vector3?   prevPos;
            Quaternion?prevRot;
            Vector3?   prevScale;

            Position = transformAction.NewPos(Position, out prevPos);
            rotation = transformAction.NewRot(rotation, out prevRot);
            scale    = transformAction.NewScale(scale, out prevScale);
            infos.Add(this, 0, prevPos, prevRot, prevScale);
        }
        public override void ApplyTransformActionToSelection(EditorSceneBase scene, AbstractTransformAction transformAction, ref TransformChangeInfos infos)
        {
            if (!Selected)
            {
                return;
            }

            Vector3 pp = Position, pr = Rotation, ps = Scale;

            GlobalPosition = OnPositionChanged(transformAction.NewPos(GlobalPosition, out bool posHasChanged));

            Matrix3 rotMtx = GlobalRotation;

            GlobalRotation = transformAction.NewRot(GlobalRotation, out bool rotHasChanged);

            GlobalScale = transformAction.NewScale(GlobalScale, rotMtx, out bool scaleHasChanged);

            infos.Add(this, 0,
                      posHasChanged ? new Vector3?(pp) : new Vector3?(),
                      rotHasChanged ? new Vector3?(pr) : new Vector3?(),
                      scaleHasChanged ? new Vector3?(ps) : new Vector3?());
        }
        private void ApplyTransform(AbstractTransformAction transformAction, ref TransformChangeInfos transformChangeInfos)
        {
            if (Selected)
            {
                Vector3 pp = Position, pr = Rotation, ps = Scale;

                Vector3 newPos        = Vector3.Zero;
                bool    posHasChanged = false;

                //Go through all points first to see if any point is over the applyed transform one
                ///This will move it to the original location and connect
                foreach (var point in ParentPath.PathPoints)
                {
                    if (point.IsPointOver)
                    {
                        posHasChanged = true;
                        newPos        = point.GlobalPosition;
                    }
                }

                if (!posHasChanged)
                {
                    newPos = OnPositionChanged(transformAction.NewPos(GlobalPosition, out posHasChanged));
                    Console.WriteLine($"newPos {newPos}");
                }

                if (posHasChanged)
                {
                    List <RenderablePathPoint> pointsConnected = new List <RenderablePathPoint>();
                    foreach (var point in ParentPath.PathPoints)
                    {
                        if (point.IsPointOver)
                        {
                            Console.WriteLine($"pointsConnected {pointsConnected.Count}");
                            pointsConnected.Add(point);
                        }
                    }

                    foreach (var point in ParentPath.PathPoints)
                    {
                        point.IsPointOver = false;
                    }

                    foreach (var point in pointsConnected)
                    {
                        ConnectToPoint(point);
                    }
                }

                GlobalPosition = newPos;
                Matrix3 rotMtx = GlobalRotation;

                GlobalRotation = transformAction.NewRot(GlobalRotation, out bool rotHasChanged);
                GlobalScale    = transformAction.NewScale(GlobalScale, rotMtx, out bool scaleHasChanged);

                transformChangeInfos.Add(this, 0,
                                         posHasChanged ? new Vector3?(pp) : new Vector3?(),
                                         rotHasChanged ? new Vector3?(pr) : new Vector3?(),
                                         scaleHasChanged ? new Vector3?(ps) : new Vector3?());
            }
        }