Example #1
0
        /// <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);
        }
Example #2
0
    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);
                    }
                }
            }
        }
    }
Example #3
0
    /// <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);
    }
Example #4
0
 /// <summary>
 ///设置元气件速据 (用于从文件系统还原数据)
 /// </summary>
 public virtual void SetData(CircuitObject Info)
 {
     SetTransform(transform, Info.Position);
     ID = Info.ID;
     if (ID >= LabAllocationID)
     {
         LabAllocationID = ID + 1;
     }
     JoinLabObject();
 }
Example #5
0
    /// <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);
    }
Example #6
0
    /// <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);
    }
Example #7
0
    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);
        }
    }
Example #8
0
    /// <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);
    }
Example #9
0
        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);
        }
Example #10
0
    /// <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);
    }
Example #11
0
 /// <summary>
 ///设置元气件速据 (用于从文件系统还原数据)
 /// </summary>
 public override void SetData(CircuitObject Info)
 {
     base.SetData(Info);
 }
Example #12
0
 /// <summary>
 ///设置元气件速据 (用于从文件系统还原数据)
 /// </summary>
 public override void SetData(CircuitObject Info)
 {
 }
Example #13
0
        /// <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;
            }
        }
Example #14
0
    /// <summary>
    ///取元气件速据
    /// </summary>
    public override LabObject GetCircuitData()
    {
        CircuitObject Info = new CircuitObject(ID, LabObjectType, Position);

        return(Info);
    }