Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F947208
object.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
18 KB
Subscribers
None
object.js
View Options
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if
(
!
dojo
.
_hasResource
[
"dojox.gfx3d.object"
]){
dojo
.
_hasResource
[
"dojox.gfx3d.object"
]
=
true
;
dojo
.
provide
(
"dojox.gfx3d.object"
);
dojo
.
require
(
"dojox.gfx"
);
dojo
.
require
(
"dojox.gfx3d.lighting"
);
dojo
.
require
(
"dojox.gfx3d.scheduler"
);
dojo
.
require
(
"dojox.gfx3d.vector"
);
dojo
.
require
(
"dojox.gfx3d.gradient"
);
var
out
=
function
(
o
,
x
){
if
(
arguments
.
length
>
1
){
o
=
x
;
}
var
e
=
{};
for
(
var
i
in
o
){
if
(
i
in
e
){
continue
;
}
}
};
dojo
.
declare
(
"dojox.gfx3d.Object"
,
null
,{
constructor
:
function
(){
this
.
object
=
null
;
this
.
matrix
=
null
;
this
.
cache
=
null
;
this
.
renderer
=
null
;
this
.
parent
=
null
;
this
.
strokeStyle
=
null
;
this
.
fillStyle
=
null
;
this
.
shape
=
null
;
},
setObject
:
function
(
_1
){
this
.
object
=
dojox
.
gfx
.
makeParameters
(
this
.
object
,
_1
);
return
this
;
},
setTransform
:
function
(
_2
){
this
.
matrix
=
dojox
.
gfx3d
.
matrix
.
clone
(
_2
?
dojox
.
gfx3d
.
matrix
.
normalize
(
_2
)
:
dojox
.
gfx3d
.
identity
,
true
);
return
this
;
},
applyRightTransform
:
function
(
_3
){
return
_3
?
this
.
setTransform
([
this
.
matrix
,
_3
])
:
this
;
},
applyLeftTransform
:
function
(
_4
){
return
_4
?
this
.
setTransform
([
_4
,
this
.
matrix
])
:
this
;
},
applyTransform
:
function
(
_5
){
return
_5
?
this
.
setTransform
([
this
.
matrix
,
_5
])
:
this
;
},
setFill
:
function
(
_6
){
this
.
fillStyle
=
_6
;
return
this
;
},
setStroke
:
function
(
_7
){
this
.
strokeStyle
=
_7
;
return
this
;
},
toStdFill
:
function
(
_8
,
_9
){
return
(
this
.
fillStyle
&&
typeof
this
.
fillStyle
[
"type"
]
!=
"undefined"
)
?
_8
[
this
.
fillStyle
.
type
](
_9
,
this
.
fillStyle
.
finish
,
this
.
fillStyle
.
color
)
:
this
.
fillStyle
;
},
invalidate
:
function
(){
this
.
renderer
.
addTodo
(
this
);
},
destroy
:
function
(){
if
(
this
.
shape
){
var
p
=
this
.
shape
.
getParent
();
if
(
p
){
p
.
remove
(
this
.
shape
);
}
this
.
shape
=
null
;
}
},
render
:
function
(
_a
){
throw
"Pure virtual function, not implemented"
;
},
draw
:
function
(
_b
){
throw
"Pure virtual function, not implemented"
;
},
getZOrder
:
function
(){
return
0
;
},
getOutline
:
function
(){
return
null
;
}});
dojo
.
declare
(
"dojox.gfx3d.Scene"
,
dojox
.
gfx3d
.
Object
,{
constructor
:
function
(){
this
.
objects
=
[];
this
.
todos
=
[];
this
.
schedule
=
dojox
.
gfx3d
.
scheduler
.
zOrder
;
this
.
_draw
=
dojox
.
gfx3d
.
drawer
.
conservative
;
},
setFill
:
function
(
_c
){
this
.
fillStyle
=
_c
;
dojo
.
forEach
(
this
.
objects
,
function
(
_d
){
_d
.
setFill
(
_c
);
});
return
this
;
},
setStroke
:
function
(
_e
){
this
.
strokeStyle
=
_e
;
dojo
.
forEach
(
this
.
objects
,
function
(
_f
){
_f
.
setStroke
(
_e
);
});
return
this
;
},
render
:
function
(
_10
,
_11
){
var
m
=
dojox
.
gfx3d
.
matrix
.
multiply
(
_10
,
this
.
matrix
);
if
(
_11
){
this
.
todos
=
this
.
objects
;
}
dojo
.
forEach
(
this
.
todos
,
function
(
_12
){
_12
.
render
(
m
,
_11
);
});
},
draw
:
function
(
_13
){
this
.
objects
=
this
.
schedule
(
this
.
objects
);
this
.
_draw
(
this
.
todos
,
this
.
objects
,
this
.
renderer
);
},
addTodo
:
function
(
_14
){
if
(
dojo
.
every
(
this
.
todos
,
function
(
_15
){
return
_15
!=
_14
;
})){
this
.
todos
.
push
(
_14
);
this
.
invalidate
();
}
},
invalidate
:
function
(){
this
.
parent
.
addTodo
(
this
);
},
getZOrder
:
function
(){
var
_16
=
0
;
dojo
.
forEach
(
this
.
objects
,
function
(
_17
){
_16
+=
_17
.
getZOrder
();
});
return
(
this
.
objects
.
length
>
1
)
?
_16
/
this
.
objects
.
length
:
0
;
}});
dojo
.
declare
(
"dojox.gfx3d.Edges"
,
dojox
.
gfx3d
.
Object
,{
constructor
:
function
(){
this
.
object
=
dojo
.
clone
(
dojox
.
gfx3d
.
defaultEdges
);
},
setObject
:
function
(
_18
,
_19
){
this
.
object
=
dojox
.
gfx
.
makeParameters
(
this
.
object
,(
_18
instanceof
Array
)
?
{
points
:
_18
,
style
:
_19
}
:
_18
);
return
this
;
},
getZOrder
:
function
(){
var
_1a
=
0
;
dojo
.
forEach
(
this
.
cache
,
function
(
_1b
){
_1a
+=
_1b
.
z
;
});
return
(
this
.
cache
.
length
>
1
)
?
_1a
/
this
.
cache
.
length
:
0
;
},
render
:
function
(
_1c
){
var
m
=
dojox
.
gfx3d
.
matrix
.
multiply
(
_1c
,
this
.
matrix
);
this
.
cache
=
dojo
.
map
(
this
.
object
.
points
,
function
(
_1d
){
return
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
_1d
);
});
},
draw
:
function
(){
var
c
=
this
.
cache
;
if
(
this
.
shape
){
this
.
shape
.
setShape
(
""
);
}
else
{
this
.
shape
=
this
.
renderer
.
createPath
();
}
var
p
=
this
.
shape
.
setAbsoluteMode
(
"absolute"
);
if
(
this
.
object
.
style
==
"strip"
||
this
.
object
.
style
==
"loop"
){
p
.
moveTo
(
c
[
0
].
x
,
c
[
0
].
y
);
dojo
.
forEach
(
c
.
slice
(
1
),
function
(
_1e
){
p
.
lineTo
(
_1e
.
x
,
_1e
.
y
);
});
if
(
this
.
object
.
style
==
"loop"
){
p
.
closePath
();
}
}
else
{
for
(
var
i
=
0
;
i
<
this
.
cache
.
length
;){
p
.
moveTo
(
c
[
i
].
x
,
c
[
i
].
y
);
i
++
;
p
.
lineTo
(
c
[
i
].
x
,
c
[
i
].
y
);
i
++
;
}
}
p
.
setStroke
(
this
.
strokeStyle
);
}});
dojo
.
declare
(
"dojox.gfx3d.Orbit"
,
dojox
.
gfx3d
.
Object
,{
constructor
:
function
(){
this
.
object
=
dojo
.
clone
(
dojox
.
gfx3d
.
defaultOrbit
);
},
render
:
function
(
_1f
){
var
m
=
dojox
.
gfx3d
.
matrix
.
multiply
(
_1f
,
this
.
matrix
);
var
_20
=
[
0
,
Math
.
PI
/
4
,
Math
.
PI
/
3
];
var
_21
=
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
this
.
object
.
center
);
var
_22
=
dojo
.
map
(
_20
,
function
(
_23
){
return
{
x
:
this
.
center
.
x
+
this
.
radius
*
Math
.
cos
(
_23
),
y
:
this
.
center
.
y
+
this
.
radius
*
Math
.
sin
(
_23
),
z
:
this
.
center
.
z
};
},
this
.
object
);
_22
=
dojo
.
map
(
_22
,
function
(
_24
){
return
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
_24
);
});
var
_25
=
dojox
.
gfx3d
.
vector
.
normalize
(
_22
);
_22
=
dojo
.
map
(
_22
,
function
(
_26
){
return
dojox
.
gfx3d
.
vector
.
substract
(
_26
,
_21
);
});
var
A
=
{
xx
:
_22
[
0
].
x
*
_22
[
0
].
y
,
xy
:
_22
[
0
].
y
*
_22
[
0
].
y
,
xz
:
1
,
yx
:
_22
[
1
].
x
*
_22
[
1
].
y
,
yy
:
_22
[
1
].
y
*
_22
[
1
].
y
,
yz
:
1
,
zx
:
_22
[
2
].
x
*
_22
[
2
].
y
,
zy
:
_22
[
2
].
y
*
_22
[
2
].
y
,
zz
:
1
,
dx
:
0
,
dy
:
0
,
dz
:
0
};
var
B
=
dojo
.
map
(
_22
,
function
(
_27
){
return
-
Math
.
pow
(
_27
.
x
,
2
);
});
var
X
=
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
dojox
.
gfx3d
.
matrix
.
invert
(
A
),
B
[
0
],
B
[
1
],
B
[
2
]);
var
_28
=
Math
.
atan2
(
X
.
x
,
1
-
X
.
y
)
/
2
;
var
_29
=
dojo
.
map
(
_22
,
function
(
_2a
){
return
dojox
.
gfx
.
matrix
.
multiplyPoint
(
dojox
.
gfx
.
matrix
.
rotate
(
-
_28
),
_2a
.
x
,
_2a
.
y
);
});
var
a
=
Math
.
pow
(
_29
[
0
].
x
,
2
);
var
b
=
Math
.
pow
(
_29
[
0
].
y
,
2
);
var
c
=
Math
.
pow
(
_29
[
1
].
x
,
2
);
var
d
=
Math
.
pow
(
_29
[
1
].
y
,
2
);
var
rx
=
Math
.
sqrt
((
a
*
d
-
b
*
c
)
/
(
d
-
b
));
var
ry
=
Math
.
sqrt
((
a
*
d
-
b
*
c
)
/
(
a
-
c
));
this
.
cache
=
{
cx
:
_21
.
x
,
cy
:
_21
.
y
,
rx
:
rx
,
ry
:
ry
,
theta
:
_28
,
normal
:
_25
};
},
draw
:
function
(
_2b
){
if
(
this
.
shape
){
this
.
shape
.
setShape
(
this
.
cache
);
}
else
{
this
.
shape
=
this
.
renderer
.
createEllipse
(
this
.
cache
);
}
this
.
shape
.
applyTransform
(
dojox
.
gfx
.
matrix
.
rotateAt
(
this
.
cache
.
theta
,
this
.
cache
.
cx
,
this
.
cache
.
cy
)).
setStroke
(
this
.
strokeStyle
).
setFill
(
this
.
toStdFill
(
_2b
,
this
.
cache
.
normal
));
}});
dojo
.
declare
(
"dojox.gfx3d.Path3d"
,
dojox
.
gfx3d
.
Object
,{
constructor
:
function
(){
this
.
object
=
dojo
.
clone
(
dojox
.
gfx3d
.
defaultPath3d
);
this
.
segments
=
[];
this
.
absolute
=
true
;
this
.
last
=
{};
this
.
path
=
""
;
},
_collectArgs
:
function
(
_2c
,
_2d
){
for
(
var
i
=
0
;
i
<
_2d
.
length
;
++
i
){
var
t
=
_2d
[
i
];
if
(
typeof
(
t
)
==
"boolean"
){
_2c
.
push
(
t
?
1
:
0
);
}
else
{
if
(
typeof
(
t
)
==
"number"
){
_2c
.
push
(
t
);
}
else
{
if
(
t
instanceof
Array
){
this
.
_collectArgs
(
_2c
,
t
);
}
else
{
if
(
"x"
in
t
&&
"y"
in
t
){
_2c
.
push
(
t
.
x
);
_2c
.
push
(
t
.
y
);
}
}
}
}
}
},
_validSegments
:
{
m
:
3
,
l
:
3
,
z
:
0
},
_pushSegment
:
function
(
_2e
,
_2f
){
var
_30
=
this
.
_validSegments
[
_2e
.
toLowerCase
()],
_31
;
if
(
typeof
(
_30
)
==
"number"
){
if
(
_30
){
if
(
_2f
.
length
>=
_30
){
_31
=
{
action
:
_2e
,
args
:
_2f
.
slice
(
0
,
_2f
.
length
-
_2f
.
length
%
_30
)};
this
.
segments
.
push
(
_31
);
}
}
else
{
_31
=
{
action
:
_2e
,
args
:
[]};
this
.
segments
.
push
(
_31
);
}
}
},
moveTo
:
function
(){
var
_32
=
[];
this
.
_collectArgs
(
_32
,
arguments
);
this
.
_pushSegment
(
this
.
absolute
?
"M"
:
"m"
,
_32
);
return
this
;
},
lineTo
:
function
(){
var
_33
=
[];
this
.
_collectArgs
(
_33
,
arguments
);
this
.
_pushSegment
(
this
.
absolute
?
"L"
:
"l"
,
_33
);
return
this
;
},
closePath
:
function
(){
this
.
_pushSegment
(
"Z"
,[]);
return
this
;
},
render
:
function
(
_34
){
var
m
=
dojox
.
gfx3d
.
matrix
.
multiply
(
_34
,
this
.
matrix
);
var
_35
=
""
;
var
_36
=
this
.
_validSegments
;
dojo
.
forEach
(
this
.
segments
,
function
(
_37
){
_35
+=
_37
.
action
;
for
(
var
i
=
0
;
i
<
_37
.
args
.
length
;
i
+=
_36
[
_37
.
action
.
toLowerCase
()]){
var
pt
=
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
_37
.
args
[
i
],
_37
.
args
[
i
+
1
],
_37
.
args
[
i
+
2
]);
_35
+=
" "
+
pt
.
x
+
" "
+
pt
.
y
;
}
});
this
.
cache
=
_35
;
},
_draw
:
function
(){
return
this
.
parent
.
createPath
(
this
.
cache
);
}});
dojo
.
declare
(
"dojox.gfx3d.Triangles"
,
dojox
.
gfx3d
.
Object
,{
constructor
:
function
(){
this
.
object
=
dojo
.
clone
(
dojox
.
gfx3d
.
defaultTriangles
);
},
setObject
:
function
(
_38
,
_39
){
if
(
_38
instanceof
Array
){
this
.
object
=
dojox
.
gfx
.
makeParameters
(
this
.
object
,{
points
:
_38
,
style
:
_39
});
}
else
{
this
.
object
=
dojox
.
gfx
.
makeParameters
(
this
.
object
,
_38
);
}
return
this
;
},
render
:
function
(
_3a
){
var
m
=
dojox
.
gfx3d
.
matrix
.
multiply
(
_3a
,
this
.
matrix
);
var
c
=
dojo
.
map
(
this
.
object
.
points
,
function
(
_3b
){
return
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
_3b
);
});
this
.
cache
=
[];
var
_3c
=
c
.
slice
(
0
,
2
);
var
_3d
=
c
[
0
];
if
(
this
.
object
.
style
==
"strip"
){
dojo
.
forEach
(
c
.
slice
(
2
),
function
(
_3e
){
_3c
.
push
(
_3e
);
_3c
.
push
(
_3c
[
0
]);
this
.
cache
.
push
(
_3c
);
_3c
=
_3c
.
slice
(
1
,
3
);
},
this
);
}
else
{
if
(
this
.
object
.
style
==
"fan"
){
dojo
.
forEach
(
c
.
slice
(
2
),
function
(
_3f
){
_3c
.
push
(
_3f
);
_3c
.
push
(
_3d
);
this
.
cache
.
push
(
_3c
);
_3c
=
[
_3d
,
_3f
];
},
this
);
}
else
{
for
(
var
i
=
0
;
i
<
c
.
length
;){
this
.
cache
.
push
([
c
[
i
],
c
[
i
+
1
],
c
[
i
+
2
],
c
[
i
]]);
i
+=
3
;
}
}
}
},
draw
:
function
(
_40
){
this
.
cache
=
dojox
.
gfx3d
.
scheduler
.
bsp
(
this
.
cache
,
function
(
it
){
return
it
;
});
if
(
this
.
shape
){
this
.
shape
.
clear
();
}
else
{
this
.
shape
=
this
.
renderer
.
createGroup
();
}
dojo
.
forEach
(
this
.
cache
,
function
(
_41
){
this
.
shape
.
createPolyline
(
_41
).
setStroke
(
this
.
strokeStyle
).
setFill
(
this
.
toStdFill
(
_40
,
dojox
.
gfx3d
.
vector
.
normalize
(
_41
)));
},
this
);
},
getZOrder
:
function
(){
var
_42
=
0
;
dojo
.
forEach
(
this
.
cache
,
function
(
_43
){
_42
+=
(
_43
[
0
].
z
+
_43
[
1
].
z
+
_43
[
2
].
z
)
/
3
;
});
return
(
this
.
cache
.
length
>
1
)
?
_42
/
this
.
cache
.
length
:
0
;
}});
dojo
.
declare
(
"dojox.gfx3d.Quads"
,
dojox
.
gfx3d
.
Object
,{
constructor
:
function
(){
this
.
object
=
dojo
.
clone
(
dojox
.
gfx3d
.
defaultQuads
);
},
setObject
:
function
(
_44
,
_45
){
this
.
object
=
dojox
.
gfx
.
makeParameters
(
this
.
object
,(
_44
instanceof
Array
)
?
{
points
:
_44
,
style
:
_45
}
:
_44
);
return
this
;
},
render
:
function
(
_46
){
var
m
=
dojox
.
gfx3d
.
matrix
.
multiply
(
_46
,
this
.
matrix
),
i
;
var
c
=
dojo
.
map
(
this
.
object
.
points
,
function
(
_47
){
return
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
_47
);
});
this
.
cache
=
[];
if
(
this
.
object
.
style
==
"strip"
){
var
_48
=
c
.
slice
(
0
,
2
);
for
(
i
=
2
;
i
<
c
.
length
;){
_48
=
_48
.
concat
([
c
[
i
],
c
[
i
+
1
],
_48
[
0
]]);
this
.
cache
.
push
(
_48
);
_48
=
_48
.
slice
(
2
,
4
);
i
+=
2
;
}
}
else
{
for
(
i
=
0
;
i
<
c
.
length
;){
this
.
cache
.
push
([
c
[
i
],
c
[
i
+
1
],
c
[
i
+
2
],
c
[
i
+
3
],
c
[
i
]]);
i
+=
4
;
}
}
},
draw
:
function
(
_49
){
this
.
cache
=
dojox
.
gfx3d
.
scheduler
.
bsp
(
this
.
cache
,
function
(
it
){
return
it
;
});
if
(
this
.
shape
){
this
.
shape
.
clear
();
}
else
{
this
.
shape
=
this
.
renderer
.
createGroup
();
}
for
(
var
x
=
0
;
x
<
this
.
cache
.
length
;
x
++
){
this
.
shape
.
createPolyline
(
this
.
cache
[
x
]).
setStroke
(
this
.
strokeStyle
).
setFill
(
this
.
toStdFill
(
_49
,
dojox
.
gfx3d
.
vector
.
normalize
(
this
.
cache
[
x
])));
}
},
getZOrder
:
function
(){
var
_4a
=
0
;
for
(
var
x
=
0
;
x
<
this
.
cache
.
length
;
x
++
){
var
i
=
this
.
cache
[
x
];
_4a
+=
(
i
[
0
].
z
+
i
[
1
].
z
+
i
[
2
].
z
+
i
[
3
].
z
)
/
4
;
}
return
(
this
.
cache
.
length
>
1
)
?
_4a
/
this
.
cache
.
length
:
0
;
}});
dojo
.
declare
(
"dojox.gfx3d.Polygon"
,
dojox
.
gfx3d
.
Object
,{
constructor
:
function
(){
this
.
object
=
dojo
.
clone
(
dojox
.
gfx3d
.
defaultPolygon
);
},
setObject
:
function
(
_4b
){
this
.
object
=
dojox
.
gfx
.
makeParameters
(
this
.
object
,(
_4b
instanceof
Array
)
?
{
path
:
_4b
}
:
_4b
);
return
this
;
},
render
:
function
(
_4c
){
var
m
=
dojox
.
gfx3d
.
matrix
.
multiply
(
_4c
,
this
.
matrix
);
this
.
cache
=
dojo
.
map
(
this
.
object
.
path
,
function
(
_4d
){
return
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
_4d
);
});
this
.
cache
.
push
(
this
.
cache
[
0
]);
},
draw
:
function
(
_4e
){
if
(
this
.
shape
){
this
.
shape
.
setShape
({
points
:
this
.
cache
});
}
else
{
this
.
shape
=
this
.
renderer
.
createPolyline
({
points
:
this
.
cache
});
}
this
.
shape
.
setStroke
(
this
.
strokeStyle
).
setFill
(
this
.
toStdFill
(
_4e
,
dojox
.
gfx3d
.
matrix
.
normalize
(
this
.
cache
)));
},
getZOrder
:
function
(){
var
_4f
=
0
;
for
(
var
x
=
0
;
x
<
this
.
cache
.
length
;
x
++
){
_4f
+=
this
.
cache
[
x
].
z
;
}
return
(
this
.
cache
.
length
>
1
)
?
_4f
/
this
.
cache
.
length
:
0
;
},
getOutline
:
function
(){
return
this
.
cache
.
slice
(
0
,
3
);
}});
dojo
.
declare
(
"dojox.gfx3d.Cube"
,
dojox
.
gfx3d
.
Object
,{
constructor
:
function
(){
this
.
object
=
dojo
.
clone
(
dojox
.
gfx3d
.
defaultCube
);
this
.
polygons
=
[];
},
setObject
:
function
(
_50
){
this
.
object
=
dojox
.
gfx
.
makeParameters
(
this
.
object
,
_50
);
},
render
:
function
(
_51
){
var
a
=
this
.
object
.
top
;
var
g
=
this
.
object
.
bottom
;
var
b
=
{
x
:
g
.
x
,
y
:
a
.
y
,
z
:
a
.
z
};
var
c
=
{
x
:
g
.
x
,
y
:
g
.
y
,
z
:
a
.
z
};
var
d
=
{
x
:
a
.
x
,
y
:
g
.
y
,
z
:
a
.
z
};
var
e
=
{
x
:
a
.
x
,
y
:
a
.
y
,
z
:
g
.
z
};
var
f
=
{
x
:
g
.
x
,
y
:
a
.
y
,
z
:
g
.
z
};
var
h
=
{
x
:
a
.
x
,
y
:
g
.
y
,
z
:
g
.
z
};
var
_52
=
[
a
,
b
,
c
,
d
,
e
,
f
,
g
,
h
];
var
m
=
dojox
.
gfx3d
.
matrix
.
multiply
(
_51
,
this
.
matrix
);
var
p
=
dojo
.
map
(
_52
,
function
(
_53
){
return
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
_53
);
});
a
=
p
[
0
];
b
=
p
[
1
];
c
=
p
[
2
];
d
=
p
[
3
];
e
=
p
[
4
];
f
=
p
[
5
];
g
=
p
[
6
];
h
=
p
[
7
];
this
.
cache
=
[[
a
,
b
,
c
,
d
,
a
],[
e
,
f
,
g
,
h
,
e
],[
a
,
d
,
h
,
e
,
a
],[
d
,
c
,
g
,
h
,
d
],[
c
,
b
,
f
,
g
,
c
],[
b
,
a
,
e
,
f
,
b
]];
},
draw
:
function
(
_54
){
this
.
cache
=
dojox
.
gfx3d
.
scheduler
.
bsp
(
this
.
cache
,
function
(
it
){
return
it
;
});
var
_55
=
this
.
cache
.
slice
(
3
);
if
(
this
.
shape
){
this
.
shape
.
clear
();
}
else
{
this
.
shape
=
this
.
renderer
.
createGroup
();
}
for
(
var
x
=
0
;
x
<
_55
.
length
;
x
++
){
this
.
shape
.
createPolyline
(
_55
[
x
]).
setStroke
(
this
.
strokeStyle
).
setFill
(
this
.
toStdFill
(
_54
,
dojox
.
gfx3d
.
vector
.
normalize
(
_55
[
x
])));
}
},
getZOrder
:
function
(){
var
top
=
this
.
cache
[
0
][
0
];
var
_56
=
this
.
cache
[
1
][
2
];
return
(
top
.
z
+
_56
.
z
)
/
2
;
}});
dojo
.
declare
(
"dojox.gfx3d.Cylinder"
,
dojox
.
gfx3d
.
Object
,{
constructor
:
function
(){
this
.
object
=
dojo
.
clone
(
dojox
.
gfx3d
.
defaultCylinder
);
},
render
:
function
(
_57
){
var
m
=
dojox
.
gfx3d
.
matrix
.
multiply
(
_57
,
this
.
matrix
);
var
_58
=
[
0
,
Math
.
PI
/
4
,
Math
.
PI
/
3
];
var
_59
=
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
this
.
object
.
center
);
var
_5a
=
dojo
.
map
(
_58
,
function
(
_5b
){
return
{
x
:
this
.
center
.
x
+
this
.
radius
*
Math
.
cos
(
_5b
),
y
:
this
.
center
.
y
+
this
.
radius
*
Math
.
sin
(
_5b
),
z
:
this
.
center
.
z
};
},
this
.
object
);
_5a
=
dojo
.
map
(
_5a
,
function
(
_5c
){
return
dojox
.
gfx3d
.
vector
.
substract
(
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
_5c
),
_59
);
});
var
A
=
{
xx
:
_5a
[
0
].
x
*
_5a
[
0
].
y
,
xy
:
_5a
[
0
].
y
*
_5a
[
0
].
y
,
xz
:
1
,
yx
:
_5a
[
1
].
x
*
_5a
[
1
].
y
,
yy
:
_5a
[
1
].
y
*
_5a
[
1
].
y
,
yz
:
1
,
zx
:
_5a
[
2
].
x
*
_5a
[
2
].
y
,
zy
:
_5a
[
2
].
y
*
_5a
[
2
].
y
,
zz
:
1
,
dx
:
0
,
dy
:
0
,
dz
:
0
};
var
B
=
dojo
.
map
(
_5a
,
function
(
_5d
){
return
-
Math
.
pow
(
_5d
.
x
,
2
);
});
var
X
=
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
dojox
.
gfx3d
.
matrix
.
invert
(
A
),
B
[
0
],
B
[
1
],
B
[
2
]);
var
_5e
=
Math
.
atan2
(
X
.
x
,
1
-
X
.
y
)
/
2
;
var
_5f
=
dojo
.
map
(
_5a
,
function
(
_60
){
return
dojox
.
gfx
.
matrix
.
multiplyPoint
(
dojox
.
gfx
.
matrix
.
rotate
(
-
_5e
),
_60
.
x
,
_60
.
y
);
});
var
a
=
Math
.
pow
(
_5f
[
0
].
x
,
2
);
var
b
=
Math
.
pow
(
_5f
[
0
].
y
,
2
);
var
c
=
Math
.
pow
(
_5f
[
1
].
x
,
2
);
var
d
=
Math
.
pow
(
_5f
[
1
].
y
,
2
);
var
rx
=
Math
.
sqrt
((
a
*
d
-
b
*
c
)
/
(
d
-
b
));
var
ry
=
Math
.
sqrt
((
a
*
d
-
b
*
c
)
/
(
a
-
c
));
if
(
rx
<
ry
){
var
t
=
rx
;
rx
=
ry
;
ry
=
t
;
_5e
-=
Math
.
PI
/
2
;
}
var
top
=
dojox
.
gfx3d
.
matrix
.
multiplyPoint
(
m
,
dojox
.
gfx3d
.
vector
.
sum
(
this
.
object
.
center
,{
x
:
0
,
y
:
0
,
z
:
this
.
object
.
height
}));
var
_61
=
this
.
fillStyle
.
type
==
"constant"
?
this
.
fillStyle
.
color
:
dojox
.
gfx3d
.
gradient
(
this
.
renderer
.
lighting
,
this
.
fillStyle
,
this
.
object
.
center
,
this
.
object
.
radius
,
Math
.
PI
,
2
*
Math
.
PI
,
m
);
if
(
isNaN
(
rx
)
||
isNaN
(
ry
)
||
isNaN
(
_5e
)){
rx
=
this
.
object
.
radius
,
ry
=
0
,
_5e
=
0
;
}
this
.
cache
=
{
center
:
_59
,
top
:
top
,
rx
:
rx
,
ry
:
ry
,
theta
:
_5e
,
gradient
:
_61
};
},
draw
:
function
(){
var
c
=
this
.
cache
,
v
=
dojox
.
gfx3d
.
vector
,
m
=
dojox
.
gfx
.
matrix
,
_62
=
[
c
.
center
,
c
.
top
],
_63
=
v
.
substract
(
c
.
top
,
c
.
center
);
if
(
v
.
dotProduct
(
_63
,
this
.
renderer
.
lighting
.
incident
)
>
0
){
_62
=
[
c
.
top
,
c
.
center
];
_63
=
v
.
substract
(
c
.
center
,
c
.
top
);
}
var
_64
=
this
.
renderer
.
lighting
[
this
.
fillStyle
.
type
](
_63
,
this
.
fillStyle
.
finish
,
this
.
fillStyle
.
color
),
d
=
Math
.
sqrt
(
Math
.
pow
(
c
.
center
.
x
-
c
.
top
.
x
,
2
)
+
Math
.
pow
(
c
.
center
.
y
-
c
.
top
.
y
,
2
));
if
(
this
.
shape
){
this
.
shape
.
clear
();
}
else
{
this
.
shape
=
this
.
renderer
.
createGroup
();
}
this
.
shape
.
createPath
(
""
).
moveTo
(
0
,
-
c
.
rx
).
lineTo
(
d
,
-
c
.
rx
).
lineTo
(
d
,
c
.
rx
).
lineTo
(
0
,
c
.
rx
).
arcTo
(
c
.
ry
,
c
.
rx
,
0
,
true
,
true
,
0
,
-
c
.
rx
).
setFill
(
c
.
gradient
).
setStroke
(
this
.
strokeStyle
).
setTransform
([
m
.
translate
(
_62
[
0
]),
m
.
rotate
(
Math
.
atan2
(
_62
[
1
].
y
-
_62
[
0
].
y
,
_62
[
1
].
x
-
_62
[
0
].
x
))]);
if
(
c
.
rx
>
0
&&
c
.
ry
>
0
){
this
.
shape
.
createEllipse
({
cx
:
_62
[
1
].
x
,
cy
:
_62
[
1
].
y
,
rx
:
c
.
rx
,
ry
:
c
.
ry
}).
setFill
(
_64
).
setStroke
(
this
.
strokeStyle
).
applyTransform
(
m
.
rotateAt
(
c
.
theta
,
_62
[
1
]));
}
}});
dojo
.
declare
(
"dojox.gfx3d.Viewport"
,
dojox
.
gfx
.
Group
,{
constructor
:
function
(){
this
.
dimension
=
null
;
this
.
objects
=
[];
this
.
todos
=
[];
this
.
renderer
=
this
;
this
.
schedule
=
dojox
.
gfx3d
.
scheduler
.
zOrder
;
this
.
draw
=
dojox
.
gfx3d
.
drawer
.
conservative
;
this
.
deep
=
false
;
this
.
lights
=
[];
this
.
lighting
=
null
;
},
setCameraTransform
:
function
(
_65
){
this
.
camera
=
dojox
.
gfx3d
.
matrix
.
clone
(
_65
?
dojox
.
gfx3d
.
matrix
.
normalize
(
_65
)
:
dojox
.
gfx3d
.
identity
,
true
);
this
.
invalidate
();
return
this
;
},
applyCameraRightTransform
:
function
(
_66
){
return
_66
?
this
.
setCameraTransform
([
this
.
camera
,
_66
])
:
this
;
},
applyCameraLeftTransform
:
function
(
_67
){
return
_67
?
this
.
setCameraTransform
([
_67
,
this
.
camera
])
:
this
;
},
applyCameraTransform
:
function
(
_68
){
return
this
.
applyCameraRightTransform
(
_68
);
},
setLights
:
function
(
_69
,
_6a
,
_6b
){
this
.
lights
=
(
_69
instanceof
Array
)
?
{
sources
:
_69
,
ambient
:
_6a
,
specular
:
_6b
}
:
_69
;
var
_6c
=
{
x
:
0
,
y
:
0
,
z
:
1
};
this
.
lighting
=
new
dojox
.
gfx3d
.
lighting
.
Model
(
_6c
,
this
.
lights
.
sources
,
this
.
lights
.
ambient
,
this
.
lights
.
specular
);
this
.
invalidate
();
return
this
;
},
addLights
:
function
(
_6d
){
return
this
.
setLights
(
this
.
lights
.
sources
.
concat
(
_6d
));
},
addTodo
:
function
(
_6e
){
if
(
dojo
.
every
(
this
.
todos
,
function
(
_6f
){
return
_6f
!=
_6e
;
})){
this
.
todos
.
push
(
_6e
);
}
},
invalidate
:
function
(){
this
.
deep
=
true
;
this
.
todos
=
this
.
objects
;
},
setDimensions
:
function
(
dim
){
if
(
dim
){
var
w
=
dojo
.
isString
(
dim
.
width
)
?
parseInt
(
dim
.
width
)
:
dim
.
width
;
var
h
=
dojo
.
isString
(
dim
.
height
)
?
parseInt
(
dim
.
height
)
:
dim
.
height
;
var
trs
=
this
.
rawNode
.
style
;
trs
.
height
=
h
;
trs
.
width
=
w
;
this
.
dimension
=
{
width
:
w
,
height
:
h
};
}
else
{
this
.
dimension
=
null
;
}
},
render
:
function
(){
if
(
!
this
.
todos
.
length
){
return
;
}
var
m
=
dojox
.
gfx3d
.
matrix
;
for
(
var
x
=
0
;
x
<
this
.
todos
.
length
;
x
++
){
this
.
todos
[
x
].
render
(
dojox
.
gfx3d
.
matrix
.
normalize
([
m
.
cameraRotateXg
(
180
),
m
.
cameraTranslate
(
0
,
this
.
dimension
.
height
,
0
),
this
.
camera
]),
this
.
deep
);
}
this
.
objects
=
this
.
schedule
(
this
.
objects
);
this
.
draw
(
this
.
todos
,
this
.
objects
,
this
);
this
.
todos
=
[];
this
.
deep
=
false
;
}});
dojox
.
gfx3d
.
Viewport
.
nodeType
=
dojox
.
gfx
.
Group
.
nodeType
;
dojox
.
gfx3d
.
_creators
=
{
createEdges
:
function
(
_70
,
_71
){
return
this
.
create3DObject
(
dojox
.
gfx3d
.
Edges
,
_70
,
_71
);
},
createTriangles
:
function
(
_72
,
_73
){
return
this
.
create3DObject
(
dojox
.
gfx3d
.
Triangles
,
_72
,
_73
);
},
createQuads
:
function
(
_74
,
_75
){
return
this
.
create3DObject
(
dojox
.
gfx3d
.
Quads
,
_74
,
_75
);
},
createPolygon
:
function
(
_76
){
return
this
.
create3DObject
(
dojox
.
gfx3d
.
Polygon
,
_76
);
},
createOrbit
:
function
(
_77
){
return
this
.
create3DObject
(
dojox
.
gfx3d
.
Orbit
,
_77
);
},
createCube
:
function
(
_78
){
return
this
.
create3DObject
(
dojox
.
gfx3d
.
Cube
,
_78
);
},
createCylinder
:
function
(
_79
){
return
this
.
create3DObject
(
dojox
.
gfx3d
.
Cylinder
,
_79
);
},
createPath3d
:
function
(
_7a
){
return
this
.
create3DObject
(
dojox
.
gfx3d
.
Path3d
,
_7a
);
},
createScene
:
function
(){
return
this
.
create3DObject
(
dojox
.
gfx3d
.
Scene
);
},
create3DObject
:
function
(
_7b
,
_7c
,
_7d
){
var
obj
=
new
_7b
();
this
.
adopt
(
obj
);
if
(
_7c
){
obj
.
setObject
(
_7c
,
_7d
);
}
return
obj
;
},
adopt
:
function
(
obj
){
obj
.
renderer
=
this
.
renderer
;
obj
.
parent
=
this
;
this
.
objects
.
push
(
obj
);
this
.
addTodo
(
obj
);
return
this
;
},
abandon
:
function
(
obj
,
_7e
){
for
(
var
i
=
0
;
i
<
this
.
objects
.
length
;
++
i
){
if
(
this
.
objects
[
i
]
==
obj
){
this
.
objects
.
splice
(
i
,
1
);
}
}
obj
.
parent
=
null
;
return
this
;
},
setScheduler
:
function
(
_7f
){
this
.
schedule
=
_7f
;
},
setDrawer
:
function
(
_80
){
this
.
draw
=
_80
;
}};
dojo
.
extend
(
dojox
.
gfx3d
.
Viewport
,
dojox
.
gfx3d
.
_creators
);
dojo
.
extend
(
dojox
.
gfx3d
.
Scene
,
dojox
.
gfx3d
.
_creators
);
delete
dojox
.
gfx3d
.
_creators
;
dojo
.
extend
(
dojox
.
gfx
.
Surface
,{
createViewport
:
function
(){
var
_81
=
this
.
createObject
(
dojox
.
gfx3d
.
Viewport
,
null
,
true
);
_81
.
setDimensions
(
this
.
getDimensions
());
return
_81
;
}});
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 10:46 (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24159
Default Alt Text
object.js (18 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment