public static void CreateDiagram(Project project, string diagramName, int shapesPerRow, int shapesPerColumn, bool connectShapes, bool withModels, bool withTerminalMappings, bool withModelMappings, bool withLayers, IList <String> shapeTypeNames) { const int shapeSize = 80; int lineLength = shapeSize / 2; // // Create the templates CreateTemplatesFromShapeTypes(project, shapeTypeNames, shapeSize, withModels, withTerminalMappings, withModelMappings, shapesPerRow * shapesPerColumn); // // Prepare the connection points ControlPointId leftPoint = withModels ? ControlPointId.Reference : 4; ControlPointId rightPoint = withModels ? ControlPointId.Reference : 5; ControlPointId topPoint = withModels ? ControlPointId.Reference : 2; ControlPointId bottomPoint = withModels ? ControlPointId.Reference : 7; // // Create the diagram Diagram diagram = new Diagram(diagramName); // // Create and add layers int planarLayerId = Layer.NoLayerId, linearLayerId = Layer.NoLayerId, oddRowLayerId = Layer.NoLayerId, evenRowLayerId = Layer.NoLayerId, oddColLayerId = Layer.NoLayerId, evenColLayerId = Layer.NoLayerId; if (withLayers) { const string planarLayerName = "PlanarShapesLayer"; const string linearLayerName = "LinearShapesLayer"; const string oddRowsLayerName = "OddRowsLayer"; const string evenRowsLayerName = "EvenRowsLayer"; const string oddColsLayerName = "OddColsLayer"; const string evenColsLayerName = "EvenColsLayer"; // Create Layers Layer planarShapesLayer = new Layer(planarLayerName); planarShapesLayer.Title = "Planar Shapes"; planarShapesLayer.LowerZoomThreshold = 5; planarShapesLayer.UpperZoomThreshold = 750; diagram.Layers.Add(planarShapesLayer); Layer linearShapesLayer = new Layer(linearLayerName); linearShapesLayer.Title = "Linear Shapes"; linearShapesLayer.LowerZoomThreshold = 10; linearShapesLayer.UpperZoomThreshold = 500; diagram.Layers.Add(linearShapesLayer); Layer oddRowsLayer = new Layer(oddRowsLayerName); oddRowsLayer.Title = "Odd Rows"; oddRowsLayer.LowerZoomThreshold = 2; oddRowsLayer.UpperZoomThreshold = 1000; diagram.Layers.Add(oddRowsLayer); Layer evenRowsLayer = new Layer(evenRowsLayerName); evenRowsLayer.Title = "Even Rows"; evenRowsLayer.LowerZoomThreshold = 2; evenRowsLayer.UpperZoomThreshold = 1000; diagram.Layers.Add(evenRowsLayer); Layer oddColsLayer = new Layer(oddColsLayerName); oddColsLayer.Title = "Odd Columns"; oddColsLayer.LowerZoomThreshold = 2; oddColsLayer.UpperZoomThreshold = 1000; diagram.Layers.Add(oddColsLayer); Layer evenColsLayer = new Layer(evenColsLayerName); evenColsLayer.Title = "Even Columns"; evenColsLayer.LowerZoomThreshold = 2; evenColsLayer.UpperZoomThreshold = 1000; diagram.Layers.Add(evenColsLayer); // Assign LayerIds planarLayerId = diagram.Layers.FindLayer(planarLayerName).LayerId; linearLayerId = diagram.Layers.FindLayer(linearLayerName).LayerId; oddRowLayerId = diagram.Layers.FindLayer(oddRowsLayerName).LayerId; evenRowLayerId = diagram.Layers.FindLayer(evenRowsLayerName).LayerId; oddColLayerId = diagram.Layers.FindLayer(oddColsLayerName).LayerId; evenColLayerId = diagram.Layers.FindLayer(evenColsLayerName).LayerId; } Template planarTemplate = null; Template linearTemplate = null; int searchRange = shapeSize / 2; for (int rowIdx = 0; rowIdx < shapesPerRow; ++rowIdx) { int rowLayerId = ((rowIdx + 1) % 2 == 0) ? evenRowLayerId : oddRowLayerId; for (int colIdx = 0; colIdx < shapesPerRow; ++colIdx) { int colLayerId = ((colIdx + 1) % 2 == 0) ? evenColLayerId : oddColLayerId; int shapePosX = shapeSize + colIdx * (lineLength + shapeSize); int shapePosY = shapeSize + rowIdx * (lineLength + shapeSize); planarTemplate = GetNextPlanarTemplate(project, planarTemplate); Shape planarShape = planarTemplate.CreateShape(); // Apply shape specific property values if (planarShape is PictureBase) { ((PictureBase)planarShape).Image = new NamedImage((System.Drawing.Bitmap)Properties.Resources.SamplePicture.Clone(), "Sample Picture"); } if (planarShape is ICaptionedShape) { ((ICaptionedShape)planarShape).SetCaptionText(0, string.Format("{0} / {1}", rowIdx + 1, colIdx + 1)); } planarShape.MoveTo(shapePosX, shapePosY); if (withModels) { project.Repository.Insert(planarShape.ModelObject); ((GenericModelObject)planarShape.ModelObject).IntegerValue = rowIdx; } diagram.Shapes.Add(planarShape, project.Repository.ObtainNewTopZOrder(diagram)); if (withLayers) { diagram.AddShapeToLayers(planarShape, planarLayerId, Layer.ConvertToLayerIds(EnumerationHelper.Enumerate(rowLayerId | colLayerId))); } if (connectShapes) { linearTemplate = GetNextLinearTemplate(project, linearTemplate); if (rowIdx > 0) { Shape lineShape = linearTemplate.CreateShape(); if (planarShape.HasControlPointCapability(topPoint, ControlPointCapabilities.Connect)) { lineShape.Connect(ControlPointId.FirstVertex, planarShape, topPoint); Assert.AreNotEqual(ControlPointId.None, lineShape.IsConnected(ControlPointId.FirstVertex, planarShape)); } Shape otherShape = diagram.Shapes.FindShape(shapePosX, shapePosY - shapeSize, ControlPointCapabilities.None, searchRange, null); if (otherShape != null && otherShape.HasControlPointCapability(bottomPoint, ControlPointCapabilities.Connect)) { lineShape.Connect(ControlPointId.LastVertex, otherShape, bottomPoint); Assert.AreNotEqual(ControlPointId.None, lineShape.IsConnected(ControlPointId.LastVertex, otherShape)); } // Add line shape if at least one connection was established. if (lineShape.IsConnected(ControlPointId.FirstVertex, null) != ControlPointId.None && lineShape.IsConnected(ControlPointId.LastVertex, null) != ControlPointId.None) { diagram.Shapes.Add(lineShape, project.Repository.ObtainNewBottomZOrder(diagram)); if (withLayers) { diagram.AddShapeToLayers(lineShape, linearLayerId); } } } if (colIdx > 0) { Shape lineShape = linearTemplate.CreateShape(); if (planarShape.HasControlPointCapability(leftPoint, ControlPointCapabilities.Connect)) { lineShape.Connect(1, planarShape, leftPoint); Assert.AreNotEqual(ControlPointId.None, lineShape.IsConnected(ControlPointId.FirstVertex, planarShape)); } Shape otherShape = diagram.Shapes.FindShape(shapePosX - shapeSize, shapePosY, ControlPointCapabilities.None, searchRange, null); if (otherShape != null && otherShape.HasControlPointCapability(rightPoint, ControlPointCapabilities.Connect)) { lineShape.Connect(2, otherShape, rightPoint); Assert.AreNotEqual(ControlPointId.None, lineShape.IsConnected(ControlPointId.LastVertex, otherShape)); } // Add line shape if at least one connection was established. if (lineShape.IsConnected(ControlPointId.FirstVertex, null) != ControlPointId.None && lineShape.IsConnected(ControlPointId.LastVertex, null) != ControlPointId.None) { diagram.Shapes.Add(lineShape, project.Repository.ObtainNewBottomZOrder(diagram)); if (withLayers) { diagram.AddShapeToLayers(lineShape, linearLayerId); } } } } } } diagram.Width = (lineLength + shapeSize) * shapesPerRow + 2 * shapeSize; diagram.Height = (lineLength + shapeSize) * shapesPerColumn + 2 * shapeSize; project.Repository.InsertAll(diagram); }
public LayerMouseEventArgs(Layer layer, LayerItem item, MouseEventType eventType, MouseButtonsDg buttons, int clickCount, int wheelDelta, Point position, KeysDg modifiers) : this(layer, item, EnumerationHelper.Enumerate(layer), eventType, buttons, clickCount, wheelDelta, position, modifiers) { }
public LayerMouseEventArgs(Layer layer, LayerItem item, MouseEventArgsDg mouseEventArgs) : this(layer, item, EnumerationHelper.Enumerate(layer), mouseEventArgs.EventType, mouseEventArgs.Buttons, mouseEventArgs.Clicks, mouseEventArgs.WheelDelta, mouseEventArgs.Position, mouseEventArgs.Modifiers) { }
public static void CreateDiagram(Project project, string diagramName, int shapeSize, int shapesPerRow, int shapesPerColumn, bool connectShapes, bool withModels, bool withMappings, bool withLayers) { shapeSize = Math.Max(10, shapeSize); int lineLength = shapeSize / 2; // // Create ModelMappings NumericModelMapping numericModelMapping = null; FormatModelMapping formatModelMapping = null; StyleModelMapping styleModelMapping = null; if (withMappings) { // Create numeric- and format model mappings numericModelMapping = new NumericModelMapping(2, 4, NumericModelMapping.MappingType.FloatInteger, 10, 0); formatModelMapping = new FormatModelMapping(4, 2, FormatModelMapping.MappingType.StringString, "{0}"); // Create style model mapping float range = (shapesPerRow * shapesPerColumn) / 15f; styleModelMapping = new StyleModelMapping(1, 4, StyleModelMapping.MappingType.FloatStyle); for (int i = 0; i < 15; ++i) { IStyle style = null; switch (i) { case 0: style = project.Design.LineStyles.None; break; case 1: style = project.Design.LineStyles.Dotted; break; case 2: style = project.Design.LineStyles.Dashed; break; case 3: style = project.Design.LineStyles.Special1; break; case 4: style = project.Design.LineStyles.Special2; break; case 5: style = project.Design.LineStyles.Normal; break; case 6: style = project.Design.LineStyles.Blue; break; case 7: style = project.Design.LineStyles.Green; break; case 8: style = project.Design.LineStyles.Yellow; break; case 9: style = project.Design.LineStyles.Red; break; case 10: style = project.Design.LineStyles.HighlightDotted; break; case 11: style = project.Design.LineStyles.HighlightDashed; break; case 12: style = project.Design.LineStyles.Highlight; break; case 13: style = project.Design.LineStyles.HighlightThick; break; case 14: style = project.Design.LineStyles.Thick; break; default: style = null; break; } if (style != null) { styleModelMapping.AddValueRange(i * range, style); } } } // // Create model obejct for the planar shape's template IModelObject planarModel = null; if (withModels) { planarModel = project.ModelObjectTypes["Core.GenericModelObject"].CreateInstance(); } // // Create a shape for the planar shape's template Shape planarShape = project.ShapeTypes["RoundedBox"].CreateInstance(); planarShape.Fit(0, 0, shapeSize, shapeSize); // // Create a template for the planar shapes Template planarTemplate = new Template("PlanarShape Template", planarShape); if (withModels) { planarTemplate.Shape.ModelObject = planarModel; if (withMappings) { foreach (ControlPointId id in planarTemplate.Shape.GetControlPointIds(ControlPointCapabilities.Connect)) { planarTemplate.MapTerminal(TerminalId.Generic, id); } planarTemplate.MapProperties(numericModelMapping); planarTemplate.MapProperties(formatModelMapping); planarTemplate.MapProperties(styleModelMapping); } } // // Create a template for the linear shapes Template linearTemplate = null; if (connectShapes) { linearTemplate = new Template("LinearShape Template", project.ShapeTypes["Polyline"].CreateInstance()); } // // Insert the created templates into the repository project.Repository.InsertAll(planarTemplate); if (connectShapes) { project.Repository.InsertAll(linearTemplate); } // // Prepare the connection points ControlPointId leftPoint = withModels ? ControlPointId.Reference : 4; ControlPointId rightPoint = withModels ? ControlPointId.Reference : 5; ControlPointId topPoint = withModels ? ControlPointId.Reference : 2; ControlPointId bottomPoint = withModels ? ControlPointId.Reference : 7; // // Create the diagram Diagram diagram = new Diagram(diagramName); // // Create and add layers int planarLayerId = Layer.NoLayerId, linearLayerId = Layer.NoLayerId, oddRowLayerId = Layer.NoLayerId, evenRowLayerId = Layer.NoLayerId, oddColLayerId = Layer.NoLayerId, evenColLayerId = Layer.NoLayerId; if (withLayers) { const string planarLayerName = "PlanarShapesLayer"; const string linearLayerName = "LinearShapesLayer"; const string oddRowsLayerName = "OddRowsLayer"; const string evenRowsLayerName = "EvenRowsLayer"; const string oddColsLayerName = "OddColsLayer"; const string evenColsLayerName = "EvenColsLayer"; // Create Layers Layer planarShapesLayer = new Layer(planarLayerName); planarShapesLayer.Title = "Planar Shapes"; planarShapesLayer.LowerZoomThreshold = 5; planarShapesLayer.UpperZoomThreshold = 750; diagram.Layers.Add(planarShapesLayer); Layer linearShapesLayer = new Layer(linearLayerName); linearShapesLayer.Title = "Linear Shapes"; linearShapesLayer.LowerZoomThreshold = 10; linearShapesLayer.UpperZoomThreshold = 500; diagram.Layers.Add(linearShapesLayer); Layer oddRowsLayer = new Layer(oddRowsLayerName); oddRowsLayer.Title = "Odd Rows"; oddRowsLayer.LowerZoomThreshold = 2; oddRowsLayer.UpperZoomThreshold = 1000; diagram.Layers.Add(oddRowsLayer); Layer evenRowsLayer = new Layer(evenRowsLayerName); evenRowsLayer.Title = "Even Rows"; evenRowsLayer.LowerZoomThreshold = 2; evenRowsLayer.UpperZoomThreshold = 1000; diagram.Layers.Add(evenRowsLayer); Layer oddColsLayer = new Layer(oddColsLayerName); oddColsLayer.Title = "Odd Columns"; oddColsLayer.LowerZoomThreshold = 2; oddColsLayer.UpperZoomThreshold = 1000; diagram.Layers.Add(oddColsLayer); Layer evenColsLayer = new Layer(evenColsLayerName); evenColsLayer.Title = "Even Columns"; evenColsLayer.LowerZoomThreshold = 2; evenColsLayer.UpperZoomThreshold = 1000; diagram.Layers.Add(evenColsLayer); // Assign LayerIds planarLayerId = diagram.Layers.FindLayer(planarLayerName).LayerId; linearLayerId = diagram.Layers.FindLayer(linearLayerName).LayerId; oddRowLayerId = diagram.Layers.FindLayer(oddRowsLayerName).LayerId; evenRowLayerId = diagram.Layers.FindLayer(evenRowsLayerName).LayerId; oddColLayerId = diagram.Layers.FindLayer(oddColsLayerName).LayerId; evenColLayerId = diagram.Layers.FindLayer(evenColsLayerName).LayerId; } for (int rowIdx = 0; rowIdx < shapesPerColumn; ++rowIdx) { int rowLayerId = ((rowIdx + 1) % 2 == 0) ? evenRowLayerId : oddRowLayerId; for (int colIdx = 0; colIdx < shapesPerRow; ++colIdx) { int colLayerId = ((colIdx + 1) % 2 == 0) ? evenColLayerId : oddColLayerId; int shapePosX = shapeSize + colIdx * (lineLength + shapeSize); int shapePosY = shapeSize + rowIdx * (lineLength + shapeSize); planarShape = planarTemplate.CreateShape(); if (planarShape is ICaptionedShape) { ((ICaptionedShape)planarShape).SetCaptionText(0, string.Format("{0} / {1}", rowIdx + 1, colIdx + 1)); } planarShape.MoveTo(shapePosX, shapePosY); if (withModels) { project.Repository.Insert(planarShape.ModelObject); ((GenericModelObject)planarShape.ModelObject).IntegerValue = rowIdx; } diagram.Shapes.Add(planarShape, project.Repository.ObtainNewTopZOrder(diagram)); if (withLayers) { diagram.AddShapeToLayers(planarShape, planarLayerId, Layer.ConvertToLayerIds(EnumerationHelper.Enumerate(rowLayerId, colLayerId))); } if (connectShapes) { if (rowIdx > 0) { Shape lineShape = linearTemplate.CreateShape(); lineShape.Connect(ControlPointId.FirstVertex, planarShape, topPoint); Debug.Assert(ControlPointId.None != lineShape.IsConnected(ControlPointId.FirstVertex, planarShape)); Shape otherShape = diagram.Shapes.FindShape(shapePosX, shapePosY - (shapeSize + lineLength), ControlPointCapabilities.None, 0, null); Debug.Assert(otherShape != null && otherShape != planarShape); lineShape.Connect(ControlPointId.LastVertex, otherShape, bottomPoint); diagram.Shapes.Add(lineShape, project.Repository.ObtainNewBottomZOrder(diagram)); if (withLayers) { diagram.AddShapeToLayers(lineShape, linearLayerId); } Debug.Assert(ControlPointId.None != lineShape.IsConnected(ControlPointId.LastVertex, otherShape)); } if (colIdx > 0) { Shape lineShape = linearTemplate.CreateShape(); lineShape.Connect(1, planarShape, leftPoint); Debug.Assert(ControlPointId.None != lineShape.IsConnected(ControlPointId.FirstVertex, planarShape)); Shape otherShape = diagram.Shapes.FindShape(shapePosX - (shapeSize + lineLength), shapePosY, ControlPointCapabilities.None, 0, null); Debug.Assert(otherShape != null && otherShape != planarShape); lineShape.Connect(2, otherShape, rightPoint); diagram.Shapes.Add(lineShape, project.Repository.ObtainNewBottomZOrder(diagram)); if (withLayers) { diagram.AddShapeToLayers(lineShape, linearLayerId); } Debug.Assert(ControlPointId.None != lineShape.IsConnected(ControlPointId.LastVertex, otherShape)); } } } } diagram.Width = ((shapeSize + lineLength) * shapesPerRow) + lineLength; diagram.Height = ((shapeSize + lineLength) * shapesPerColumn) + lineLength; project.Repository.InsertAll(diagram); }