Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
x649585723
incubator-echarts
提交
66b9fdcf
I
incubator-echarts
项目概览
x649585723
/
incubator-echarts
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
incubator-echarts
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
66b9fdcf
编写于
2月 17, 2014
作者:
K
kener
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化minAngle 0值无效
上级
fade8771
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
54 addition
and
37 deletion
+54
-37
src/chart/pie.js
src/chart/pie.js
+54
-37
未找到文件。
src/chart/pie.js
浏览文件 @
66b9fdcf
...
@@ -109,7 +109,8 @@ define(function(require) {
...
@@ -109,7 +109,8 @@ define(function(require) {
var
data
=
serie
.
data
;
var
data
=
serie
.
data
;
var
legend
=
component
.
legend
;
var
legend
=
component
.
legend
;
var
itemName
;
var
itemName
;
var
totalSelected
=
0
;
// 迭代累计
var
totalSelected
=
0
;
// 迭代累计选中且非0个数
var
totalSelectedValue0
=
0
;
// 迭代累计选中0只个数
var
totalValue
=
0
;
// 迭代累计
var
totalValue
=
0
;
// 迭代累计
var
maxValue
=
Number
.
NEGATIVE_INFINITY
;
var
maxValue
=
Number
.
NEGATIVE_INFINITY
;
...
@@ -122,18 +123,26 @@ define(function(require) {
...
@@ -122,18 +123,26 @@ define(function(require) {
self
.
selectedMap
[
itemName
]
=
true
;
self
.
selectedMap
[
itemName
]
=
true
;
}
}
if
(
self
.
selectedMap
[
itemName
])
{
if
(
self
.
selectedMap
[
itemName
])
{
totalSelected
++
;
if
(
+
data
[
i
].
value
!==
0
)
{
totalSelected
++
;
}
else
{
totalSelectedValue0
++
;
}
totalValue
+=
+
data
[
i
].
value
;
totalValue
+=
+
data
[
i
].
value
;
maxValue
=
Math
.
max
(
maxValue
,
+
data
[
i
].
value
);
maxValue
=
Math
.
max
(
maxValue
,
+
data
[
i
].
value
);
}
}
}
}
var
percent
;
var
percent
=
100
;
var
lastPercent
;
// 相邻细角度优化
var
lastAddRadius
=
0
;
var
clockWise
=
serie
.
clockWise
;
var
clockWise
=
serie
.
clockWise
;
var
startAngle
=
serie
.
startAngle
.
toFixed
(
2
)
-
0
;
var
startAngle
=
serie
.
startAngle
.
toFixed
(
2
)
-
0
;
var
endAngle
;
var
endAngle
;
var
minAngle
=
serie
.
minAngle
||
0.01
;
// #bugfixed
var
minAngle
=
serie
.
minAngle
||
0.01
;
// #bugfixed
var
totalAngle
=
360
-
(
minAngle
*
totalSelected
);
var
totalAngle
=
360
-
(
minAngle
*
totalSelected
)
-
0.01
*
totalSelectedValue0
;
var
defaultColor
;
var
defaultColor
;
var
roseType
=
serie
.
roseType
;
var
roseType
=
serie
.
roseType
;
var
radius
;
var
radius
;
...
@@ -155,16 +164,17 @@ define(function(require) {
...
@@ -155,16 +164,17 @@ define(function(require) {
defaultColor
=
zr
.
getColor
(
i
);
defaultColor
=
zr
.
getColor
(
i
);
}
}
lastPercent
=
percent
;
percent
=
data
[
i
].
value
/
totalValue
;
percent
=
data
[
i
].
value
/
totalValue
;
if
(
roseType
!=
'
area
'
)
{
if
(
roseType
!=
'
area
'
)
{
endAngle
=
clockWise
endAngle
=
clockWise
?
(
startAngle
-
percent
*
totalAngle
-
minAngle
)
?
(
startAngle
-
percent
*
totalAngle
-
(
percent
!==
0
?
minAngle
:
0.01
)
)
:
(
percent
*
totalAngle
+
startAngle
+
minAngle
);
:
(
percent
*
totalAngle
+
startAngle
+
(
percent
!==
0
?
minAngle
:
0.01
)
);
}
}
else
{
else
{
endAngle
=
clockWise
endAngle
=
clockWise
?
(
startAngle
-
totalAngle
/
l
-
minAngle
)
?
(
startAngle
-
360
/
l
)
:
(
totalAngle
/
l
+
startAngle
+
min
Angle
);
:
(
360
/
l
+
start
Angle
);
}
}
endAngle
=
endAngle
.
toFixed
(
2
)
-
0
;
endAngle
=
endAngle
.
toFixed
(
2
)
-
0
;
percent
=
(
percent
*
100
).
toFixed
(
2
);
percent
=
(
percent
*
100
).
toFixed
(
2
);
...
@@ -188,8 +198,26 @@ define(function(require) {
...
@@ -188,8 +198,26 @@ define(function(require) {
startAngle
=
endAngle
;
startAngle
=
endAngle
;
endAngle
=
temp
;
endAngle
=
temp
;
}
}
// 当前小角度需要检查前一个是否也是小角度,如果是得调整长度,不能完全避免,但能大大降低覆盖概率
if
(
i
>
0
&&
percent
<
4
// 约15度
&&
lastPercent
<
4
&&
_needLabel
(
serie
,
data
[
i
],
false
)
&&
self
.
deepQuery
(
[
data
[
i
],
serie
],
'
itemStyle.normal.label.position
'
)
!=
'
center
'
)
{
// 都小就延长,前小后大就缩短
lastAddRadius
+=
(
percent
<
4
?
20
:
-
20
);
}
else
{
lastAddRadius
=
0
;
}
_buildItem
(
_buildItem
(
seriesIndex
,
i
,
percent
,
data
[
i
].
selected
,
seriesIndex
,
i
,
percent
,
lastAddRadius
,
// 相邻最小角度优化
data
[
i
].
selected
,
r0
,
r1
,
r0
,
r1
,
startAngle
,
endAngle
,
defaultColor
startAngle
,
endAngle
,
defaultColor
);
);
...
@@ -203,7 +231,8 @@ define(function(require) {
...
@@ -203,7 +231,8 @@ define(function(require) {
* 构建单个扇形及指标
* 构建单个扇形及指标
*/
*/
function
_buildItem
(
function
_buildItem
(
seriesIndex
,
dataIndex
,
percent
,
isSelected
,
seriesIndex
,
dataIndex
,
percent
,
lastAddRadius
,
isSelected
,
r0
,
r1
,
r0
,
r1
,
startAngle
,
endAngle
,
defaultColor
startAngle
,
endAngle
,
defaultColor
)
{
)
{
...
@@ -221,11 +250,12 @@ define(function(require) {
...
@@ -221,11 +250,12 @@ define(function(require) {
series
[
seriesIndex
].
data
[
dataIndex
].
name
,
series
[
seriesIndex
].
data
[
dataIndex
].
name
,
percent
percent
);
);
sector
.
_lastAddRadius
=
lastAddRadius
;
self
.
shapeList
.
push
(
sector
);
self
.
shapeList
.
push
(
sector
);
// 文本标签,需要显示则会有返回
// 文本标签,需要显示则会有返回
var
label
=
_getLabel
(
var
label
=
_getLabel
(
seriesIndex
,
dataIndex
,
percent
,
seriesIndex
,
dataIndex
,
percent
,
lastAddRadius
,
startAngle
,
endAngle
,
defaultColor
,
startAngle
,
endAngle
,
defaultColor
,
false
false
);
);
...
@@ -236,7 +266,7 @@ define(function(require) {
...
@@ -236,7 +266,7 @@ define(function(require) {
// 文本标签视觉引导线,需要显示则会有返回
// 文本标签视觉引导线,需要显示则会有返回
var
labelLine
=
_getLabelLine
(
var
labelLine
=
_getLabelLine
(
seriesIndex
,
dataIndex
,
seriesIndex
,
dataIndex
,
lastAddRadius
,
r0
,
r1
,
r0
,
r1
,
startAngle
,
endAngle
,
defaultColor
,
startAngle
,
endAngle
,
defaultColor
,
false
false
...
@@ -340,7 +370,7 @@ define(function(require) {
...
@@ -340,7 +370,7 @@ define(function(require) {
* 需要显示则会有返回构建好的shape,否则返回undefined
* 需要显示则会有返回构建好的shape,否则返回undefined
*/
*/
function
_getLabel
(
function
_getLabel
(
seriesIndex
,
dataIndex
,
percent
,
seriesIndex
,
dataIndex
,
percent
,
lastAddRadius
,
startAngle
,
endAngle
,
defaultColor
,
startAngle
,
endAngle
,
defaultColor
,
isEmphasis
isEmphasis
)
{
)
{
...
@@ -385,7 +415,7 @@ define(function(require) {
...
@@ -385,7 +415,7 @@ define(function(require) {
}
}
else
if
(
labelControl
.
position
==
'
inner
'
){
else
if
(
labelControl
.
position
==
'
inner
'
){
// 内部显示
// 内部显示
radius
=
(
radius
[
0
]
+
radius
[
1
])
/
2
;
radius
=
(
radius
[
0
]
+
radius
[
1
])
/
2
+
lastAddRadius
;
x
=
Math
.
round
(
x
=
Math
.
round
(
centerX
+
radius
*
zrMath
.
cos
(
midAngle
,
true
)
centerX
+
radius
*
zrMath
.
cos
(
midAngle
,
true
)
);
);
...
@@ -400,33 +430,19 @@ define(function(require) {
...
@@ -400,33 +430,19 @@ define(function(require) {
// 外部显示,默认 labelControl.position == 'outer')
// 外部显示,默认 labelControl.position == 'outer')
radius
=
radius
[
1
]
radius
=
radius
[
1
]
-
(
-
itemStyle
[
status
].
labelLine
.
length
)
-
(
-
itemStyle
[
status
].
labelLine
.
length
)
-
(
-
textStyle
.
fontSize
);
//- (-textStyle.fontSize)
+
lastAddRadius
;
x
=
centerX
+
radius
*
zrMath
.
cos
(
midAngle
,
true
);
x
=
centerX
+
radius
*
zrMath
.
cos
(
midAngle
,
true
);
y
=
centerY
-
radius
*
zrMath
.
sin
(
midAngle
,
true
);
y
=
centerY
-
radius
*
zrMath
.
sin
(
midAngle
,
true
);
textAlign
=
(
midAngle
>=
90
&&
midAngle
<=
270
)
textAlign
=
(
midAngle
>=
90
&&
midAngle
<=
270
)
?
'
right
'
:
'
left
'
;
?
'
right
'
:
'
left
'
;
}
}
//检查前个是否也是小角度,如果是得调整长度,不能完全避免,但能大大降低覆盖概率
if
(
labelControl
.
position
!=
'
center
'
&&
dataIndex
>
0
&&
percent
<
30
)
{
var
preData
=
serie
.
data
[
dataIndex
-
1
];
var
prePercent
=
preData
.
value
*
percent
/
data
.
value
;
if
(
prePercent
<
4
)
{
// 都小就延长,前小后大就缩短
radius
=
preData
.
__labelRadius
+
(
percent
<
4
?
20
:
-
20
);
x
=
centerX
+
radius
*
zrMath
.
cos
(
midAngle
,
true
);
y
=
centerY
-
radius
*
zrMath
.
sin
(
midAngle
,
true
);
}
}
if
(
labelControl
.
position
!=
'
center
'
if
(
labelControl
.
position
!=
'
center
'
&&
labelControl
.
position
!=
'
inner
'
&&
labelControl
.
position
!=
'
inner
'
)
{
)
{
x
+=
textAlign
==
'
left
'
?
20
:
-
20
;
x
+=
textAlign
==
'
left
'
?
20
:
-
20
;
}
}
data
.
__labelRadius
=
radius
;
data
.
__labelX
=
x
-
(
textAlign
==
'
left
'
?
5
:
-
5
);
data
.
__labelX
=
x
-
(
textAlign
==
'
left
'
?
5
:
-
5
);
data
.
__labelY
=
y
;
data
.
__labelY
=
y
;
...
@@ -495,7 +511,7 @@ define(function(require) {
...
@@ -495,7 +511,7 @@ define(function(require) {
* 需要显示则会有返回构建好的shape,否则返回undefined
* 需要显示则会有返回构建好的shape,否则返回undefined
*/
*/
function
_getLabelLine
(
function
_getLabelLine
(
seriesIndex
,
dataIndex
,
seriesIndex
,
dataIndex
,
lastAddRadius
,
r0
,
r1
,
r0
,
r1
,
startAngle
,
endAngle
,
defaultColor
,
startAngle
,
endAngle
,
defaultColor
,
isEmphasis
isEmphasis
...
@@ -526,10 +542,9 @@ define(function(require) {
...
@@ -526,10 +542,9 @@ define(function(require) {
// 视觉引导线起点半径
// 视觉引导线起点半径
var
midRadius
=
r1
;
var
midRadius
=
r1
;
// 视觉引导线终点半径
// 视觉引导线终点半径
var
maxRadius
=
data
.
__labelRadius
var
maxRadius
=
self
.
parseRadius
(
serie
.
radius
)[
1
]
?
data
.
__labelRadius
-
(
-
labelLineControl
.
length
)
:
self
.
parseRadius
(
serie
.
radius
)[
1
]
+
lastAddRadius
;
-
(
-
labelLineControl
.
length
);
var
midAngle
=
((
endAngle
+
startAngle
)
/
2
)
%
360
;
// 角度中值
var
midAngle
=
((
endAngle
+
startAngle
)
/
2
)
%
360
;
// 角度中值
var
cosValue
=
zrMath
.
cos
(
midAngle
,
true
);
var
cosValue
=
zrMath
.
cos
(
midAngle
,
true
);
var
sinValue
=
zrMath
.
sin
(
midAngle
,
true
);
var
sinValue
=
zrMath
.
sin
(
midAngle
,
true
);
...
@@ -1100,6 +1115,7 @@ define(function(require) {
...
@@ -1100,6 +1115,7 @@ define(function(require) {
var
seriesIndex
=
ecData
.
get
(
shape
,
'
seriesIndex
'
);
var
seriesIndex
=
ecData
.
get
(
shape
,
'
seriesIndex
'
);
var
dataIndex
=
ecData
.
get
(
shape
,
'
dataIndex
'
);
var
dataIndex
=
ecData
.
get
(
shape
,
'
dataIndex
'
);
var
percent
=
ecData
.
get
(
shape
,
'
special
'
);
var
percent
=
ecData
.
get
(
shape
,
'
special
'
);
var
lastAddRadius
=
shape
.
_lastAddRadius
;
var
startAngle
=
shape
.
style
.
startAngle
;
var
startAngle
=
shape
.
style
.
startAngle
;
var
endAngle
=
shape
.
style
.
endAngle
;
var
endAngle
=
shape
.
style
.
endAngle
;
...
@@ -1107,16 +1123,17 @@ define(function(require) {
...
@@ -1107,16 +1123,17 @@ define(function(require) {
// 文本标签,需要显示则会有返回
// 文本标签,需要显示则会有返回
var
label
=
_getLabel
(
var
label
=
_getLabel
(
seriesIndex
,
dataIndex
,
percent
,
seriesIndex
,
dataIndex
,
percent
,
lastAddRadius
,
startAngle
,
endAngle
,
defaultColor
,
startAngle
,
endAngle
,
defaultColor
,
true
true
);
);
if
(
label
)
{
if
(
label
)
{
zr
.
addHoverShape
(
label
);
zr
.
addHoverShape
(
label
);
}
}
// 文本标签视觉引导线,需要显示则会有返回
// 文本标签视觉引导线,需要显示则会有返回
var
labelLine
=
_getLabelLine
(
var
labelLine
=
_getLabelLine
(
seriesIndex
,
dataIndex
,
seriesIndex
,
dataIndex
,
lastAddRadius
,
shape
.
style
.
r0
,
shape
.
style
.
r
,
shape
.
style
.
r0
,
shape
.
style
.
r
,
startAngle
,
endAngle
,
defaultColor
,
startAngle
,
endAngle
,
defaultColor
,
true
true
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录