MCPcopy Create free account
hub / github.com/SeaOfNodes/Simple / convertToPathData

Function convertToPathData

chapter24/docs/d3-graphviz.js:764–846  ·  view source on GitHub ↗
(originalData, guideData)

Source from the content-addressed store, hash-verified

762 }
763
764 function convertToPathData(originalData, guideData) {
765 if (originalData.tag == 'polygon') {
766 var newData = shallowCopyObject(originalData);
767 newData.tag = 'path';
768 var originalAttributes = originalData.attributes;
769 var newAttributes = shallowCopyObject(originalAttributes);
770 var newPointsString = originalAttributes.points;
771 if (guideData.tag == 'polygon') {
772 var bbox = originalData.bbox;
773 bbox.cx = bbox.x + bbox.width / 2;
774 bbox.cy = bbox.y + bbox.height / 2;
775 var pointsString = originalAttributes.points;
776 var pointStrings = pointsString.split(' ');
777 var normPoints = pointStrings.map(function (p) {
778 var xy = p.split(',');
779 return [xy[0] - bbox.cx, xy[1] - bbox.cy];
780 });
781 var x0 = normPoints[normPoints.length - 1][0];
782 var y0 = normPoints[normPoints.length - 1][1];
783 for (var i = 0; i < normPoints.length; i++, x0 = x1, y0 = y1) {
784 var x1 = normPoints[i][0];
785 var y1 = normPoints[i][1];
786 var dx = x1 - x0;
787 var dy = y1 - y0;
788 if (dy == 0) {
789 continue;
790 } else {
791 var x2 = x0 - y0 * dx / dy;
792 }
793 if (0 <= x2 && x2 < Infinity && (x0 <= x2 && x2 <= x1 || x1 <= x2 && x2 <= x0)) {
794 break;
795 }
796 }
797 var newPointStrings = [[bbox.cx + x2, bbox.cy + 0].join(',')];
798 newPointStrings = newPointStrings.concat(pointStrings.slice(i));
799 newPointStrings = newPointStrings.concat(pointStrings.slice(0, i));
800 newPointsString = newPointStrings.join(' ');
801 }
802 newAttributes['d'] = 'M' + newPointsString + 'z';
803 delete newAttributes.points;
804 newData.attributes = newAttributes;
805 } else /* if (originalData.tag == 'ellipse') */{
806 var newData = shallowCopyObject(originalData);
807 newData.tag = 'path';
808 var originalAttributes = originalData.attributes;
809 var newAttributes = shallowCopyObject(originalAttributes);
810 var cx = originalAttributes.cx;
811 var cy = originalAttributes.cy;
812 var rx = originalAttributes.rx;
813 var ry = originalAttributes.ry;
814 if (guideData.tag == 'polygon') {
815 var bbox = guideData.bbox;
816 bbox.cx = bbox.x + bbox.width / 2;
817 bbox.cy = bbox.y + bbox.height / 2;
818 var p = guideData.attributes.points.split(' ')[0].split(',');
819 var sx = p[0];
820 var sy = p[1];
821 var dx = sx - bbox.cx;

Callers 1

Calls 3

shallowCopyObjectFunction · 0.70
splitMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected