private void CreateElements(Circuit circuit, CircuitData circuitData, SignalList signals, bool createGraphics) { Dictionary <BaseElement, BaseElementData> elemDict = new Dictionary <BaseElement, BaseElementData>(); foreach (BaseElementData elemData in circuitData.Elements) { InputOutputElement element = null; element = ConvertElementData(elemData, createGraphics, elemDict, signals); if (element != null) { circuit.AddElement(element); } } foreach (ConnectionData connectionData in circuitData.Connections) { Connection connection = new Connection(); connection.Name = connectionData.Name; ConnectTerminals(connection, circuit, elemDict); if (connection.Terminals.Count > 0) { if (createGraphics) { GraphicConnection graphicConnection = GraphicObjectFactory.CreateInstance(typeof(Connection), connection) as GraphicConnection; CreateConnectionLines(circuit, graphicConnection, connectionData); } circuit.AddElement(connection); } } }
/// <summary> /// Adds a new element to the circuit /// </summary> /// <param name="element">the element to add</param> public void AddElement(GraphicBaseElement element) { if (element != null) { m_Circuit.AddElement(element.LinkedObject as BaseElement); element.OnUpdateDrawing += new UpdateDrawingEvent(element_OnUpdateDrawing); if (element is GraphicInput && element.LinkedObject is SignalInput) { m_SignalList.Add((element.LinkedObject as SignalInput).Signal); } RaiseChangedEvent(); UpdateDrawing(); Invalidate(); } }
/// <summary> /// 构建电路 /// </summary> public static bool CreateCircuit() { ClearCircuit(); // if (CheckCircuitLoop() == false) { Debug.Log("电路不连通"); g_IsCreateCircuit = false; return(false); } else { Debug.Log("电路连通"); } // List <NDlabObject> l = NDlabObject.SearchLabObject(SearchCicuitType.NormalCircuit, false); //先加入元气件 foreach (NDlabObject Lab in l) { if (Lab == null) { continue; } else { CircuitElement e = LabObjectDataFactory.GetCircuit(Lab.LabObjID); if (e != null) { g_sim.AddElement(e); } } } //元气件进行连接 foreach (NDlabObject Lab in l) { if (Lab == null) { continue; } else { (Lab as NDCircuitObject).JionCircuit(ref g_sim); } } //JionCircuit(); try { //g_sim.needAnalyze(); if (g_sim.doTick() == false) { //g_IsCreateCircuit = false; Debug.Log("CreateCircuit is false"); return(false); } else { Debug.Log("CreateCircuit is true"); g_IsCreateCircuit = true; } } catch (SharpCircuit.Circuit.CircuitException e) { Debug.Log(e.ToString()); return(false); } return(true); }