コード例 #1
0
 /// <summary>
 /// Updates SimulationManager, sets the sketchPanel's circuit, and creates the clean circuit.
 /// </summary>
 private CircuitSimLib.Circuit createCircuitAndCleanCircuit(CircuitParser.CircuitParser parser)
 {
     CircuitSimLib.Circuit circuit = createCircuit(parser);
     sketchPanel.Circuit = circuit;
     cleanCircuit        = new CleanCircuit(ref sketchPanel, false);
     return(circuit);
 }
コード例 #2
0
        public bool recognizeCircuit(CircuitParser.CircuitParser parser)
        {
            if (debug)
            {
                Console.WriteLine("========== Circuit Parsing Has Begun! ==========");
            }
            valid = false;

            // Determine the circuit structure and trigger event for feedback mechanisms
            valid = (parser.SuccessfullyParse(sketch));

            if (!valid)
            {
                if (debug)
                {
                    Console.WriteLine("The circuit parser could not parse the circuit.");
                }
                return(false);
            }

            CircuitSimLib.Circuit circuit = createCircuitAndCleanCircuit(parser);
            valid = parser.checkSubCircuits(circuit);

            if (!valid)
            {
                if (debug)
                {
                    Console.WriteLine("SimulationManager.makeCircuit() failed.");
                }
                return(false);
            }

            return(valid);
        }
コード例 #3
0
        /// <summary>
        /// Updates SimulationManager's dictionaries and returns the circuit produced from the parser.
        /// </summary>
        private Circuit createCircuit(CircuitParser.CircuitParser parser)
        {
            // Reset Dictionaries
            inputMapping.Clear();
            outputMapping.Clear();
            wireToInputGateMapping.Clear();

            // Update the mappings with the circuit inputs.
            foreach (KeyValuePair <string, Shape> input in parser.CircuitInputs)
            {
                addInput(parser.ShapeNames[input.Key]);
            }

            // Update the mappings with the circuit outputs.
            foreach (string output in circuitParser.CircuitOutputs.Keys)
            {
                addOutput(parser.ShapeNames[output]);
            }

            // Update the mappings with meshes and their input components
            foreach (CircuitParser.WireMesh wire in parser.WireMeshes)
            {
                if (wire.HasSource)
                {
                    addWire(wire);
                }
            }

            return(new Circuit(parser.CircuitStructure, parser.CircuitOutputs, parser.CircuitInputs));
        }
コード例 #4
0
        private bool recognizeCircuit(CircuitParser.CircuitParser parser)
        {
            if (debug)
            {
                Console.WriteLine("========== Circuit Parsing Has Begun! ==========");
            }
            //valid = false;

            // Determine the circuit structure and trigger event for feedback mechanisms
            CircuitSimLib.Circuit circuit;
            valid = parser.SuccessfullyParse(sketch, out circuit);

            if (valid)
            {
                createCircuit(parser, circuit);
                createCleanCircuit(ref sketchPanel);
            }
            else
            if (debug)
            {
                Console.WriteLine("The circuit parser could not parse the circuit.");
            }

            if (!valid)
            {
                if (debug)
                {
                    Console.WriteLine("SimulationManager.makeCircuit() failed.");
                }
            }


            return(valid);
        }
コード例 #5
0
        /// <summary>
        /// Updates SimulationManager's dictionaries and returns the circuit produced from the parser.
        ///
        /// Precondition: the parser has already successfully parsed the circuit.
        /// </summary>
        private Circuit createCircuit(CircuitParser.CircuitParser parser, Circuit circuit)
        {
            // Reset Dictionaries
            inputMapping.Clear();
            outputMapping.Clear();
            wireToInputGateMapping.Clear();

            // Update the mappings with the circuit inputs.
            foreach (Shape input in parser.CircuitInputs)
            {
                addInput(input);
            }

            // Update the mappings with the circuit outputs.
            foreach (Shape output in circuitParser.CircuitOutputs)
            {
                addOutput(output);
            }

            // Update the mappings with meshes and their input components
            foreach (Shape wire in parser.Wires)
            {
                addWire(wire, parser.SourceForWire(wire), parser.SourceIndexForWire(wire));
            }

            sketchPanel.InkSketch.Circuit = circuit;

            return(sketchPanel.InkSketch.Circuit);
        }
コード例 #6
0
        /// <summary>
        /// Alerts the feedback mechanisms on relabeling or regrouping
        /// </summary>
        /// <param name="shapes">The shapes which were most recently changed</param>
        public void AlertFeedback(CircuitParser.CircuitParser circuit, IEnumerable <Sketch.Shape> shapes)
        {
            if (circuit != null)
            {
                lastErrors = circuit.ParseErrors;
            }
            else
            {
                lastErrors = null;
            }

            if (StrokeColoring)
            {
                ColorStrokesByType();
            }
            if (EndpointHighlighting)
            {
                circuitEndpointFeedback.Clear();
            }
            if (GatesOnLabel)
            {
                DrawFeedback(shapes);
            }
            if (ErrorHighlighting && circuit != null)
            {
                AddErrorHighlights(circuit.ParseErrors);
            }
            if (labelsOn)
            {
                unsubscribeTooltips();
                subscribeTooltips();
            }
        }
コード例 #7
0
        /// <summary>
        /// Alerts the feedbacks to a whole-circuit recognition change
        /// </summary>
        /// <param name="recognitionButton">Whether or not this alerting was caused by pressing the recognition button</param>
        public void AlertFeedback(CircuitParser.CircuitParser circuit, bool recognitionButton)
        {
            Pause();
            ghostGateFeedback.Validate();

            if (circuit != null)
            {
                lastErrors = new List <ParseError>(circuit.ParseErrors);
            }
            else
            {
                lastErrors = null;
            }

            ColorStrokesByType();

            if (EndpointHighlighting)
            {
                circuitEndpointFeedback.Clear();
            }

            if (ErrorHighlighting && lastErrors != null)
            {
                AddErrorHighlights(lastErrors);
            }
            else
            {
                RemoveErrorHighlights();
            }

            if (labelsOn)
            {
                unsubscribeTooltips();
                subscribeTooltips();
            }

            if (recognitionButton)
            {
                if (GatesOnRec)
                {
                    DrawAllGates();
                }
                if (RecognitionTooltips)
                {
                    showAllTooltips();
                }
            }

            Unpause();
        }
コード例 #8
0
        /// <summary>
        /// Alerts the feedback mechanisms on relabeling or regrouping
        /// </summary>
        /// <param name="shapes">The shapes which were most recently changed</param>
        public void AlertFeedback(CircuitParser.CircuitParser circuit, IEnumerable <Sketch.Shape> shapes)
        {
            Pause();
            ghostGateFeedback.Validate();

            if (circuit != null)
            {
                lastErrors = new List <ParseError>(circuit.ParseErrors);
            }
            else
            {
                lastErrors = null;
            }

            ColorStrokesByType();

            if (EndpointHighlighting)
            {
                circuitEndpointFeedback.Clear();
            }

            if (GatesOnLabel)
            {
                DrawFeedback(shapes);
            }

            if (ErrorHighlighting && lastErrors != null)
            {
                AddErrorHighlights(lastErrors);
            }
            else
            {
                RemoveErrorHighlights();
            }

            if (labelsOn)
            {
                unsubscribeTooltips();
                subscribeTooltips();
            }

            Unpause();
        }
コード例 #9
0
        /// <summary>
        /// Alerts the feedbacks to a whole-circuit recognition change
        /// </summary>
        /// <param name="recognitionButton">Whether or not this alerting was caused by pressing the recognition button</param>
        public void AlertFeedback(CircuitParser.CircuitParser circuit, bool recognitionButton)
        {
            if (circuit != null)
            {
                lastErrors = circuit.ParseErrors;
            }
            else
            {
                lastErrors = null;
            }

            if (StrokeColoring)
            {
                ColorStrokesByType();
            }
            if (EndpointHighlighting)
            {
                circuitEndpointFeedback.Clear();
            }
            if (ErrorHighlighting && circuit != null)
            {
                AddErrorHighlights(circuit.ParseErrors);
            }
            if (labelsOn)
            {
                unsubscribeTooltips();
                subscribeTooltips();
            }

            if (recognitionButton)
            {
                if (GatesOnRec)
                {
                    DrawAllGates();
                }
                if (RecognitionTooltips)
                {
                    showAllTooltips();
                }
            }
        }
コード例 #10
0
 /// <summary>
 /// Recognize a circuit after the sketch has been labeled.
 /// </summary>
 public bool recognizeCircuit()
 {
     circuitParser = new CircuitParser.CircuitParser();
     return(recognizeCircuit(circuitParser));
 }
コード例 #11
0
 /// <summary>
 /// Recognize a circuit after the sketch has been labeled.
 /// </summary>
 public bool recognizeCircuit()
 {
     circuitParser = new CircuitParser.CircuitParser(subCircuitShapetoElement);
     return(recognizeCircuit(circuitParser));
 }