I already refer this sample. It’s not working what I want. I used the following code. private void diagramView1_DragDrop(object sender, DragEventArgs e) { case "Activity": CreateActivity(link); break; case "IfElse": CreateNewIfElse(link); break; case "While": CreateWhile(link); break; case "Process": CreateProcess(link); break; case "Decision": CreateDecision(link); break; } private void CreateProcess(DiagramLink link) { DiagramLink lastLink = diagram.Links[diagram.Links.Count - 1]; CreateActivityNew(lastLink); } private void CreateActivityNew(DiagramLink link) { ShapeNode origin = link.Origin as ShapeNode; ShapeNode dest = link.Destination as ShapeNode;
string oldLogicID = link.LayoutTraits[Connector].ToString(); diagram.Links.Remove(link);
ShapeNode newActivity = diagram.Factory.CreateShapeNode(defaultPosition, Shapes.Process); newActivity.LayoutTraits[WorkflowItemId] = "Activity"; diaNodeID += 1; newActivity.Id = diaNodeID;
ShapeNode newActivity1 = diagram.Factory.CreateShapeNode(defaultPosition, Shapes.Decision); newActivity.LayoutTraits[WorkflowItemId] = "Activity";
CreateLink(origin, newActivity, true, oldLogicID); CreateLink(newActivity, newActivity1, true, oldLogicID); CreateLink (newActivity1,dest ,true,"ControlFlow"); LayoutDiagram();
view.BeginEdit(newActivity); }
When I drag a new decision node after activity
private void CreateDecision(DiagramLink link) { ShapeNode origin = link.Origin as ShapeNode; ShapeNode dest = link.Destination as ShapeNode;
string oldLogicID = link.LayoutTraits[Connector].ToString(); diagram.Links.Remove(link); ShapeNode newActivity = diagram.Factory.CreateShapeNode(defaultPosition, Shapes.Decision); newActivity.LayoutTraits[WorkflowItemId] = "Activity"; diaNodeID += 1; newActivity.Id = diaNodeID;
CreateLink(origin, newActivity, true, oldLogicID); CreateLink(newActivity, dest, true, "ControlFlow"); LayoutDiagram(); view.BeginEdit(newActivity); }
New decision node created near old decision node.But this code is creating a new decision node above the old decision node. I don’t have this output.
private void CreateProcess(DiagramLink link) { DiagramLink lastLink = diagram.Links[diagram.Links.Count - 1]; CreateIfElseNew(lastLink); DiagramLink trueLink = diagram.Links[diagram.Links.Count - 3]; DiagramLink falseLink = diagram.Links[diagram.Links.Count - 2]; CreateActivityNew(trueLink); CreateActivityNew(falseLink); }
private void CreateIfElseNew(DiagramLink link) { ShapeNode origin = link.Origin as ShapeNode; ShapeNode dest = link.Destination as ShapeNode;
string oldLogicID = link.LayoutTraits[Connector].ToString(); diagram.Links.Remove(link);
ShapeNode decision = diagram.Factory.CreateShapeNode(defaultPosition, Shapes.Process); decision.Text = "Condition"; decision.LayoutTraits[WorkflowItemId] = "IfElse"; decision.LayoutTraits[PairStart] = diagram.Tag;
ShapeNode endIf = diagram.Factory.CreateShapeNode(smallSize, Shapes.Ellipse); endIf.Text = ""; endIf.LayoutTraits[PairEnd] = diagram.Tag;
CreateLink(origin, decision, true, oldLogicID); CreateLink(decision, endIf, true, "Yes"); CreateLink(decision, endIf, true, "No"); CreateLink(endIf, dest, true, "ControlFlow");
LayoutDiagram(); diagram.Tag = (int)diagram.Tag + 1; }
Its not get the proper output. This code is creating a two new decision node but not move the earlier decision node to left hand side (shown in above diagram). & it’s creating only two decision nodes but some times I have to create one or two or more… decision node. It depends on the condition.
|