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("]"); }
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 } }