Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
殷洪(管理员)
/
raphael
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Registry
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
7524b9fe
authored
Dec 24, 2009
by
Dmitry Baranovskiy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor getLength & getPointAtLength again
parent
622bf9ae
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
84 additions
and
86 deletions
+84
-86
raphael-min.js
+0
-0
raphael.js
+84
-86
No files found.
raphael-min.js
View file @
7524b9fe
This source diff could not be displayed because it is too large. You can
view the blob
instead.
raphael.js
View file @
7524b9fe
...
...
@@ -44,7 +44,6 @@ window.Raphael = (function () {
math
=
Math
,
mmax
=
math
.
max
,
mmin
=
math
.
min
,
abs
=
math
.
abs
,
nu
=
"number"
,
toString
=
"toString"
,
objectToString
=
Object
[
proto
][
toString
],
...
...
@@ -326,7 +325,7 @@ window.Raphael = (function () {
data
[
toString
]
=
R
.
_path2string
;
return
data
;
});
R
.
findDotsAtSegment
=
cacher
(
function
(
p1x
,
p1y
,
c1x
,
c1y
,
c2x
,
c2y
,
p2x
,
p2y
,
t
)
{
R
.
findDotsAtSegment
=
function
(
p1x
,
p1y
,
c1x
,
c1y
,
c2x
,
c2y
,
p2x
,
p2y
,
t
)
{
var
t1
=
1
-
t
,
x
=
pow
(
t1
,
3
)
*
p1x
+
pow
(
t1
,
2
)
*
3
*
t
*
c1x
+
t1
*
3
*
t
*
t
*
c2x
+
pow
(
t
,
3
)
*
p2x
,
y
=
pow
(
t1
,
3
)
*
p1y
+
pow
(
t1
,
2
)
*
3
*
t
*
c1y
+
t1
*
3
*
t
*
t
*
c2y
+
pow
(
t
,
3
)
*
p2y
,
...
...
@@ -337,9 +336,10 @@ window.Raphael = (function () {
ax
=
(
1
-
t
)
*
p1x
+
t
*
c1x
,
ay
=
(
1
-
t
)
*
p1y
+
t
*
c1y
,
cx
=
(
1
-
t
)
*
c2x
+
t
*
p2x
,
cy
=
(
1
-
t
)
*
c2y
+
t
*
p2y
;
return
{
x
:
x
,
y
:
y
,
m
:
{
x
:
mx
,
y
:
my
},
n
:
{
x
:
nx
,
y
:
ny
},
start
:
{
x
:
ax
,
y
:
ay
},
end
:
{
x
:
cx
,
y
:
cy
}};
});
cy
=
(
1
-
t
)
*
c2y
+
t
*
p2y
,
alpha
=
(
90
-
math
.
atan
((
mx
-
nx
)
/
(
my
-
ny
))
*
180
/
math
.
PI
)
%
360
;
return
{
x
:
x
,
y
:
y
,
m
:
{
x
:
mx
,
y
:
my
},
n
:
{
x
:
nx
,
y
:
ny
},
start
:
{
x
:
ax
,
y
:
ay
},
end
:
{
x
:
cx
,
y
:
cy
},
alpha
:
alpha
};
};
var
pathDimensions
=
cacher
(
function
(
path
)
{
if
(
!
path
)
{
return
{
x
:
0
,
y
:
0
,
width
:
0
,
height
:
0
};
...
...
@@ -572,12 +572,12 @@ window.Raphael = (function () {
sin
=
math
.
sin
(
PI
/
180
*
angle
),
x
=
(
x1
-
x2
)
/
2
,
y
=
(
y1
-
y2
)
/
2
;
rx
=
mmax
(
rx
,
abs
(
x
));
ry
=
mmax
(
ry
,
abs
(
y
));
rx
=
mmax
(
rx
,
math
.
abs
(
x
));
ry
=
mmax
(
ry
,
math
.
abs
(
y
));
var
rx2
=
rx
*
rx
,
ry2
=
ry
*
ry
,
k
=
(
large_arc_flag
==
sweep_flag
?
-
1
:
1
)
*
math
.
sqrt
(
abs
((
rx2
*
ry2
-
rx2
*
y
*
y
-
ry2
*
x
*
x
)
/
(
rx2
*
y
*
y
+
ry2
*
x
*
x
))),
math
.
sqrt
(
math
.
abs
((
rx2
*
ry2
-
rx2
*
y
*
y
-
ry2
*
x
*
x
)
/
(
rx2
*
y
*
y
+
ry2
*
x
*
x
))),
cx
=
k
*
rx
*
y
/
ry
+
(
x1
+
x2
)
/
2
,
cy
=
k
*
-
ry
*
x
/
rx
+
(
y1
+
y2
)
/
2
,
f1
=
math
.
asin
(((
y1
-
cy
)
/
ry
).
toFixed
(
7
)),
...
...
@@ -600,7 +600,7 @@ window.Raphael = (function () {
cy
=
recursive
[
3
];
}
var
df
=
f2
-
f1
;
if
(
abs
(
df
)
>
_120
)
{
if
(
math
.
abs
(
df
)
>
_120
)
{
var
f2old
=
f2
,
x2old
=
x2
,
y2old
=
y2
;
...
...
@@ -650,8 +650,8 @@ window.Raphael = (function () {
y
=
[
p1y
,
p2y
],
x
=
[
p1x
,
p2x
],
dot
;
abs
(
t1
)
>
1
e12
&&
(
t1
=
.
5
);
abs
(
t2
)
>
1
e12
&&
(
t2
=
.
5
);
math
.
abs
(
t1
)
>
1
e12
&&
(
t1
=
.
5
);
math
.
abs
(
t2
)
>
1
e12
&&
(
t2
=
.
5
);
if
(
t1
>
0
&&
t1
<
1
)
{
dot
=
findDotAtSegment
(
p1x
,
p1y
,
c1x
,
c1y
,
c2x
,
c2y
,
p2x
,
p2y
,
t1
);
x
[
push
](
dot
.
x
);
...
...
@@ -667,8 +667,8 @@ window.Raphael = (function () {
c
=
p1y
-
c1y
;
t1
=
(
-
b
+
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
2
/
a
;
t2
=
(
-
b
-
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
2
/
a
;
abs
(
t1
)
>
1
e12
&&
(
t1
=
.
5
);
abs
(
t2
)
>
1
e12
&&
(
t2
=
.
5
);
math
.
abs
(
t1
)
>
1
e12
&&
(
t1
=
.
5
);
math
.
abs
(
t2
)
>
1
e12
&&
(
t2
=
.
5
);
if
(
t1
>
0
&&
t1
<
1
)
{
dot
=
findDotAtSegment
(
p1x
,
p1y
,
c1x
,
c1y
,
c2x
,
c2y
,
p2x
,
p2y
,
t1
);
x
[
push
](
dot
.
x
);
...
...
@@ -973,7 +973,7 @@ window.Raphael = (function () {
return
null
;
}
var
vector
=
[
0
,
0
,
math
.
cos
(
angle
*
math
.
PI
/
180
),
math
.
sin
(
angle
*
math
.
PI
/
180
)],
max
=
1
/
(
mmax
(
abs
(
vector
[
2
]),
abs
(
vector
[
3
]))
||
1
);
max
=
1
/
(
mmax
(
math
.
abs
(
vector
[
2
]),
math
.
abs
(
vector
[
3
]))
||
1
);
vector
[
2
]
*=
max
;
vector
[
3
]
*=
max
;
if
(
vector
[
2
]
<
0
)
{
...
...
@@ -1498,19 +1498,19 @@ window.Raphael = (function () {
insertbefore
(
this
,
element
,
this
.
paper
);
return
this
;
};
Element
[
proto
].
getTotalLength
=
function
()
{
if
(
this
.
type
!=
"path"
)
{
return
-
1
;
}
return
this
.
node
.
getTotalLength
();
};
Element
[
proto
].
getPointAtLength
=
function
(
length
)
{
if
(
this
.
type
!=
"path"
)
{
return
-
1
;
}
var
point
=
this
.
node
.
getPointAtLength
(
length
);
return
{
x
:
point
.
x
,
y
:
point
.
y
};
};
//
Element[proto].getTotalLength = function () {
//
if (this.type != "path") {
//
return -1;
//
}
//
return this.node.getTotalLength();
//
};
//
Element[proto].getPointAtLength = function (length) {
//
if (this.type != "path") {
//
return -1;
//
}
//
var point = this.node.getPointAtLength(length);
//
return {x: point.x, y: point.y};
//
};
var
theCircle
=
function
(
svg
,
x
,
y
,
r
)
{
x
=
round
(
x
);
y
=
round
(
y
);
...
...
@@ -1657,16 +1657,6 @@ window.Raphael = (function () {
res
[
push
](
r
);
}
return
res
[
join
](
S
);
},
segmentLength
=
function
(
p1x
,
p1y
,
c1x
,
c1y
,
c2x
,
c2y
,
p2x
,
p2y
)
{
var
old
=
{
x
:
0
,
y
:
0
},
len
=
0
;
for
(
var
i
=
0
;
i
<
1.01
;
i
+=
.
01
)
{
var
dot
=
findDotAtSegment
(
p1x
,
p1y
,
c1x
,
c1y
,
c2x
,
c2y
,
p2x
,
p2y
,
i
);
i
&&
(
len
+=
math
.
sqrt
(
pow
(
old
.
x
-
dot
.
x
,
2
)
+
pow
(
old
.
y
-
dot
.
y
,
2
)));
old
=
dot
;
}
return
len
;
};
R
[
toString
]
=
function
()
{
...
...
@@ -2225,33 +2215,6 @@ window.Raphael = (function () {
insertbefore
(
this
,
element
,
this
.
paper
);
return
this
;
};
var
getLengthFactory
=
function
(
istotal
)
{
return
function
(
length
)
{
if
(
this
.
type
!=
"path"
)
{
return
-
1
;
}
var
path
=
path2curve
(
this
.
attrs
.
path
),
x
,
y
,
p
,
l
,
len
=
0
;
for
(
var
i
=
0
,
ii
=
path
.
length
;
i
<
ii
;
i
++
)
{
p
=
path
[
i
];
if
(
p
[
0
]
==
"M"
)
{
x
=
+
p
[
1
];
y
=
+
p
[
2
];
}
else
{
l
=
segmentLength
(
x
,
y
,
p
[
1
],
p
[
2
],
p
[
3
],
p
[
4
],
p
[
5
],
p
[
6
]);
if
(
!
istotal
&&
len
+
l
>
length
)
{
return
findDotAtSegment
(
x
,
y
,
p
[
1
],
p
[
2
],
p
[
3
],
p
[
4
],
p
[
5
],
p
[
6
],
(
length
-
len
)
/
l
);
}
len
+=
l
;
x
=
+
p
[
5
];
y
=
+
p
[
6
];
}
}
return
istotal
?
len
:
{
x
:
x
,
y
:
y
};
};
};
Element
[
proto
].
getTotalLength
=
getLengthFactory
(
1
);
Element
[
proto
].
getPointAtLength
=
getLengthFactory
();
var
theCircle
=
function
(
vml
,
x
,
y
,
r
)
{
var
g
=
createNode
(
"group"
),
...
...
@@ -2552,25 +2515,23 @@ window.Raphael = (function () {
var
bb
=
this
.
getBBox
(),
rcx
=
bb
.
x
+
bb
.
width
/
2
,
rcy
=
bb
.
y
+
bb
.
height
/
2
,
kx
=
abs
(
x
/
this
.
_
.
sx
)
,
ky
=
abs
(
y
/
this
.
_
.
sy
)
;
kx
=
x
/
this
.
_
.
sx
,
ky
=
y
/
this
.
_
.
sy
;
cx
=
(
+
cx
||
cx
==
0
)
?
cx
:
rcx
;
cy
=
(
+
cy
||
cy
==
0
)
?
cy
:
rcy
;
var
dirx
=
~~
(
x
/
abs
(
x
)),
diry
=
~~
(
y
/
abs
(
y
)),
dkx
=
kx
*
dirx
,
dky
=
ky
*
diry
,
var
dirx
=
~~
(
x
/
math
.
abs
(
x
)),
diry
=
~~
(
y
/
math
.
abs
(
y
)),
s
=
this
.
node
.
style
,
ncx
=
cx
-
abs
(
rcx
-
cx
)
*
d
kx
,
ncy
=
cy
-
abs
(
rcy
-
cy
)
*
d
ky
;
ncx
=
cx
+
(
rcx
-
cx
)
*
kx
,
ncy
=
cy
+
(
rcy
-
cy
)
*
ky
;
switch
(
this
.
type
)
{
case
"rect"
:
case
"image"
:
var
neww
=
a
.
width
*
kx
,
newh
=
a
.
height
*
ky
;
var
neww
=
a
.
width
*
dirx
*
kx
,
hewh
=
a
.
height
*
diry
*
ky
;
this
.
attr
({
height
:
newh
,
r
:
a
.
r
*
mmin
(
kx
,
ky
),
r
:
a
.
r
*
mmin
(
dirx
*
kx
,
diry
*
ky
),
width
:
neww
,
x
:
ncx
-
neww
/
2
,
y
:
ncy
-
newh
/
2
...
...
@@ -2579,9 +2540,9 @@ window.Raphael = (function () {
case
"circle"
:
case
"ellipse"
:
this
.
attr
({
rx
:
a
.
rx
*
kx
,
ry
:
a
.
ry
*
ky
,
r
:
a
.
r
*
mmin
(
kx
,
ky
),
rx
:
a
.
rx
*
dirx
*
kx
,
ry
:
a
.
ry
*
diry
*
ky
,
r
:
a
.
r
*
mmin
(
dirx
*
kx
,
diry
*
ky
),
cx
:
ncx
,
cy
:
ncy
});
...
...
@@ -2599,22 +2560,22 @@ window.Raphael = (function () {
skip
=
false
;
}
if
(
P0
==
"A"
)
{
p
[
path
[
i
][
length
]
-
2
]
=
abs
(
p
[
path
[
i
][
length
]
-
2
])
*
d
kx
;
p
[
path
[
i
][
length
]
-
1
]
=
abs
(
p
[
path
[
i
][
length
]
-
1
])
*
d
ky
;
p
[
1
]
*=
kx
;
p
[
2
]
*=
ky
;
p
[
5
]
=
+
(
dirx
+
diry
?
!
+
p
[
4
]
:
!!+
p
[
4
]);
p
[
path
[
i
][
length
]
-
2
]
*=
kx
;
p
[
path
[
i
][
length
]
-
1
]
*=
ky
;
p
[
1
]
*=
dirx
*
kx
;
p
[
2
]
*=
diry
*
ky
;
p
[
5
]
=
+
(
dirx
+
diry
?
!
!+
p
[
5
]
:
!+
p
[
5
]);
}
else
if
(
P0
==
"H"
)
{
for
(
j
=
1
,
jj
=
p
[
length
];
j
<
jj
;
j
++
)
{
p
[
j
]
=
abs
(
p
[
j
])
*
d
kx
;
p
[
j
]
*=
kx
;
}
}
else
if
(
P0
==
"V"
)
{
for
(
j
=
1
,
jj
=
p
[
length
];
j
<
jj
;
j
++
)
{
p
[
j
]
=
abs
(
p
[
j
])
*
d
ky
;
p
[
j
]
*=
ky
;
}
}
else
{
for
(
j
=
1
,
jj
=
p
[
length
];
j
<
jj
;
j
++
)
{
p
[
j
]
=
abs
(
p
[
j
])
*
(
(
j
%
2
)
?
dkx
:
dky
)
;
p
[
j
]
*=
(
j
%
2
)
?
kx
:
ky
;
}
}
}
...
...
@@ -2664,6 +2625,43 @@ window.Raphael = (function () {
delete
attr
.
translation
;
return
this
.
paper
[
this
.
type
]().
attr
(
attr
);
};
var
getLengthFactory
=
function
(
istotal
)
{
return
function
(
length
)
{
if
(
this
.
type
!=
"path"
)
{
return
-
1
;
}
var
path
=
path2curve
(
this
.
attrs
.
path
),
x
,
y
,
p
,
l
,
len
=
0
;
for
(
var
i
=
0
,
ii
=
path
.
length
;
i
<
ii
;
i
++
)
{
p
=
path
[
i
];
if
(
p
[
0
]
==
"M"
)
{
x
=
+
p
[
1
];
y
=
+
p
[
2
];
}
else
{
l
=
segmentLength
(
x
,
y
,
p
[
1
],
p
[
2
],
p
[
3
],
p
[
4
],
p
[
5
],
p
[
6
]);
if
(
!
istotal
&&
len
+
l
>
length
)
{
return
R
.
findDotsAtSegment
(
x
,
y
,
p
[
1
],
p
[
2
],
p
[
3
],
p
[
4
],
p
[
5
],
p
[
6
],
(
length
-
len
)
/
l
);
}
len
+=
l
;
x
=
+
p
[
5
];
y
=
+
p
[
6
];
}
}
return
istotal
?
len
:
R
.
findDotsAtSegment
(
x
,
y
,
p
[
1
],
p
[
2
],
p
[
3
],
p
[
4
],
p
[
5
],
p
[
6
],
1
);
};
},
segmentLength
=
function
(
p1x
,
p1y
,
c1x
,
c1y
,
c2x
,
c2y
,
p2x
,
p2y
)
{
var
old
=
{
x
:
0
,
y
:
0
},
len
=
0
;
for
(
var
i
=
0
;
i
<
1.01
;
i
+=
.
01
)
{
var
dot
=
findDotAtSegment
(
p1x
,
p1y
,
c1x
,
c1y
,
c2x
,
c2y
,
p2x
,
p2y
,
i
);
i
&&
(
len
+=
math
.
sqrt
(
pow
(
old
.
x
-
dot
.
x
,
2
)
+
pow
(
old
.
y
-
dot
.
y
,
2
)));
old
=
dot
;
}
return
len
;
};
Element
[
proto
].
getTotalLength
=
getLengthFactory
(
1
);
Element
[
proto
].
getPointAtLength
=
getLengthFactory
();
// animation easing formulas
R
.
easing_formulas
=
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment