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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
|
public class Cube extends CustomNode {
public var top = true;
public var back = true;
public var origin: Point3D = Point3D{}
public-init var size: Number = 150;
def repereSize = 30;
function getFace(text: String): Node[] {
[
Rectangle {
fill: Color.LIGHTGRAY
stroke: Color.BLACK
strokeWidth: 2
width: size height: size
}
Label {
text: text
}
]
}
init {
def repere = Group {
content: [
Line {
strokeWidth: 2
stroke: Color.BLUE
endX: repereSize
}
Line {
strokeWidth: 2
endY: repereSize
stroke: Color.RED
}
Line {
transforms: [Rotate{axis: Rotate.Y_AXIS angle: 270}]
strokeWidth: 2
endX: repereSize
stroke: Color.GREEN
}
]
}
def backFace: Group = Group {
visible: bind back
content: getFace("BACK");
}
def topFace: Group = Group {
translateZ: 100
visible: bind top
content: getFace("TOP");
}
children = [
repere, backFace,topFace
]
}
}
function run() {
def feats = ConditionalFeature.values();
for(f in feats) {
println("feature {f}=>{Platform.isSupported(f)}");
}
def cube = Cube {
size: 100
opacity: 1
}
var tz: Number = 150;
var tx: Number = 150;
var ty: Number = 150;
var rot: Number = 0;
def grp = Group {
rotationAxis: Point3D{x: 1y: 1}
translateZ: bind tz
translateX: bind tx
translateY: bind ty
content: cube
rotate: bind rot
}
def tm = Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames: [at(6s){ rot => 360}]
}
var play = true on replace {
if(play)tm.playFromStart() else tm.stop();
}
var field: Number = 45;
Stage {
title : "3D Cube"
onClose: function () { }
scene: Scene {
width: 450
height: 450
content: [
VBox {
layoutX: 20
layoutY: 20
spacing: 20
content: [
CheckBox {
text: "Animation" selected: bind play with inverse
}
Grid {
hgap: 10 vgap: 10
rows: [
GridRow {
maxWidth: 200
cells: [
Label{text: "Afficher:"}
HBox {
spacing: 10
content: [
CheckBox {
text: "Back"
selected: bind cube.back with inverse
}
CheckBox {
text: "Top"
selected: bind cube.top with inverse
}
]
}
]
}
GridRow {
cells: [
Label{text: "Rotation:"}
Slider {
disable: bind play
min: 0 max: 360 showTickMarks: true showTickLabels:true
value: bind rot with inverse
}
]
}
GridRow {
cells: [
Label{text: "TX"}
Slider {
min: 0 max: 300 showTickMarks: true showTickLabels:true
value: bind tx with inverse
}
]
}
GridRow {
cells: [
Label{text: "TY"}
Slider {
min: 0 max: 300 showTickMarks: true showTickLabels:true
value: bind ty with inverse
}
]
}
GridRow {
cells: [
Label{text: "TZ"}
Slider {
min: 0 max: 300 showTickMarks: true showTickLabels:true
value: bind tz with inverse
}
]
}
]
}
grp
]
}
]
}
}
} |