private object[] ExpandMaster(CircuitEditingContext context, SubCircuitInstance subCircuitInstance) { // remove the sub-circuit instance var circuit = context.CircuitContainer; circuit.Elements.Remove(subCircuitInstance); SubCircuit subCircuit = subCircuitInstance.SubCircuit as SubCircuit; // clone sub-circuit contents List<object> subCircuitContents = new List<object>(); subCircuitContents.AddRange(Adapters.AsIEnumerable<object>(subCircuit.Elements)); subCircuitContents.AddRange(Adapters.AsIEnumerable<object>(subCircuit.Wires)); DomNode[] clones = DomNode.Copy(Adapters.AsIEnumerable<DomNode>(subCircuitContents)); object[] data = new object[clones.Length]; clones.CopyTo(data, 0); return data; }
// create hover form for sub-circuit instance private HoverBase CreateHoverForm(SubCircuitInstance subCircuitInstance) { const float MAX_SIZE = 420; const int CircuitMargin = 8; TransformAdapter xformAdapter = m_d2dHoverControl.As<TransformAdapter>(); xformAdapter.Transform.Reset(); m_d2dHoverControl.D2dGraphics.Transform = Matrix3x2F.Identity; m_d2dHoverControl.Context = subCircuitInstance.SubCircuit; RectangleF bounds = m_circuitRenderer.GetBounds(subCircuitInstance.SubCircuit.Elements.AsIEnumerable<Module>() , m_d2dHoverControl.D2dGraphics); float boundRatio = bounds.Width / bounds.Height; Size size =(boundRatio > 1) ? new Size((int)MAX_SIZE, (int)(MAX_SIZE / boundRatio)) : new Size((int)(MAX_SIZE * boundRatio), (int)MAX_SIZE); float scale = (float)size.Width / (float)bounds.Width; xformAdapter.Transform.Translate(CircuitMargin, CircuitMargin); xformAdapter.Transform.Scale(scale, scale); xformAdapter.Transform.Translate(-bounds.X , -bounds.Y ); HoverBase result = new HoverBase(); result.Size = new Size(size.Width + 2 * CircuitMargin, size.Height + 2 * CircuitMargin); result.Controls.Add(m_d2dHoverControl); return result; }