/// <summary> /// check to see if if the inputs and outputs for any subcircuits are consistent, and raise /// ParseErrors if they are not /// </summary> /// <param name="sketchpanel"></param> /// <returns></returns> public bool checkSubCircuits(CircuitSimLib.Circuit Circuit) { if (Circuit == null) { return(false); } bool valid = true; foreach (CircuitSimLib.Gate gate in Circuit.AllGates) { if (gate.GateType == LogicDomain.SUBCIRCUIT) { CircuitSimLib.SubCircuit subCircuit = ((CircuitSimLib.SubCircuit)gate); if (gate.Inputs.Count != subCircuit.inputsRequired) { valid = false; _parseErrors.Add(new ParseError("The Subcircuit " + gate.Name + " needs " + subCircuit.inputsRequired + " inputs, but has " + gate.Inputs.Count, "The Subcircuit " + gate.Name + " needs " + subCircuit.inputsRequired + " inputs, but has " + gate.Inputs.Count, subCircuit.myShape)); } if (gate.Outputs.Count != subCircuit.outputsRequired) { valid = false; _parseErrors.Add(new ParseError("The Subcircuit " + gate.Name + " needs " + subCircuit.outputsRequired + " outputs, but has " + gate.Outputs.Count, "The Subcircuit " + gate.Name + " needs " + subCircuit.outputsRequired + " outputs, but has " + gate.Outputs.Count, subCircuit.myShape)); } } } return(valid); }
/// <summary> /// precondition: circuit is not null /// </summary> /// <param name="circuit"></param> /// <param name="xmlDocument"></param> private static void WriteCircuit(CircuitSimLib.Circuit circuit, XmlTextWriter xmlDocument) { CircuitSimLib.TruthTable truthTable = new CircuitSimLib.TruthTable(circuit); xmlDocument.WriteStartElement("circuit"); List <CircuitSimLib.INPUT> inputs = circuit.GlobalInputs; List <CircuitSimLib.OUTPUT> outputs = circuit.GlobalOutputs; Dictionary <int, int> behavior = new Dictionary <int, int>(); SaveToXML.WriteInputOutput(truthTable, xmlDocument); SaveToXML.WriteBehavior(truthTable, xmlDocument); xmlDocument.WriteEndElement(); }
/// <summary> /// Write the behavior inputs and outputs for the current project from the circuit /// </summary> /// <param name="circuit"></param> public void setCircuitInfo(CircuitSimLib.Circuit circuit) { // No truth table if the circuit is oscillating if (circuit != null && !circuit.IsOscillating) { CircuitSimLib.TruthTable truthTable = new CircuitSimLib.TruthTable(circuit); Dictionary <List <int>, List <int> > behavior = new Dictionary <List <int>, List <int> >(); string logisimSave = SaveToCirc.SubcircuitInfo(project, circuit); project.setCircuitInfo(truthTable.TruthTableDictionary, circuit.InputShapes, circuit.OutputShapes, logisimSave); project.setCircuitDirection(circuit.inputsHoriz, circuit.outputsHoriz); } }
/// <summary> /// Constructor for testing (where we pass in an initialized featureSketch) /// </summary> /// <param name="inkCanvas"></param> /// <param name="featureSketch"></param> public InkCanvasSketch(InkCanvas inkCanvas, FeatureSketch featureSketch) { this.inkCanvas = inkCanvas; this.featureSketch = featureSketch; // Don't have a circuit yet this.circuit = null; alreadyLoaded = new List <string>(); project = new Sketch.Project(); // Comply with XML format requirements dtGuid = new Guid(dtGuidString); idGuid = new Guid(idGuidString); Sketch.Units = DefaultSketchUnits; // Intialize other fields ink2sketchStr = new Dictionary <String, Guid?>(); sketchStr2ink = new Dictionary <Guid?, String>(); substrokeIdMap = new Dictionary <Guid?, Substroke>(); }
/// <summary> /// Saves this Sketch to the specified file path. /// </summary> /// <param name="filename">The path of the file to write</param> public void SaveSketch(string filename, CircuitSimLib.Circuit circuit) { SaveToXML xmlHolder = new SaveToXML(Sketch, circuit); xmlHolder.WriteXML(filename); }
/// <summary> /// Imports the circuit into our SaveToCirc object. /// </summary> /// <param name="circ">The circuit to be converted</param> public SaveToCirc(CircuitSimLib.Circuit circ) { this.circuit = circ; }
/// <summary> /// writes the sketch and its points, substrokes and shapes to the given xml document. /// also writes its circuit. /// </summary> /// <param name="sketch"></param> /// <param name="circuit"></param> /// <param name="xmlDocument"></param> private static void WriteSketch(Sketch.Sketch sketch, CircuitSimLib.Circuit circuit, XmlTextWriter xmlDocument) { xmlDocument.WriteStartElement("sketch"); string[] sketchAttributeNames = sketch.XmlAttrs.getAttributeNames(); object[] sketchAttributeValues = sketch.XmlAttrs.getAttributeValues(); Sketch.Point[] points = sketch.Points; Sketch.Shape[] shapes = sketch.Shapes; Sketch.Stroke[] strokes = sketch.Strokes; Sketch.Substroke[] substrokes = sketch.Substrokes; int length; int i; // Write all the attributes length = sketchAttributeNames.Length; for (i = 0; i < length; ++i) { if (sketchAttributeValues[i] != null) { xmlDocument.WriteAttributeString(sketchAttributeNames[i], sketchAttributeValues[i].ToString()); } } // Write all the points length = points.Length; for (i = 0; i < length; ++i) { SaveToXML.WritePoint(points[i], xmlDocument); } // Write all the substrokes length = substrokes.Length; for (i = 0; i < length; ++i) { SaveToXML.WriteSubstroke(substrokes[i], xmlDocument); } // Write all the strokes length = strokes.Length; for (i = 0; i < length; ++i) { SaveToXML.WriteStroke(strokes[i], xmlDocument); } // Write all the shapes length = shapes.Length; for (i = 0; i < length; ++i) { SaveToXML.WriteShape(shapes[i], xmlDocument); } if (circuit != null) { WriteCircuit(circuit, xmlDocument); } xmlDocument.WriteEndElement(); }
/// <summary> /// Constructor /// </summary> /// <param name="sketch">Create SaveToXML from sketch</param> public SaveToXML(Sketch.Sketch sketch, CircuitSimLib.Circuit circuit) { this.sketch = sketch; this.circuit = circuit; }