Exemple #1
0
        /// <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();
        }
Exemple #3
0
 /// <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);
     }
 }
Exemple #4
0
        /// <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>();
        }
Exemple #5
0
        /// <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);
        }
Exemple #6
0
 /// <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;
 }