/// <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); }
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); }
/// <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)); }
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); }
/// <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); }
/// <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(); } }
/// <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(); }
/// <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(); }
/// <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(); } } }
/// <summary> /// Recognize a circuit after the sketch has been labeled. /// </summary> public bool recognizeCircuit() { circuitParser = new CircuitParser.CircuitParser(); return(recognizeCircuit(circuitParser)); }
/// <summary> /// Recognize a circuit after the sketch has been labeled. /// </summary> public bool recognizeCircuit() { circuitParser = new CircuitParser.CircuitParser(subCircuitShapetoElement); return(recognizeCircuit(circuitParser)); }