@fusioncharts/features
Version:
FusionCharts JavaScript charting framework
1 lines • 4.87 kB
JavaScript
;var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.default=void 0;var _inheritsLoose2=_interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _lib=require("@fusioncharts/core/src/lib");var _annotationShape=_interopRequireDefault(require("./annotation-shape"));var STRAIGHT_ANGLE_DEGREES=180,FULL_ANGLE_DEGREES=360,DEFAULT_RADIUS_INNER=0,DEFAULT_ANGLE_START=0,DEFAULT_ANGLE_END=360,DEFAULT_PAPER_WIDTH=700,DEFAULT_PAPER_HEIGHT=350,RING_PATH="ringpath",ELLIPSE="ellipse",isPerfectCircle=function isPerfectCircle(config){return config.startAngle===DEFAULT_ANGLE_START&&config.endAngle===DEFAULT_ANGLE_END},circleHasHole=function circleHasHole(config){return config.innerRadius>0||config.innerYRadius>0};function toRadian(degrees){return degrees*(Math.PI/STRAIGHT_ANGLE_DEGREES)}var CircleAnnotation=function(_AnnotationShape){function CircleAnnotation(){return _AnnotationShape.apply(this,arguments)||this}(0,_inheritsLoose2.default)(CircleAnnotation,_AnnotationShape);var _proto=CircleAnnotation.prototype;_proto.getName=function getName(){return"circle"};_proto.configureAttributes=function configureAttributes(rawConfig){if(rawConfig===void 0){rawConfig={}}_AnnotationShape.prototype.configureAttributes.call(this,rawConfig);var circle=this,shapeConfig=circle.rawConfig,chart=circle.getFromEnv("chart"),paperWidth=+chart.getFromEnv("chartHeight")||DEFAULT_PAPER_WIDTH,paperHeight=+chart.getFromEnv("chartWidth")||DEFAULT_PAPER_HEIGHT;circle.config.radius=shapeConfig.radius;circle.config.xRadius=(0,_lib.pluckNumber)(parseFloat(shapeConfig.radius),parseFloat(shapeConfig.xRadius),Math.sqrt(Math.max(paperWidth,paperHeight)));circle.config.yRadius=(0,_lib.pluckNumber)(parseFloat(shapeConfig.yRadius),circle.config.xRadius);circle.config.startAngle=(0,_lib.pluckNumber)(parseFloat(shapeConfig.startAngle),DEFAULT_ANGLE_START);circle.config.endAngle=(0,_lib.pluckNumber)(parseFloat(shapeConfig.endAngle),DEFAULT_ANGLE_END);circle.config.innerRadius=(0,_lib.pluckNumber)(parseFloat(shapeConfig.innerRadius),DEFAULT_RADIUS_INNER);circle.config.innerYRadius=(0,_lib.pluckNumber)(parseFloat(shapeConfig.innerYRadius),circle.config.innerRadius,DEFAULT_RADIUS_INNER);if(circle.config.type==="arc"){circle.config.elementType=RING_PATH}else{if(isPerfectCircle(circle.config)&&!circleHasHole(circle.config)){circle.config.elementType=ELLIPSE}else{circle.config.elementType=RING_PATH}}};_proto.updateAttr=function updateAttr(){var circle=this,config=this.config,attr=config.calculatedAttrs,attrs,chart=circle.getFromEnv("chart"),chartHeight=+chart.getFromEnv("chartHeight"),chartWidth=+chart.getFromEnv("chartWidth"),xRadius=circle.getScaledVal(config.xRadius),yRadius=circle.getScaledVal(config.yRadius),innerRadius=circle.getScaledVal(config.innerRadius),innerYRadius=circle.getScaledVal(config.innerYRadius),pathArr;if(!(0,_lib.pluck)(config.radius)){config.radius=chartWidth<chartHeight?circle.getScaledVal(chartWidth):circle.getScaledVal(chartHeight);config.radius*=.3;if(innerRadius>config.radius){innerRadius+=config.radius;config.radius=innerRadius-config.radius;innerRadius=innerRadius-config.radius}xRadius=yRadius=config.radius;innerYRadius=innerRadius}switch(config.elementType){case"ringpath":pathArr=[(0,_lib.pluckNumber)(attr.x,circle.getScaledVal(config.x,true)),(0,_lib.pluckNumber)(attr.y,circle.getScaledVal(config.y,false)),xRadius,innerRadius,toRadian(FULL_ANGLE_DEGREES-config.endAngle),toRadian(FULL_ANGLE_DEGREES-config.startAngle),yRadius,innerYRadius];attrs={ringpath:pathArr};break;default:attrs={cx:(0,_lib.pluckNumber)(attr.x,circle.getScaledVal(config.x,true)),cy:(0,_lib.pluckNumber)(attr.y,circle.getScaledVal(config.y,false))}}circle._setConfig("attr",attrs)};_proto._getAnnotationAttrs=function _getAnnotationAttrs(){var circle=this,config=circle.config,attr=circle.config.attr||{},x=config.x,y=config.y,xRadius=circle.getScaledVal(config.xRadius),yRadius=circle.getScaledVal(config.yRadius),pathArr;if(!config.xRadius){xRadius=0}if(!config.yRadius){yRadius=0}attr.fill=config.color;attr.stroke=config.borderColor;attr["stroke-width"]=config.borderThickness;attr["stroke-dasharray"]=config.dashArrayStr;switch(circle.config.elementType){case RING_PATH:pathArr=[circle.getScaledVal(x,true),circle.getScaledVal(y,false),xRadius,circle.getScaledVal(config.innerRadius),toRadian(FULL_ANGLE_DEGREES-config.endAngle),toRadian(FULL_ANGLE_DEGREES-config.startAngle),yRadius,circle.getScaledVal(config.innerYRadius)];attr.ringpath=attr.ringpath||pathArr;break;default:attr.rx=xRadius;attr.ry=yRadius;attr.cx=typeof attr.cx==="undefined"?circle.getScaledVal(x,true):attr.cx;attr.cy=typeof attr.cy==="undefined"?circle.getScaledVal(y,false):attr.cy}return attr};return CircleAnnotation}(_annotationShape.default);var _default=exports.default=CircleAnnotation;