1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
public class Cube extends CustomNode {
public var origin: Point3D = Point3D{}
public-init var size: Number = 150;
init {
children = [
for(n in [0..1]) [
Rectangle {
fill: Color.LIGHTGRAY
stroke: Color.BLACK
strokeWidth: 2
translateZ: size*n
width: size height: size
}
Rectangle {
rotationAxis: Point3D {
x:0 y:10 z:0
}
rotate: 90
fill: Color.LIGHTGREEN
stroke: Color.BLACK
strokeWidth: 2
translateX: (size*(n-.5))
translateZ: size/2
width: size height: size
}
Rectangle {
rotationAxis: Point3D {
x:1 y:0 z:0
}
rotate: 90
fill: Color.LIGHTSKYBLUE
stroke: Color.BLACK
strokeWidth: 2
translateY: size*(n-.5)
translateZ: size/2
width: size height: size
}
]
]
}
}
function run() {
def feats = ConditionalFeature.values();
for(f in feats) {
println("feature {f}=>{Platform.isSupported(f)}");
}
def cube = Cube {
size: 100
opacity: 1
rotationAxis: Point3D{z: 1}
}
def grp = Group {
rotationAxis: Point3D{x: 1 y: 1}
rotate: 60
translateZ: 100
translateX: 100
translateY: 100
content: cube
}
Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames: [at(2s){ cube.rotate => 360}]
}.playFromStart();
Stage {
title : "3D Cube"
onClose: function () { }
scene: Scene {
width: 300
height: 300
fill: Color.TRANSPARENT
camera: PerspectiveCamera {
fieldOfView: 200
}
content: [
grp
]
}
}
} |
Partager