예제 #1
0
 private ModelClass GetSelectModel(Point P)
 {
     try
     {
         foreach (int ModelID in HTExistModel.Keys)
         {
             ModelClass MC = (ModelClass)HTExistModel[ModelID];
             if (MC.IsPointInModel(P))
             {
                 return(MC);
             }
         }
         return(null);
     }
     catch
     {
         return(null);
     }
 }
예제 #2
0
        private void DrawPanel_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (WRClassList.Count != 0)
            {
                if (HTExistModel != null)
                {
                    Point      P = new Point(e.X, e.Y);
                    ModelClass M = GetSelectModel(P);
                    if (M != null)
                    {
                        if (ModelDClick != null)
                        {
                            ModelDClick(this, new ModelSelectChangeEventArgs(M));
                        }
                        // MessageBox.Show(M.SeqName);
                    }

//                     WavePreview wp = new WavePreview();
//                     wp.Location = Control.MousePosition;
//                     wp.Show(this);
                }
            }
        }
예제 #3
0
        private void DrawPanel_MouseClick(object sender, MouseEventArgs e)
        {
            if (WRClassList.Count != 0)
            {
                Point      P = new Point(e.X, e.Y);
                ModelClass M = GetSelectModel(P);
                if (M != null)
                {
                    if (SelectModel != null)
                    {
                        SelectModel.IsSelected = false;
                    }
                    SelectModel  = M;
                    M.IsSelected = true;

                    if (ModelSelected != null)
                    {
                        ModelSelected(this, new ModelSelectChangeEventArgs(SelectModel));
                    }
                }
                this.Refresh();
            }
        }
예제 #4
0
        /// <summary>
        /// 添加指定节点及其所有祖先节点到Location 位置中
        /// </summary>
        /// <param name="i"></param>
        /// <param name="M1"></param>
        private void AddModelToLocation(int i, ModelClass M1)
        {
            if (ExistModelList.Contains(M1.ModelID))
            {
                return;
            }

            AMLocation(i, M1);

            foreach (ModelClass M in M1.WaveChild)
            {
                if (!(ExistModelList.Contains(M.ModelID) || NeedToAddQueue.Contains(M)))
                {
                    M.Layer = i + 1;
                    NeedToAddQueue.Enqueue(M);
                }
            }

            foreach (ModelClass M in M1.CopyChild)
            {
                if (!(ExistModelList.Contains(M.ModelID) || NeedToAddQueue.Contains(M)))
                {
                    M.Layer = i + 1;
                    NeedToAddQueue.Enqueue(M);
                }
            }

            foreach (ModelClass M in M1.ParentNodeList)
            {
                if (!(ExistModelList.Contains(M.ModelID) || NeedToAddQueue.Contains(M)))
                {
                    M.Layer = i - 1;
                    NeedToAddQueue.Enqueue(M);
                }
            }
        }
예제 #5
0
 public ModelSelectChangeEventArgs(ModelClass M)
 {
     _M = M;
 }
예제 #6
0
        private void DrawModel(Graphics g, ModelClass modelClass)
        {
            modelClass.DrawModel(g);

            for (int i = 0; i < modelClass.CopyChild.Count; i++)
            {
                DrawModel(g, (ModelClass)modelClass.CopyChild[i]);
            }

            for (int i = 0; i < modelClass.WaveChild.Count; i++)
            {
                DrawModel(g, (ModelClass)modelClass.WaveChild[i]);
            }
        }
예제 #7
0
        private void DrawPanel_MouseClick(object sender, MouseEventArgs e)
        {
            if (WRClassList.Count != 0)
            {
                Point P = new Point(e.X, e.Y);
                ModelClass M = GetSelectModel(P);
                if (M != null)
                {

                    if (SelectModel != null)
                    {
                        SelectModel.IsSelected = false;
                    }
                    SelectModel = M;
                    M.IsSelected = true;

                    if (ModelSelected != null)
                    {
                        ModelSelected(this, new ModelSelectChangeEventArgs(SelectModel));
                    }
                }
                this.Refresh();
            }
        }
예제 #8
0
 /// <summary>
 /// 添加 Wave 子节点
 /// </summary>
 /// <param name="CNode"></param>
 public void AddWaveChild(ModelClass CNode)
 {
     _WaveChild.Add(CNode);
     CNode.AddParentNode(this);
 }
예제 #9
0
 /// <summary>
 /// 添加Copy  子节点
 /// </summary>
 /// <param name="CNode"></param>
 public void AddCopyChild(ModelClass CNode)
 {
     _CopyChild.Add(CNode);
     CNode.AddParentNode(this);
     CNode.IsWaveNode = false;
 }
예제 #10
0
        private bool CanAddToLocation(ModelClass M1)
        {
            if (!ExistModelList.Contains(M1.ModelID))
            {
                return true;
            }

            return false;
        }
예제 #11
0
 private void SetLocation(ModelClass modelClass, PointF pointF)
 {
     modelClass.Location = _CordClass.ConvertRealToDraw(pointF);
 }
예제 #12
0
 private void SetLocation(ModelClass modelClass, PointF pointF)
 {
     modelClass.Location = _CordClass.ConvertRealToDraw(pointF);
 }
예제 #13
0
 public ModelSelectChangeEventArgs(ModelClass M)
 {
     _M = M;
 }
예제 #14
0
파일: ModelClass.cs 프로젝트: NWPU-UGNX/096
        /// <summary>
        /// ��ȡM1���ģ��֮��Ĺ�ϵ
        /// </summary>
        /// <param name="M1">�ⲿģ��</param>
        /// <returns>0  û�й�ϵ
        ///          1  Wave ���ӹ�ϵ
        ///          2  Copy ���ӹ�ϵ
        ///          3  M1 �� ��ǰģ�͵ĸ���</returns>
        public int GetRelationShip(ModelClass M1)
        {
            foreach (ModelClass M in _WaveChild)
            {
                if (M.ModelID == M1.ModelID)
                {
                    return 1;
                }
            }

            foreach (ModelClass M in _CopyChild)
            {
                if (M.ModelID == M1.ModelID)
                {
                    return 2;
                }
            }

            foreach (ModelClass M in _ParentNodeList)
            {
                if (M.ModelID == M1.ModelID)
                {
                    return 3;
                }
            }

            return 0;
        }
예제 #15
0
 //刷新显示wave关系图
 public void FreshWaveMap(bool isfresh, bool isShowAll, string filename)
 {
     if (!isfresh)
     {
         return;
     }
     waveRelationCtl.HorizontalScroll.Value = 0;
     waveRelationCtl.VerticalScroll.Value = 0;
     if (isShowAll)
     {
         waveRelationCtl.ClearAll();
         //加载Wave关系图
         List<S_Model> ModelList = XML3DPPM.GetModelList(XmlFile);
         List<S_WaveInfor> WaveInforList = new List<S_WaveInfor>();
         Hashtable ht = new Hashtable();
         ModelClass M0;
         ModelClass M1;
         ModelClass M2;
         ModelClass Mout = new ModelClass("未知", "外部");
         ArrayList AL = new ArrayList();
         foreach (S_Model model in ModelList)
         {
             WaveInforList.AddRange(NXFun.GetSinglePrtWaveInfor(ToFullPath(model.filename)));
             if (!string.IsNullOrEmpty(model.filename))
             {
                 M0 = new ModelClass(ToFullPath(model.filename), GetWaveName(model.filename));
                 ht.Add(ToFullPath(model.filename), M0);
                 AL.Add(M0);
             }
         }
         ht.Add("未知", Mout);
         foreach (S_WaveInfor waveinfor in WaveInforList)
         {
             if (WaveSetting_All.Contains(waveinfor.wave_type))
             {
                 if (ht.Contains(waveinfor.fatherpath))
                 {
                     M1 = (ModelClass)ht[waveinfor.fatherpath];
                 }
                 else
                 {
                     M1 = Mout;
                     AL.Add(Mout);
                 }
                 M2 = (ModelClass)ht[waveinfor.childpath];
                 M1.AddWaveChild(M2);
             }
         }
         waveRelationCtl.SetRootClass(AL);
     }
     else
     {
         if (string.IsNullOrEmpty(filename))
         {
             return;
         }
         string fullpath = ToFullPath(filename);
         waveRelationCtl.ClearAll();
         //加载Wave关系图
         List<S_Model> ModelList = XML3DPPM.GetModelList(XmlFile);
         List<S_WaveInfor> WaveInforList = new List<S_WaveInfor>();
         Hashtable ht = new Hashtable();
         ModelClass M0;
         ModelClass M1;
         ModelClass M2;
         ModelClass Mout = new ModelClass("未知", "外部");
         ArrayList AL = new ArrayList();
         foreach (S_Model model in ModelList)
         {
             WaveInforList.AddRange(NXFun.GetSinglePrtWaveInfor(ToFullPath(model.filename)));
             if (!string.IsNullOrEmpty(model.filename))
             {
                 M0 = new ModelClass(ToFullPath(model.filename), GetWaveName(model.filename));
                 ht.Add(ToFullPath(model.filename), M0);
                 AL.Add(M0);
             }
         }
         ht.Add("未知", Mout);
         foreach (S_WaveInfor waveinfor in WaveInforList)
         {
             if (WaveSetting_Single.Contains(waveinfor.wave_type))
             {
                 if (ht.Contains(waveinfor.fatherpath))
                 {
                     M1 = (ModelClass)ht[waveinfor.fatherpath];
                 }
                 else
                 {
                     M1 = Mout;
                     AL.Add(M1);
                 }
                 M2 = (ModelClass)ht[waveinfor.childpath];
                 if (waveinfor.fatherpath == fullpath || waveinfor.childpath == fullpath)
                 {
                     M1.AddWaveChild(M2);
                 }
             }
         }
         ArrayList remove = new ArrayList();
         foreach (ModelClass m in AL)
         {
             if (m.ModelFileName != fullpath) //不是中间节点
             {
                 if (!m.ParentNodeList.Contains(ht[fullpath])) //不是filename的子节点
                 {
                     if (!m.WaveChild.Contains(ht[fullpath]))  //不是filename的父节点
                     {
                         remove.Add(m);
                     }
                 }
             }
         }
         foreach (object obj in remove)
         {
             AL.Remove(obj);
         }
         waveRelationCtl.SetRootClass(AL);
     }
 }
예제 #16
0
파일: ModelClass.cs 프로젝트: NWPU-UGNX/096
 /// <summary>
 /// ��� Wave �ӽڵ� 
 /// </summary>
 /// <param name="CNode"></param>
 public void AddWaveChild(ModelClass CNode)
 {
     _WaveChild.Add(CNode);
     CNode.AddParentNode(this);
 }
예제 #17
0
파일: ModelClass.cs 프로젝트: NWPU-UGNX/096
 /// <summary>
 /// ���ø��ڵ� 
 /// </summary>
 /// <param name="PNode"></param>
 public void AddParentNode(ModelClass PNode)
 {
     _ParentNodeList.Add(PNode);
 }
예제 #18
0
파일: ModelClass.cs 프로젝트: NWPU-UGNX/096
 /// <summary>
 /// ���Copy  �ӽڵ�
 /// </summary>
 /// <param name="CNode"></param>
 public void AddCopyChild(ModelClass CNode)
 {
     _CopyChild.Add(CNode);
     CNode.AddParentNode(this);
     CNode.IsWaveNode = false;
 }
예제 #19
0
        public void ClearAll()
        {
            this.WRClassList.Clear();
            if (HTExistModel != null)
            {
                HTExistModel.Clear();
            }

            SelectModel = null;
            this.Refresh();
        }
예제 #20
0
        private void AMLocation(int i,ModelClass M1)
        {
            int AddLayer = 0;

            i += AddLayer;
            if (ExistModelList.Contains(M1.ModelID))
            {
                return;
            }
            else
            {

                ExistModelList.Add(M1.ModelID, M1);
            }

            if (HTLayerModel.ContainsKey(M1.Layer))
            {
                ArrayList AL = (ArrayList)HTLayerModel[M1.Layer];
                AL.Add(M1);
            }
            else
            {
                ArrayList AL = new ArrayList();
                AL.Add(M1);
                HTLayerModel.Add(M1.Layer, AL);
            }
        }
예제 #21
0
 public WaveRelationClass(ModelClass RootNode)
 {
     _RootModel = RootNode;
 }
예제 #22
0
 /// <summary>
 /// 设置父节点
 /// </summary>
 /// <param name="PNode"></param>
 public void AddParentNode(ModelClass PNode)
 {
     _ParentNodeList.Add(PNode);
 }
예제 #23
0
 public WaveRelationClass(ModelClass RootNode)
 {
     _RootModel = RootNode;
 }
예제 #24
0
        /// <summary>
        /// ��ȡָ���ڵ��Wave ������
        /// </summary>
        /// <param name="mClass"></param>
        /// <param name="lastLength"></param>
        /// <returns></returns>
        private int GetModelLength(ModelClass mClass, int lastLength)
        {
            int length = 0;

            if (mClass.WaveChild.Count == 0 && mClass.CopyChild.Count == 0)
            {
                return lastLength + 1;
            }
            else
            {

                for (int i = 0; i < mClass.WaveChild.Count; i++)
                {
                    int temp = GetModelLength((ModelClass)mClass.WaveChild[i], 1);
                    if (temp > length)
                    {
                        length = temp;
                    }
                }

                for (int i = 0; i < mClass.CopyChild.Count; i++)
                {
                    int temp = GetModelLength((ModelClass)mClass.CopyChild[i], 1);
                    if (temp > length)
                    {
                        length = temp;
                    }
                }

                return lastLength + length;
            }
        }
예제 #25
0
        /// <summary>
        /// 设置空间的Wave 根节点
        /// </summary>
        /// <param name="RootClass">设计模型根节点</param>
        /// <param name="AttachModellist">辅助节点列表</param>
        public void SetRootClass(ArrayList RootModellist)
        {
            this.HorizontalScroll.Value = 0;
            int StartX = 0;
            int StartY = 0;

            int MaxHeight = 0;


            HTExistModel = new Hashtable();

            for (int i = 0; i < RootModellist.Count; i++)
            {
                ModelClass M = RootModellist[i] as ModelClass;
                if (!HTExistModel.Contains(M.ModelID))
                {
                    WaveRelationClass WRClass = new WaveRelationClass(M);

                    WRClass.SetEveryModelLocation();

                    int MaxWaveLength = WRClass.GetLocationLength();
                    int MaxModelDepth = WRClass.GetLocationWidth();

                    int tWidth  = 0;
                    int tHeight = CtlGlobalClass.UpBlank + CtlGlobalClass.DownBlank + (MaxWaveLength) * CtlGlobalClass.VShapeDis;

                    if (i == 0)
                    {
                        tWidth = CtlGlobalClass.LeftBlank + CtlGlobalClass.RightBlank + (MaxModelDepth) * CtlGlobalClass.HLayerDis;
                    }
                    else
                    {
                        tWidth = CtlGlobalClass.LeftBlank + (MaxModelDepth) * CtlGlobalClass.HLayerDis;
                    }

                    if (tHeight > MaxHeight)
                    {
                        MaxHeight = tHeight;
                    }

                    WRClass.InitModelCord(StartX, StartY, tWidth, tHeight);
                    StartX += tWidth;

                    Hashtable ExistNodeList = WRClass.GetExistNodeList();
                    foreach (int key in ExistNodeList.Keys)
                    {
                        if (!HTExistModel.ContainsKey(key))
                        {
                            HTExistModel.Add(key, ExistNodeList[key]);
                        }
                    }

                    WRClassList.Add(WRClass);
                }
            }

            this.DrawPanel.Top  = 0;
            this.DrawPanel.Left = 0;

            this.DrawPanel.Width  = StartX;
            this.DrawPanel.Height = MaxHeight;



            this.DrawPanel.Refresh();
        }
예제 #26
0
        /// <summary>
        /// ���ָ���ڵ㼰���������Ƚڵ㵽Location λ����
        /// </summary>
        /// <param name="i"></param>
        /// <param name="M1"></param>
        private void AddModelToLocation(int i, ModelClass M1)
        {
            if (ExistModelList.Contains(M1.ModelID))
             {
                 return;
             }

              AMLocation(i,M1);

             foreach (ModelClass M in M1.WaveChild)
             {
                 if (!(ExistModelList.Contains(M.ModelID) || NeedToAddQueue.Contains(M)))
                 {
                     M.Layer = i + 1;
                     NeedToAddQueue.Enqueue(M);
                 }
             }

             foreach (ModelClass M in M1.CopyChild)
             {
                 if (!(ExistModelList.Contains(M.ModelID) || NeedToAddQueue.Contains(M)))
                 {
                     M.Layer = i + 1;
                     NeedToAddQueue.Enqueue(M);
                 }
             }

             foreach (ModelClass M in M1.ParentNodeList)
             {
                 if(!(ExistModelList.Contains(M.ModelID) || NeedToAddQueue.Contains(M)))
                 {
                     M.Layer = i - 1;
                     NeedToAddQueue.Enqueue(M);
                 }
             }
        }