Beispiel #1
0
        public IEnumerable <FilterShape> DuplicateFilterInstancesToShapes(
            IEnumerable <IOutputFilterModuleInstance> sourceInstances,
            int numberOfCopies,
            Point?startPosition = null,
            double horizontalPositionProportion = 0.5
            )
        {
            if (sourceInstances == null)
            {
                return(null);
            }

            Point pos;

            if (startPosition == null)
            {
                pos = new Point();
                int shapesWidth = diagramDisplay.Width - (2 * diagramDisplay.GetDiagramPosition().X);
                pos.X = (int)(shapesWidth * horizontalPositionProportion);
                pos.Y = diagramDisplay.GetDiagramOffset().Y + (diagramDisplay.Height / 4);
            }
            else
            {
                pos = (Point)startPosition;
            }

            List <FilterShape> result = new List <FilterShape>();

            for (int i = 0; i < numberOfCopies; i++)
            {
                foreach (IOutputFilterModuleInstance instance in sourceInstances)
                {
                    FilterShape newShape = _CreateNewFilterInstanceAndShape(instance.TypeId, false, instance.ModuleData);
                    newShape.ModuleDataUpdated();

                    newShape.X = pos.X;
                    newShape.Y = pos.Y;

                    pos.Y += newShape.Height + SHAPE_VERTICAL_SPACING;

                    // save the new shape position in the application data references
                    FilterSetupFormShapePosition position = new FilterSetupFormShapePosition();
                    position.xPositionProportion = (double)newShape.X / _previousDiagramWidth;
                    position.yPosition           = newShape.Y;
                    _applicationData.FilterSetupFormShapePositions[newShape.FilterInstance.InstanceId] = position;

                    result.Add(newShape);
                }
            }

            //assume we made changes since we added shapes
            _changesMade = true;
            return(result);
        }