public void Execute() { StageView stage = MainForm.CurrentStage; prevTransforMatrix = stage.Selection.TransformMatrix.VexMatrix(); prevMatrices = stage.RemoveSelectionTransform(); }
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(); }
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(); }
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 } }