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); } }
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); } } }
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(); } }
/// <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); } } }
public ModelSelectChangeEventArgs(ModelClass M) { _M = M; }
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]); } }
/// <summary> /// 添加 Wave 子节点 /// </summary> /// <param name="CNode"></param> public void AddWaveChild(ModelClass CNode) { _WaveChild.Add(CNode); CNode.AddParentNode(this); }
/// <summary> /// 添加Copy 子节点 /// </summary> /// <param name="CNode"></param> public void AddCopyChild(ModelClass CNode) { _CopyChild.Add(CNode); CNode.AddParentNode(this); CNode.IsWaveNode = false; }
private bool CanAddToLocation(ModelClass M1) { if (!ExistModelList.Contains(M1.ModelID)) { return true; } return false; }
private void SetLocation(ModelClass modelClass, PointF pointF) { modelClass.Location = _CordClass.ConvertRealToDraw(pointF); }
/// <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; }
//刷新显示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); } }
/// <summary> /// ��� Wave �ӽڵ� /// </summary> /// <param name="CNode"></param> public void AddWaveChild(ModelClass CNode) { _WaveChild.Add(CNode); CNode.AddParentNode(this); }
/// <summary> /// ���ø��ڵ� /// </summary> /// <param name="PNode"></param> public void AddParentNode(ModelClass PNode) { _ParentNodeList.Add(PNode); }
/// <summary> /// ���Copy �ӽڵ� /// </summary> /// <param name="CNode"></param> public void AddCopyChild(ModelClass CNode) { _CopyChild.Add(CNode); CNode.AddParentNode(this); CNode.IsWaveNode = false; }
public void ClearAll() { this.WRClassList.Clear(); if (HTExistModel != null) { HTExistModel.Clear(); } SelectModel = null; this.Refresh(); }
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); } }
public WaveRelationClass(ModelClass RootNode) { _RootModel = RootNode; }
/// <summary> /// 设置父节点 /// </summary> /// <param name="PNode"></param> public void AddParentNode(ModelClass PNode) { _ParentNodeList.Add(PNode); }
/// <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; } }
/// <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(); }
/// <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); } } }