Exemple #1
0
        protected override void OnRender(DrawingContext drawingContext)
        {
            refreshOfffsetLines();
            var _itemBrush = new SolidColorBrush(Color.FromArgb(128, 255, 64, 64));
            var _itemPen   = new Pen(Brushes.DarkRed, 1.0);
            var _cutPen    = new Pen(Brushes.Blue, 2.0);

            var itemPoints = TransformedShapeDefinition.ToArray();

            var geometry = CreatePathFigure(itemPoints);

            drawingContext.DrawGeometry(_itemBrush, _itemPen, geometry);

            var offsetLines    = OffsetLines.ToArray();
            var offsetGeometry = CreatePathFigure(offsetLines);

            drawingContext.DrawGeometry(null, _cutPen, offsetGeometry);
        }
Exemple #2
0
        private IEnumerable <Point4Dmm> templatedCutPoints()
        {
            //find top/bottom templates
            var definitionPoints = TransformedShapeDefinition.ToArray();

            definitionPoints = addHorizontalKerf(definitionPoints).ToArray();

            double minHorizontalCoord, maxHorizontalCoord, minVerticalCoord;
            int    minHorizontalIndex, maxHorizontalIndex, minVerticalIndex;

            findBoxPoints(definitionPoints, out minHorizontalCoord, out maxHorizontalCoord, out minVerticalCoord, out minHorizontalIndex, out maxHorizontalIndex, out minVerticalIndex);

            var templateMinMax = new List <Point4Dmm>();
            var templateMaxMin = new List <Point4Dmm>();
            var isMinMax       = true;

            for (var i = minHorizontalIndex; i < minHorizontalIndex + definitionPoints.Length; ++i)
            {
                var pointIndex = i % definitionPoints.Length;
                var point      = definitionPoints[pointIndex];

                if (isMinMax)
                {
                    //first template points
                    templateMinMax.Add(point);
                }

                if (pointIndex == maxHorizontalIndex)
                {
                    isMinMax = false;
                }

                if (!isMinMax)
                {
                    //second template points
                    templateMaxMin.Add(point);
                }
            }

            //distinguish which template is top, and which bottom
            var isMinMaxTop = minHorizontalIndex > minVerticalIndex && minVerticalIndex < maxHorizontalIndex;

            if (minHorizontalIndex == minVerticalIndex || maxHorizontalIndex == minVerticalIndex)
            {
                throw new NotImplementedException("Degenerated shape, probably not good for templated cut");
            }


            templateMaxMin.Reverse();// the template was drawn in the opposite direction

            var topTemplate    = isMinMaxTop ? templateMinMax : templateMaxMin;
            var bottomTemplate = isMinMaxTop ? templateMaxMin : templateMinMax;

            //define template scaffold points
            var startPoint = topTemplate.First();
            var endPoint   = topTemplate.Last();

            var margin     = 30;
            var marginTop  = 55;
            var syncMargin = 5;
            var topLineC2  = minVerticalCoord - marginTop; //TODO load from shape settings
            var entryC1    = minHorizontalCoord - margin;  //TODO load from shape settings
            var finishC1   = maxHorizontalCoord + margin;  //TODO load from shape settings

            var entryScaffoldPoint      = new Point4Dmm(entryC1, startPoint.V, entryC1, startPoint.Y);
            var syncEntryScaffoldPoint  = new Point4Dmm(startPoint.U - syncMargin, startPoint.V, startPoint.X - syncMargin, startPoint.Y);
            var aboveEntryScaffoldPoint = new Point4Dmm(entryC1, topLineC2, entryC1, topLineC2);

            var finishScaffoldPoint      = new Point4Dmm(finishC1, endPoint.V, finishC1, endPoint.Y);
            var syncFinishScaffoldPoint  = new Point4Dmm(endPoint.U + syncMargin, endPoint.V, endPoint.X + syncMargin, endPoint.Y);
            var aboveFinishScaffoldPoint = new Point4Dmm(finishC1, topLineC2, finishC1, topLineC2);

            //construct the cut
            var points = new List <Point4Dmm>();

            //bottom template first
            points.Add(entryScaffoldPoint);
            points.Add(syncEntryScaffoldPoint);
            points.AddRange(bottomTemplate);
            points.Add(syncFinishScaffoldPoint);
            points.Add(finishScaffoldPoint);
            points.Add(aboveFinishScaffoldPoint);
            points.Add(aboveEntryScaffoldPoint);
            points.Add(entryScaffoldPoint);
            points.Add(syncEntryScaffoldPoint);

            //top template cut
            points.AddRange(topTemplate);
            points.Add(syncFinishScaffoldPoint);
            points.Add(finishScaffoldPoint);
            points.Add(aboveFinishScaffoldPoint);
            points.Add(aboveEntryScaffoldPoint);
            points.Add(entryScaffoldPoint);

            //entry point at the end is implicit (shape is closed)
            return(points);
        }