public void Execute()
        {
            StageView stage = MainForm.CurrentStage;

            prevTransforMatrix = stage.Selection.TransformMatrix.VexMatrix();
            prevMatrices       = stage.RemoveSelectionTransform();
        }
Example #2
0
        private void InstanceToJson(StringBuilder sb, IInstance inst)
        {
            // [id,[x,y],[scaleX, scaleY, rotation*, skew*], "name"]
            sb.Append("[");
            sb.Append(inst.DefinitionId + ",");
            sb.Append(inst.InstanceHash + ",");

            Vex.Matrix m = inst.GetTransformAtTime(0).Matrix;
            sb.Append("[" + m.Location.GetSVG() + "]");

            if (m.HasScaleOrRotation())
            {
                Vex.MatrixComponents mc = m.GetMatrixComponents();
                sb.Append(",[" + mc.ScaleX + "," + mc.ScaleY);
                if (mc.Rotation != 0)
                {
                    sb.Append("," + mc.Rotation);
                    if (mc.Shear != 0)
                    {
                        sb.Append("," + mc.Shear);
                    }
                }
                sb.Append("]");
            }

            if (inst.Name != null && inst.Name != "")
            {
                sb.Append(",\"" + inst.Name + "\"");
            }

            sb.Append("]");
        }
        public void Execute()
        {
            StageView stage = MainForm.CurrentStage;

            // store old selection
            prevSelected = stage.Selection.IdsByDepth;// SelectedIds;
            prevOffset   = stage.Selection.StrokeBounds.Point;


            // create symbol from selected
            Vex.Timeline tl = new Vex.Timeline(stage.Library.NextLibraryId());

            tl.Name         = stage.Library.GetNextDefaultName();
            tl.StrokeBounds = stage.Selection.StrokeBounds.TranslatedRectangle(-prevOffset.X, -prevOffset.Y);

            // delete old symbols
            DesignInstance[] oldInstances = stage.RemoveInstancesById(prevSelected);

            for (int i = 0; i < prevSelected.Length; i++)
            {
                DesignInstance inst = oldInstances[i];// instMgr[prevSelected[i]];
                Vex.Matrix     m    = inst.GetMatrix();
                m.TranslateX -= prevOffset.X;
                m.TranslateY -= prevOffset.Y;
                inst.SetMatrix(m);
                tl.AddInstance(inst.Instance);
                stage.InstanceManager.AddInstance(inst); // reusing, so must readd (todo: don't  reuse ids?)
            }

            LibraryItem li = stage.CreateLibraryItem(tl, true);

            newLibraryItemId = li.DefinitionId;
            stage.Library.AddLibraryItem(li);
            LibraryView.CurrentLibraryView.AddItemToLibrary(li);

            // add new symbol to stage
            DesignInstance di = stage.AddInstance(tl.Id, prevOffset);

            newInstanceId = di.InstanceHash;

            // select new symbol
            stage.Selection.Set(new uint[] { di.InstanceHash });
            stage.ResetTransformHandles();
            stage.InvalidateSelection();
        }
Example #4
0
        public void Execute()
        {
            StageView stage = MainForm.CurrentStage;

            InstanceGroup sel = stage.Selection;

            this.prevSelected = sel.SelectedIds;

            Vex.Point selRotCent = sel.GlobalRotationCenter.Translate(sel.Location.Negate());

            uint[]      libraryIds = new uint[prevSelected.Length];
            Vex.Point[] locations  = new Vex.Point[prevSelected.Length];
            for (int i = 0; i < prevSelected.Length; i++)
            {
                DesignInstance di = MainForm.CurrentInstanceManager[prevSelected[i]];
                libraryIds[i] = di.LibraryItem.DefinitionId;
                locations[i]  = new Vex.Point(di.Location.X + offset.X, di.Location.Y + offset.Y);
            }

            if (newInstanceIds == null)
            {
                newInstanceIds = stage.AddInstances(libraryIds, locations);
                for (int i = 0; i < newInstanceIds.Length; i++)
                {
                    DesignInstance oldDi = MainForm.CurrentInstanceManager[prevSelected[i]];
                    DesignInstance newDi = MainForm.CurrentInstanceManager[newInstanceIds[i]];
                    Vex.Matrix     m     = oldDi.GetMatrix();
                    stage.SetDesignInstanceMatrix(newDi, new Vex.Matrix(m.ScaleX, m.Rotate0, m.Rotate1, m.ScaleY, newDi.Location.X, newDi.Location.Y));

                    newDi.RotationCenter = oldDi.RotationCenter;
                }
            }
            else
            {
                stage.AddInstancesById(newInstanceIds);
            }

            sel.Set(newInstanceIds);
            sel.GlobalRotationCenter = selRotCent.Translate(sel.Location);
            stage.ResetTransformHandles();
            stage.InvalidateTransformedSelection();
        }
        public void UnExecute()
        {
            StageView stage = MainForm.CurrentStage;

            stage.Selection.Clear();
            stage.RemoveInstancesById(new uint[] { newInstanceId });
            LibraryView.CurrentLibraryView.RemoveItemFromLibrary(newLibraryItemId);

            stage.AddInstancesById(prevSelected);

            for (int i = 0; i < prevSelected.Length; i++)
            {
                DesignInstance inst = stage.InstanceManager[prevSelected[i]];
                Vex.Matrix     m    = inst.GetMatrix();
                m.TranslateX += prevOffset.X;
                m.TranslateY += prevOffset.Y;
                stage.SetDesignInstanceMatrix(inst, m);
            }

            stage.Selection.Set(prevSelected);
            stage.ResetTransformHandles();
        }
Example #6
0
        private void WriteInstance(IInstance inst)
        {
            // [defid,hasVals[7:bool], x?,y?,scaleX?, scaleY?, rotation?, skew?, "name"?
            //[9,[262.5,53.26]],
            //[5,[519.83,248.82],[5.042175,5.0422,54.15462]],
            //[3,[122.32,70.4],[0.9999654,0.9999616,-30.16027],"name"]

            WriteBits(inst.DefinitionId, idBitCount);
            WriteBits(inst.InstanceHash, idBitCount);

            Vex.Matrix           m  = inst.GetTransformAtTime(0).Matrix;
            Vex.MatrixComponents mc = m.GetMatrixComponents();
            int[] vals = new int[]
            {
                (int)(mc.TranslateX * DrawObject.twips),
                (int)(mc.TranslateY * DrawObject.twips),
                (int)(mc.ScaleX * DrawObject.twips),
                (int)(mc.ScaleY * DrawObject.twips),
                (int)(mc.Rotation * DrawObject.twips),
                (int)(mc.Shear * DrawObject.twips)
            };
            bool[] hasVals = new bool[]
            {
                vals[0] != 0,
                vals[1] != 0,
                vals[2] != DrawObject.twips,
                vals[3] != DrawObject.twips,
                vals[4] != 0,
                vals[5] != 0
            };
            bool hasName = !((inst.Name == null) || (inst.Name == ""));

            bool hasNumber = false;

            for (int i = 0; i < hasVals.Length; i++)
            {
                WriteBit(hasVals[i]);
                if (hasVals[i])
                {
                    hasNumber = true;
                }
            }
            WriteBit(hasName);

            if (hasNumber)
            {
                uint nBits = MinBits(vals); // always positive
                WriteNBitsCount(nBits);

                for (int i = 0; i < hasVals.Length; i++)
                {
                    if (hasVals[i])
                    {
                        WriteBits(vals[i], nBits);
                    }
                }
            }

            if (hasName)
            {
                // todo: write name strings
            }
        }