/// <summary> /// Called when a element is dropped onto the canvas /// </summary> private void CircuitCanvas_Drop(object sender, DragEventArgs e) { //Get the type of element that is dropped onto the canvas String[] allFormats = e.Data.GetFormats(); //Make sure there is a format there if (allFormats.Length == 0) { return; } string ItemType = allFormats[0]; //Create a new type of the format CircuitObject instance = (CircuitObject)Assembly.GetExecutingAssembly().CreateInstance(ItemType); //If the format doesn't exist do nothing if (instance == null) { return; } //Add the element to the canvas CircuitCanvas.Children.Add(instance); //Get the point of the mouse relative to the canvas Point p = e.GetPosition(CircuitCanvas); //Take 15 from the mouse position to center the element on the mouse Canvas.SetLeft(instance, p.X - 15); Canvas.SetTop(instance, p.Y - 15); }
private void SetLinkInfo(CircuitObject Info) { m_LineAction.SetCtrlPositionInfo(Info.GetCtrlInfo()); foreach (NDleapObject leap in m_HaveLeap) { if (leap == null) { continue; } LeapObject obj = Info.GetLinkInfo(leap.LeapIndex); if (obj != null) { //link NDlabObject lab = NDlabObject.FindLabObject(obj.linkCircuitObjectID); if (lab != null && lab is NDCircuitObject) { NDleapObject leapobj = (lab as NDCircuitObject).FindLeap(obj.linkCircuitLeapIndex); if (leapobj != null && leapobj is NDCircuitLeap) { (leap as NDLineLeap).Link = (leapobj as NDCircuitLeap); (leapobj as NDCircuitLeap).AddLinkLine(this); } } } } }
/// <summary> ///取元气件速据 /// </summary> public override LabObject GetCircuitData() { CircuitObject Info = new CircuitObject(ID, LabObjectType, Position); Dictionary <string, string> list = new Dictionary <string, string>(); list.Add("m_fInternalResistance", m_fInternalResistance.ToString()); return(Info); }
/// <summary> ///设置元气件速据 (用于从文件系统还原数据) /// </summary> public virtual void SetData(CircuitObject Info) { SetTransform(transform, Info.Position); ID = Info.ID; if (ID >= LabAllocationID) { LabAllocationID = ID + 1; } JoinLabObject(); }
/// <summary> ///取元气件速据 /// </summary> public override LabObject GetCircuitData() { CircuitObject Info = new CircuitObject(ID, LabObjectType, Position); Dictionary <string, string> list = new Dictionary <string, string>(); list.Add("m_fRatedVoltage", m_fRatedVoltage.ToString()); list.Add("m_fRatedPower", m_fRatedPower.ToString()); list.Add("m_bShowElectricity", m_bShowElectricity.ToString()); return(Info); }
/// <summary> ///取元气件速据 /// </summary> public override LabObject GetCircuitData() { CircuitObject Info = new CircuitObject(ID, LabObjectType, Position); Dictionary <string, string> list = new Dictionary <string, string> (); list.Add("m_fInternalResistance", m_fInternalResistance.ToString()); list.Add("m_iRetainDecimalNum", m_iRetainDecimalNum.ToString()); //导线连接关系 //Info.SetLinkInfo(); return(Info); }
public override void Copy(LabObject info) { base.Copy(info); if (info is CircuitObject) { CircuitObject cirObj = info as CircuitObject; this.CircuitInfo = cirObj.CircuitInfo; this.CtrlNode.Clear(); this.CtrlNode.AddRange(cirObj.CtrlNode); this.CtrlNode.Clear(); this.CtrlNode.AddRange(cirObj.CtrlNode); } }
/// <summary> ///取元气件速据 /// </summary> public override LabObject GetCircuitData() { CircuitObject Info = new CircuitObject(ID, LabObjectType, Position); List <PositionInfo> l = new List <PositionInfo>(); l.AddRange(m_LineAction.GetCtrlPositionInfo()); Info.SetCtrlInfo(l); List <LeapObject> ll = new List <LeapObject>(); ll.Add(new LeapObject(StartLineLeap.LeapIndex, StartLineLeap.LinkCuiCircuitObjectID, StartLineLeap.LinkLeapIndex)); ll.Add(new LeapObject(EndLineLeap.LeapIndex, EndLineLeap.LinkCuiCircuitObjectID, EndLineLeap.LinkLeapIndex)); Info.SetLinkInfo(ll); return(Info); }
public override InputReturns Paste(StateControls stateControls, HashSet <BoardObject> clipBoard) { selections.Clear(); CircuitObject currentObject = null; //Average position of all added objects Vec2 averagePosition = Vec2.Zero; foreach (var obj in clipBoard) { var newObj = (CircuitObject)obj.Copy(); selections.Add(newObj); if (currentObject == null) { currentObject = newObj; } averagePosition += newObj.StartPoint; } averagePosition /= selections.Count; //Moves object so that they are centered around the mouse for ease of selection foreach (var obj in selections) { Vec2 offset = obj.StartPoint - averagePosition + stateControls.LocalMousePosition; obj.SetPosition(offset); } stateControls.CircuitPropertiesOutput = GetUpdatedCircuitProperties(stateControls.RegisterChange); //New objects pasted and are now being held if (selections.Count > 0) { return(true, new MovingSelectionState(stateControls.LocalMousePosition, selections, currentObject, stateControls.State, false)); } return(false, this); }
/// <summary> /// Get circuti data /// </summary> public bool GetCircuitData() { m_Circuitobj.Clear(); List <NDlabObject> l = NDlabObject.SearchLabObject(SearchCicuitType.NormalCircuit); foreach (NDlabObject Obj in l) { if (Obj == null) { continue; } CircuitObject o = (Obj as NDCircuitObject).GetCircuitData() as CircuitObject; if (o == null) { continue; } m_Circuitobj.Add(o); } List <NDlabObject> l2 = NDlabObject.SearchLabObject(SearchCicuitType.ELELINE); foreach (NDlabObject Obj in l2) { if (Obj == null) { continue; } CircuitObject o = (Obj as NDCircuitObject).GetCircuitData() as CircuitObject; if (o == null) { continue; } m_Circuitobj.Add(o); } return(true); }
/// <summary> ///设置元气件速据 (用于从文件系统还原数据) /// </summary> public override void SetData(CircuitObject Info) { base.SetData(Info); }
/// <summary> ///设置元气件速据 (用于从文件系统还原数据) /// </summary> public override void SetData(CircuitObject Info) { }
/// <summary> /// Called when the mouse button is let go /// </summary> private void CircuitCanvas_MouseUp(object sender, MouseButtonEventArgs e) { //If there is a linking in progress if (_linkingStarted) { //Temporary value to show bool linked = false; //Get the type of the element that the mouse went up on var BaseType = e.Source.GetType().BaseType; if (BaseType == typeof(CircuitObject)) { //Convert to a circuit object CircuitObject obj = (CircuitObject)e.Source; //Get the position of the mouse relative to the circuit object Point MousePosition = e.GetPosition(obj); //Get the element underneath the mouse HitTestResult result = VisualTreeHelper.HitTest(obj, MousePosition); //Return if there is no element under the cursor if (result == null || result.VisualHit == null) { //Remove the temporary line Connections.Children.Remove(_tempLink); _tempLink = null; _linkingStarted = false; return; } //If the underlying element is a border element if (result.VisualHit is Border) { Border border = (Border)result.VisualHit; var IO = border.Parent; //Check if the border element is a input element in disguise if (IO is Input) { //Convert to a input element Input IOInput = (Input)IO; //Get the center of the input relative to the canvas Point inputPoint = IOInput.TransformToAncestor(CircuitCanvas).Transform(new Point(IOInput.ActualWidth / 2, IOInput.ActualHeight / 2)); //Ends the line in the centre of the input _tempLink.EndPoint = inputPoint; //Links the output to the input IOInput.LinkInputs(_tempOutput); //Adds to the global list _powerList.Add(_tempOutput); _powerList.Add(IOInput); //Attaches the line to the object obj.AttachInputLine(_tempLink); //Some evil casting (the outputs' parent of the parent is the circuit object that contains the output). Attaches the output side to the object ((CircuitObject)((Grid)_tempOutput.Parent).Parent).AttachOutputLine(_tempLink); //Set linked to true linked = true; } } } //If it isn't linked remove the temporary link if (!linked) { Connections.Children.Remove(_tempLink); _tempLink = null; } //Stop handling linking _linkingStarted = false; e.Handled = true; } }
/// <summary> ///取元气件速据 /// </summary> public override LabObject GetCircuitData() { CircuitObject Info = new CircuitObject(ID, LabObjectType, Position); return(Info); }