public void CreateSelectJoint(double x, double y) { if (selectJoint != null) { element_buffer.Add(selectJoint.element_begin); if (selectJoint.element_begin != null) { for (int i = 0; i < blocks.Count; i++) { if (blocks[i].element == selectJoint.element_begin) { if (blocks[i].Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true) { blocks[i].Mode = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true_end; } if (blocks[i].Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false) { blocks[i].Mode = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false_end; } } } } selectJoint.Create(this.canvas, x, y); selectJoint = null; joint_select = false; } joint_select = false; }
/// <summary> /// Происходит при удалении соединения /// </summary> /// <param name="joint"></param> public void selectJoint_removeJoint(LMD_BLOCKS.BlockJoint joint) { Boolean block_yes = false; for (int i = 0; i < blocks.Count; i++) { if (blocks[i].next_1 != null) { if (joint.element_begin == blocks[i].next_1.element) { if (blocks[i].next_1 != null) { blocks[i].next_1.next_1 = null; } block_yes = true; } } if (block_yes) { break; } } joints.Remove(joint); RemoveLine(joint); }
/// <summary> /// Происходит когда в блоке condition выбирается соединение /// </summary> /// <param name="element">Сам блок</param> /// <param name="num">Номер связи</param> private void bco_clickJoint(UIElement element, int num) { #region - if (num == 0) // минус { joint_select = true; if (selectJoint == null) { selectJoint = new LMD_BLOCKS.BlockJoint(this); selectJoint.type_line = LMD_BLOCKS.TYPE_LINE.condition; selectJoint.element_begin = element; selectJoint.State = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false; selectJoint.SelectXY(Canvas.GetLeft(element) + 10, Canvas.GetTop(element) + 50); selectJoint.createNewJoint += selectJoint_createNewJoint; selectJoint.removeJoint += selectJoint_removeJoint; } else if (selectJoint != null) { } } #endregion #region + else if (num == 1) // плюс { joint_select = true; if (selectJoint == null) { selectJoint = new LMD_BLOCKS.BlockJoint(this); selectJoint.type_line = LMD_BLOCKS.TYPE_LINE.condition; selectJoint.element_begin = element; selectJoint.State = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true; selectJoint.SelectXY(Canvas.GetLeft(element) + 340, Canvas.GetTop(element) + 50); selectJoint.createNewJoint += selectJoint_createNewJoint; selectJoint.removeJoint += selectJoint_removeJoint; } else if (selectJoint != null) { } } #endregion }
public void CreateJoint2() { if (selectJoint != null) { LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b1 = null; LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b2 = null; for (int i = 0; i < blocks.Count; i++) { if (blocks[i].element == selectJoint.element_begin) { b1 = blocks[i]; } } for (int i = 0; i < blocks.Count; i++) { if (blocks[i].element == selectJoint.element_end) { b2 = blocks[i]; } } b1.next_1 = b2; // MessageBox.Show("b1[" + b1.Type + "] Mode[" + b1.Mode + "] b2[" + b2.Type + "] Mode[" + b2.Mode + "]"); if (b1.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true) { b2.Mode = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true; } else if (b1.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false) { b2.Mode = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false; } selectJoint.Create(this.canvas); selectJoint = null; } joint_select = false; }
/// <summary> /// Происходит при создании нового соединения /// </summary> /// <param name="joint"></param> public void selectJoint_createNewJoint(LMD_BLOCKS.BlockJoint joint) { createNewLine(joint); joints.Add(joint); // MessageBox.Show(""+); if (joint.type_line == LMD_BLOCKS.TYPE_LINE.end_condition) { for (int i = 0; i < blocks.Count; i++) { if (blocks[i].element == joint.element_begin || blocks[i].element == joint.element_end) { if (blocks[i].Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false) { blocks[i].Mode = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false_end; } else if (blocks[i].Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true) { blocks[i].Mode = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true_end; } } } // MessageBox.Show(joint.type_line + "\n" + joint.element_begin.GetType() + " | " + joint.element_end.GetType()); } }
/// <summary> /// Добавляет выборочно связь. Связь зависит от selectJoint /// и исходя из этого объекта сама выбирает какую форму она будет иметь /// </summary> /// <param name="element">UI связываемого блока. Привязывается к соединению</param> public void AddJoint(UIElement element) { joint_select = true; if (selectJoint == null) { selectJoint = new LMD_BLOCKS.BlockJoint(this); selectJoint.element_begin = element; selectJoint.createNewJoint += selectJoint_createNewJoint; selectJoint.removeJoint += selectJoint_removeJoint; selectJoint.type_line = LMD_BLOCKS.TYPE_LINE.marshrut; } else if (selectJoint.type_line == LMD_BLOCKS.TYPE_LINE.marshrut) // Прямая связь { if (selectJoint.element_begin == null) { selectJoint.element_begin = element; } else if (selectJoint.element_end == null) { selectJoint.element_end = element; CreateJoint2(); } } else if (selectJoint.type_line == LMD_BLOCKS.TYPE_LINE.line_block || selectJoint.type_line == LMD_BLOCKS.TYPE_LINE.condition) { if (selectJoint.type_line == LMD_BLOCKS.TYPE_LINE.line_block) { selectJoint.element_end = element; LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b1 = null; LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b2 = null; for (int i = 0; i < blocks.Count; i++) { if (blocks[i].element == selectJoint.element_begin) { b1 = blocks[i]; } } for (int i = 0; i < blocks.Count; i++) { if (blocks[i].element == selectJoint.element_end) { b2 = blocks[i]; } } b1.next_1 = b2; // MessageBox.Show(""+b1.Type + " | " + b2.Type); selectJoint.CreateOldXYToBlock(this.canvas, element); } else if (selectJoint.type_line == LMD_BLOCKS.TYPE_LINE.condition) { #region + if (selectJoint.State == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true) // + { selectJoint.element_end = element; LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b1 = null; LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b2 = null; for (int i = 0; i < blocks.Count; i++) { if (blocks[i].element == selectJoint.element_begin) { b1 = blocks[i]; } } for (int i = 0; i < blocks.Count; i++) { if (blocks[i].element == selectJoint.element_end) { b2 = blocks[i]; } } b1.next_1 = b2; b2.Mode = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true; selectJoint.CreateOldXYToBlock(this.canvas, element); } #endregion #region - else if (selectJoint.State == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false) // - { selectJoint.element_end = element; LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b1 = null; LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b2 = null; for (int i = 0; i < blocks.Count; i++) { if (blocks[i].element == selectJoint.element_begin) { b1 = blocks[i]; } } for (int i = 0; i < blocks.Count; i++) { if (blocks[i].element == selectJoint.element_end) { b2 = blocks[i]; } } b1.next_2 = b2; b2.Mode = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false; selectJoint.CreateOldXYToBlock(this.canvas, element); } #endregion } else { selectJoint.CreateOldXYToBlock(this.canvas, element); } joint_select = false; selectJoint = null; } }