RUIC 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +201 -0
- data/bin/ruic +52 -0
- data/gui/MetaData.xml +387 -0
- data/gui/TODO +2 -0
- data/gui/appattributesmodel.rb +51 -0
- data/gui/appelementsmodel.rb +126 -0
- data/gui/launch.rb +20 -0
- data/gui/makefile +14 -0
- data/gui/resources.qrc +37 -0
- data/gui/resources/images/Objects-Behavior-Normal.png +0 -0
- data/gui/resources/images/Objects-Camera-Normal.png +0 -0
- data/gui/resources/images/Objects-Component-Normal.png +0 -0
- data/gui/resources/images/Objects-Effect-Normal.png +0 -0
- data/gui/resources/images/Objects-Group-Normal.png +0 -0
- data/gui/resources/images/Objects-Image-Normal.png +0 -0
- data/gui/resources/images/Objects-Layer-Normal.png +0 -0
- data/gui/resources/images/Objects-Light-Normal.png +0 -0
- data/gui/resources/images/Objects-Material-Normal.png +0 -0
- data/gui/resources/images/Objects-Model-Normal.png +0 -0
- data/gui/resources/images/Objects-Music-Normal.png +0 -0
- data/gui/resources/images/Objects-Property-Normal.png +0 -0
- data/gui/resources/images/Objects-References-Normal.png +0 -0
- data/gui/resources/images/Objects-Scene-Normal.png +0 -0
- data/gui/resources/images/Objects-Sound-Normal.png +0 -0
- data/gui/resources/images/Objects-Text-Normal.png +0 -0
- data/gui/resources/images/Objects-Unknown-Normal.png +0 -0
- data/gui/resources/images/Objects-Video-Normal.png +0 -0
- data/gui/resources/images/SCXML.ico +0 -0
- data/gui/resources/images/TSCXML.ico +0 -0
- data/gui/resources/images/UIA.ico +0 -0
- data/gui/resources/images/clipboard.png +0 -0
- data/gui/resources/images/console_arrow.png +0 -0
- data/gui/resources/images/cross.png +0 -0
- data/gui/resources/images/currentline.png +0 -0
- data/gui/resources/images/disk-black.png +0 -0
- data/gui/resources/images/disks-black.png +0 -0
- data/gui/resources/images/document--plus.png +0 -0
- data/gui/resources/images/document-copy.png +0 -0
- data/gui/resources/images/executable-actions-delete-active.png +0 -0
- data/gui/resources/images/executable-actions-delete-idle.png +0 -0
- data/gui/resources/images/executable-actions-enter-badge.png +0 -0
- data/gui/resources/images/executable-actions-exit-badge.png +0 -0
- data/gui/resources/images/folder-horizontal--plus.png +0 -0
- data/gui/resources/images/folder-horizontal-open.png +0 -0
- data/gui/resources/images/gear.png +0 -0
- data/gui/resources/images/invalid_breakpoint.png +0 -0
- data/gui/resources/images/scissors-blue.png +0 -0
- data/gui/resources/images/slide-16-active.png +0 -0
- data/gui/resources/images/slide-16-master.png +0 -0
- data/gui/resources/images/slide-16-normal.png +0 -0
- data/gui/resources/images/slide-32-active.png +0 -0
- data/gui/resources/images/slide-32-master.png +0 -0
- data/gui/resources/images/slide-32-normal.png +0 -0
- data/gui/resources/images/studio_architect32.ico +0 -0
- data/gui/resources/images/studio_architect32.png +0 -0
- data/gui/resources/images/textfile_icon.png +0 -0
- data/gui/resources/style/checkbox.png +0 -0
- data/gui/resources/style/dark.qss +459 -0
- data/gui/resources/style/down_arrow.png +0 -0
- data/gui/resources/style/handle.png +0 -0
- data/gui/window.rb +90 -0
- data/gui/window.ui +753 -0
- data/lib/ruic.rb +59 -0
- data/lib/ruic/application.rb +129 -0
- data/lib/ruic/asset_classes.rb +448 -0
- data/lib/ruic/behaviors.rb +31 -0
- data/lib/ruic/interfaces.rb +36 -0
- data/lib/ruic/presentation.rb +354 -0
- data/lib/ruic/statemachine.rb +111 -0
- data/lib/ruic/version.rb +3 -0
- data/ruic.gemspec +23 -0
- data/test/MetaData.xml +387 -0
- data/test/customclasses.ruic +21 -0
- data/test/filtering.ruic +39 -0
- data/test/nonmaster.ruic +21 -0
- data/test/projects/CustomClasses/Brush Strokes.effect +38 -0
- data/test/projects/CustomClasses/CustomClasses.uia +6 -0
- data/test/projects/CustomClasses/CustomClasses.uip +34 -0
- data/test/projects/CustomClasses/copper.material +194 -0
- data/test/projects/CustomClasses/maps/UV-Checker.png +0 -0
- data/test/projects/CustomClasses/maps/effects/brushnoise.dds +0 -0
- data/test/projects/CustomClasses/maps/materials/spherical_checker.png +0 -0
- data/test/projects/ReferencedMaterials/ReferencedMaterials.uia +6 -0
- data/test/projects/ReferencedMaterials/ReferencedMaterials.uip +39 -0
- data/test/properties.ruic +81 -0
- data/test/referencematerials.ruic +53 -0
- data/test/usage.ruic +20 -0
- metadata +166 -0
data/test/nonmaster.ruic
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruic
|
2
|
+
metadata 'MetaData.xml' # optional; also may be set via -m flag
|
3
|
+
uia 'projects/CustomClasses/CustomClasses.uia' # required before other commands
|
4
|
+
show app.errors if app.errors?
|
5
|
+
|
6
|
+
main = app.main_presentation
|
7
|
+
|
8
|
+
assert main.scene.master?
|
9
|
+
assert (main/"Scene.Layer").master?
|
10
|
+
assert (main/"Scene.Layer.Camera").master?
|
11
|
+
|
12
|
+
rect = main/"Scene.Layer.Rectangle"
|
13
|
+
assert !rect.master?
|
14
|
+
assert rect['scale'].values.length == 1
|
15
|
+
assert rect['scale'].value.x == 5
|
16
|
+
assert rect['scale',1].x == 5
|
17
|
+
assert rect['scale',0].nil?
|
18
|
+
|
19
|
+
assert rect['position'].values.length == 1
|
20
|
+
assert rect['position',1].x == 0
|
21
|
+
assert rect['position',0].nil?
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<Effect>
|
3
|
+
<MetaData>
|
4
|
+
<!--Simulates an artistic painting of the image-->
|
5
|
+
<Property name="NoiseSamp" formalName="Noise" filter="linear" clamp="repeat" type="Texture" default=".\maps\effects\brushnoise.dds" description="Texture to be used for the brush texture"/>
|
6
|
+
<Property name="brushAngle" formalName="Brush Angle" default="45" description="Amount to rotate the noise texture."/>
|
7
|
+
<Property name="brushLen" formalName="Stroke Length" min="0" max="3" default="1" description="How far to offset the image/'brush'."/>
|
8
|
+
<Property name="brushSize" formalName="Stroke Size" min="10" max="200" default="100" description="Scale the brush. (Smaller values yield larger sizes.)"/>
|
9
|
+
</MetaData>
|
10
|
+
<Shaders>
|
11
|
+
<Shader>
|
12
|
+
<FragmentShader>
|
13
|
+
void frag (void)
|
14
|
+
{
|
15
|
+
if ( flagNoiseSamp != 0 ) {
|
16
|
+
float alpha = radians(brushAngle);
|
17
|
+
float cosAlpha = cos(alpha);
|
18
|
+
float sinAlpha = sin(alpha);
|
19
|
+
mat2 rotMat = mat2(cosAlpha, sinAlpha, -sinAlpha, cosAlpha);
|
20
|
+
|
21
|
+
vec2 uv0 = TexCoord / brushSize * 1000.0;
|
22
|
+
uv0 = (uv0.yx * rotMat).yx;
|
23
|
+
|
24
|
+
vec2 uv1 = texture2D_NoiseSamp(fract(uv0)).xy - 0.5;
|
25
|
+
uv1*= vec2(1.0, 0.01);
|
26
|
+
uv1*= rotMat;
|
27
|
+
vec2 uv2 = TexCoord + uv1 * 0.1 * brushLen;
|
28
|
+
|
29
|
+
vec2 halfPixelSize = 0.5 / Texture0Info.xy;
|
30
|
+
colorOutput(texture2D_0(clamp(uv2, halfPixelSize, 1.0-halfPixelSize)));
|
31
|
+
}
|
32
|
+
else
|
33
|
+
colorOutput(texture2D_0(TexCoord));
|
34
|
+
}
|
35
|
+
</FragmentShader>
|
36
|
+
</Shader>
|
37
|
+
</Shaders>
|
38
|
+
</Effect>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<UIP version="3" >
|
3
|
+
<Project >
|
4
|
+
<ProjectSettings author="" company="" presentationWidth="800" presentationHeight="480" maintainAspect="False" />
|
5
|
+
<Classes >
|
6
|
+
<Effect id="Brush Strokes" name="Brush Strokes" sourcepath=".\Brush Strokes.effect" />
|
7
|
+
<CustomMaterial id="copper" name="copper" sourcepath=".\copper.material" />
|
8
|
+
</Classes>
|
9
|
+
<Graph >
|
10
|
+
<Scene id="Scene" >
|
11
|
+
<Layer id="Layer" >
|
12
|
+
<Camera id="Camera" />
|
13
|
+
<Light id="Light" />
|
14
|
+
<Effect id="Brush Strokes_001" class="#Brush Strokes" />
|
15
|
+
<Model id="Rectangle" >
|
16
|
+
<CustomMaterial id="Material" class="#copper" />
|
17
|
+
</Model>
|
18
|
+
</Layer>
|
19
|
+
</Scene>
|
20
|
+
</Graph>
|
21
|
+
<Logic >
|
22
|
+
<State name="Master Slide" component="#Scene" >
|
23
|
+
<Add ref="#Layer" />
|
24
|
+
<Add ref="#Camera" />
|
25
|
+
<Add ref="#Light" />
|
26
|
+
<State id="Scene-Slide1" name="Slide1" >
|
27
|
+
<Add ref="#Brush Strokes_001" name="Brush Strokes" />
|
28
|
+
<Add ref="#Rectangle" name="Rectangle" rotation="-4.94025 -10.2291 -12.3676" scale="5 5 5" sourcepath="#Rectangle" />
|
29
|
+
<Add ref="#Material" name="Material" roughness="0.0869565" uEnvironmentMappingEnabled="True" />
|
30
|
+
</State>
|
31
|
+
</State>
|
32
|
+
</Logic>
|
33
|
+
</Project>
|
34
|
+
</UIP>
|
@@ -0,0 +1,194 @@
|
|
1
|
+
<Material name="copper" version="1.0">
|
2
|
+
<MetaData >
|
3
|
+
<Property formalName="Environment Map" name="uEnvironmentTexture" type="Texture" filter="linear" minfilter="linearMipmapLinear" clamp="repeat" usage="environment" default=".\maps\materials\spherical_checker.png"/>
|
4
|
+
<Property formalName="Enable Environment" name="uEnvironmentMappingEnabled" type="Boolean" default="True"/>
|
5
|
+
<Property name="roughness" type="Float" min="0.000000" max="1.000000" default="0.000000" description="Roughness of the material. A value of 0 makes it completely specular, 1 is completely diffuse"/>
|
6
|
+
<Property name="metal_color" type="Color" default="0.805 0.395 0.305" description="Color of the material"/>
|
7
|
+
</MetaData>
|
8
|
+
<Shaders type="GLSL" version="330">
|
9
|
+
<Shader>
|
10
|
+
<Shared> </Shared>
|
11
|
+
<VertexShader>
|
12
|
+
// add structure defines
|
13
|
+
#define UIC_ENABLE_UV0 1
|
14
|
+
#define UIC_ENABLE_WORLD_POSITION 1
|
15
|
+
#define UIC_ENABLE_TEXTAN 1
|
16
|
+
#define UIC_ENABLE_BINORMAL 0
|
17
|
+
|
18
|
+
#include "vertexFragmentBase.glsllib"
|
19
|
+
|
20
|
+
// add temporary declarations
|
21
|
+
void main(void)
|
22
|
+
{
|
23
|
+
|
24
|
+
gl_Position = vertexMain();
|
25
|
+
}
|
26
|
+
</VertexShader>
|
27
|
+
<FragmentShader>
|
28
|
+
|
29
|
+
// add enum defines
|
30
|
+
#define scatter_reflect 0
|
31
|
+
#define scatter_transmit 1
|
32
|
+
#define scatter_reflect_transmit 2
|
33
|
+
|
34
|
+
#define UIC_ENABLE_UV0 1
|
35
|
+
#define UIC_ENABLE_WORLD_POSITION 1
|
36
|
+
#define UIC_ENABLE_TEXTAN 1
|
37
|
+
#define UIC_ENABLE_BINORMAL 0
|
38
|
+
|
39
|
+
#include "vertexFragmentBase.glsllib"
|
40
|
+
|
41
|
+
// set shader output
|
42
|
+
out vec4 fragColor;
|
43
|
+
|
44
|
+
// add structure defines
|
45
|
+
struct layer_result
|
46
|
+
{
|
47
|
+
vec4 base;
|
48
|
+
vec4 layer;
|
49
|
+
mat3 tanFrame;
|
50
|
+
};
|
51
|
+
|
52
|
+
|
53
|
+
// temporary declarations
|
54
|
+
layer_result layers[1];
|
55
|
+
|
56
|
+
#include "SSAOCustomMaterial.glsllib"
|
57
|
+
#include "sampleLight.glsllib"
|
58
|
+
#include "sampleProbe.glsllib"
|
59
|
+
#include "sampleArea.glsllib"
|
60
|
+
#include "square.glsllib"
|
61
|
+
#include "calculateRoughness.glsllib"
|
62
|
+
#include "evalEnvironmentMap.glsllib"
|
63
|
+
#include "luminance.glsllib"
|
64
|
+
#include "physGlossyBSDF.glsllib"
|
65
|
+
#include "simpleGlossyBSDF.glsllib"
|
66
|
+
#include "fresnelLayer.glsllib"
|
67
|
+
|
68
|
+
bool evalTwoSided()
|
69
|
+
{
|
70
|
+
return( false );
|
71
|
+
}
|
72
|
+
|
73
|
+
vec3 computeFrontMaterialEmissive()
|
74
|
+
{
|
75
|
+
return( vec3( 0, 0, 0 ) );
|
76
|
+
}
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
void computeFrontLayerColor( in vec3 normal, in vec3 lightDir, in vec3 lightDiffuse, in vec3 lightSpecular, in float materialIOR, float aoFactor )
|
81
|
+
{
|
82
|
+
#if UIC_ENABLE_CG_LIGHTING
|
83
|
+
layers[0].base += vec4( 0.0f, 0.0f, 0.0f, 1.0f );
|
84
|
+
layers[0].layer += kggxGlossyBSDF( layers[0].tanFrame, lightDir, viewDir, lightSpecular, materialIOR, roughness, roughness, scatter_reflect );
|
85
|
+
|
86
|
+
#endif
|
87
|
+
}
|
88
|
+
|
89
|
+
void computeFrontAreaColor( in mat3 lightFrame, vec3 lightPos, in float width, in float height, in vec4 lightDiffuse, in vec4 lightSpecular )
|
90
|
+
{
|
91
|
+
#if UIC_ENABLE_CG_LIGHTING
|
92
|
+
layers[0].base += vec4( 0.0f, 0.0f, 0.0f, 1.0f );
|
93
|
+
layers[0].layer += lightSpecular * sampleAreaGlossy( layers[0].tanFrame, varWorldPos, lightFrame, lightPos, width, height, viewDir, roughness, roughness );
|
94
|
+
|
95
|
+
#endif
|
96
|
+
}
|
97
|
+
|
98
|
+
void computeFrontLayerEnvironment( in vec3 normal, float aoFactor )
|
99
|
+
{
|
100
|
+
#if !UIC_ENABLE_LIGHT_PROBE
|
101
|
+
layers[0].base += vec4( 0.0f, 0.0f, 0.0f, 1.0f );
|
102
|
+
layers[0].layer += simpleGlossyBSDFEnvironment( layers[0].tanFrame, roughness, roughness, scatter_reflect );
|
103
|
+
|
104
|
+
#else
|
105
|
+
layers[0].base += vec4( 0.0f, 0.0f, 0.0f, 1.0f );
|
106
|
+
layers[0].layer += sampleGlossyAniso( layers[0].tanFrame, viewDir, roughness, roughness );
|
107
|
+
|
108
|
+
#endif
|
109
|
+
}
|
110
|
+
|
111
|
+
vec3 computeBackMaterialEmissive()
|
112
|
+
{
|
113
|
+
return( vec3(0, 0, 0) );
|
114
|
+
}
|
115
|
+
|
116
|
+
|
117
|
+
|
118
|
+
void computeBackLayerColor( in vec3 normal, in vec3 lightDir, in vec3 lightDiffuse, in vec3 lightSpecular, in float materialIOR, float aoFactor )
|
119
|
+
{
|
120
|
+
#if UIC_ENABLE_CG_LIGHTING
|
121
|
+
layers[0].base += vec4( 0.0, 0.0, 0.0, 1.0 );
|
122
|
+
layers[0].layer += vec4( 0.0, 0.0, 0.0, 1.0 );
|
123
|
+
#endif
|
124
|
+
}
|
125
|
+
|
126
|
+
void computeBackAreaColor( in mat3 lightFrame, vec3 lightPos, in float width, in float height, in vec4 lightDiffuse, in vec4 lightSpecular )
|
127
|
+
{
|
128
|
+
#if UIC_ENABLE_CG_LIGHTING
|
129
|
+
layers[0].base += vec4( 0.0, 0.0, 0.0, 1.0 );
|
130
|
+
layers[0].layer += vec4( 0.0, 0.0, 0.0, 1.0 );
|
131
|
+
#endif
|
132
|
+
}
|
133
|
+
|
134
|
+
void computeBackLayerEnvironment( in vec3 normal, float aoFactor )
|
135
|
+
{
|
136
|
+
#if !UIC_ENABLE_LIGHT_PROBE
|
137
|
+
layers[0].base += vec4( 0.0, 0.0, 0.0, 1.0 );
|
138
|
+
layers[0].layer += vec4( 0.0, 0.0, 0.0, 1.0 );
|
139
|
+
#else
|
140
|
+
layers[0].base += vec4( 0.0, 0.0, 0.0, 1.0 );
|
141
|
+
layers[0].layer += vec4( 0.0, 0.0, 0.0, 1.0 );
|
142
|
+
#endif
|
143
|
+
}
|
144
|
+
|
145
|
+
float computeIOR()
|
146
|
+
{
|
147
|
+
return( false ? 1.0f : luminance( vec3( 1, 1, 1 ) ) );
|
148
|
+
}
|
149
|
+
|
150
|
+
float evalCutout()
|
151
|
+
{
|
152
|
+
return( 1.000000 );
|
153
|
+
}
|
154
|
+
|
155
|
+
vec3 computeNormal()
|
156
|
+
{
|
157
|
+
return( normal );
|
158
|
+
}
|
159
|
+
|
160
|
+
void computeTemporaries()
|
161
|
+
{
|
162
|
+
}
|
163
|
+
|
164
|
+
vec4 computeLayerWeights( in float alpha )
|
165
|
+
{
|
166
|
+
vec4 color;
|
167
|
+
color = fresnelLayer( normal, vec3( 25.65, 25.65, 25.65 ), 1.000000, vec4( metal_color, 1.0).rgb, layers[0].layer, layers[0].base, alpha );
|
168
|
+
return color;
|
169
|
+
}
|
170
|
+
|
171
|
+
|
172
|
+
void main(void)
|
173
|
+
{
|
174
|
+
initializeBaseFragmentVariables();
|
175
|
+
computeTemporaries();
|
176
|
+
normal = normalize( computeNormal() );
|
177
|
+
|
178
|
+
// clear layers
|
179
|
+
layers[0].base = vec4(0.0, 0.0, 0.0, 1.0);
|
180
|
+
layers[0].layer = vec4(0.0, 0.0, 0.0, 1.0);
|
181
|
+
layers[0].tanFrame = orthoNormalize( mat3( tangent, cross(normal, tangent), normal ) );
|
182
|
+
|
183
|
+
float alpha = clamp( evalCutout(), 0.0, 1.0 );
|
184
|
+
#include "customMaterialFragBodyAO.glsllib"
|
185
|
+
fragColor = rgba;
|
186
|
+
}
|
187
|
+
</FragmentShader>
|
188
|
+
</Shader>
|
189
|
+
</Shaders>
|
190
|
+
<Passes >
|
191
|
+
<Pass >
|
192
|
+
</Pass>
|
193
|
+
</Passes>
|
194
|
+
</Material>
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<UIP version="3" >
|
3
|
+
<Project >
|
4
|
+
<ProjectSettings author="" company="" presentationWidth="800" presentationHeight="480" maintainAspect="False" />
|
5
|
+
<Graph >
|
6
|
+
<Scene id="Scene" >
|
7
|
+
<Layer id="Layer" >
|
8
|
+
<Camera id="Camera" />
|
9
|
+
<Light id="Light" />
|
10
|
+
<Model id="Sphere" >
|
11
|
+
<Material id="Material" />
|
12
|
+
</Model>
|
13
|
+
<Model id="Sphere2" >
|
14
|
+
<Material id="Material_001" />
|
15
|
+
</Model>
|
16
|
+
<Model id="Cube" >
|
17
|
+
<Material id="Material_002" />
|
18
|
+
</Model>
|
19
|
+
</Layer>
|
20
|
+
</Scene>
|
21
|
+
</Graph>
|
22
|
+
<Logic >
|
23
|
+
<State name="Master Slide" component="#Scene" >
|
24
|
+
<Add ref="#Layer" />
|
25
|
+
<Add ref="#Camera" />
|
26
|
+
<Add ref="#Light" />
|
27
|
+
<Add ref="#Sphere" name="Sphere" position="-150 60 0" sourcepath="#Sphere" />
|
28
|
+
<Add ref="#Material" diffuse="0 0.752941 0" />
|
29
|
+
<Add ref="#Cube" name="Cube" position="150 0 0" rotation="-30 60 -20" sourcepath="#Cube" />
|
30
|
+
<Add ref="#Material_002" name="Material" diffuse="0.5 0 0" />
|
31
|
+
<State id="Scene-Slide1" name="Slide1" />
|
32
|
+
<State id="Scene-Slide2" name="Slide2" initialplaystate="Play" playmode="Stop at end" playthroughto="Previous" >
|
33
|
+
<Add ref="#Sphere2" name="Sphere2" position="-150 -60 0" sourcepath="#Sphere" />
|
34
|
+
<Add ref="#Material_001" diffuse="0 1 1" />
|
35
|
+
</State>
|
36
|
+
</State>
|
37
|
+
</Logic>
|
38
|
+
</Project>
|
39
|
+
</UIP>
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#!/usr/bin/env ruic
|
2
|
+
metadata 'MetaData.xml' # optional; also may be set via -m flag
|
3
|
+
uia 'projects/BMW_Cluster/BMW_Cluster.uia' # required before other commands
|
4
|
+
|
5
|
+
show "Uh oh!", app.errors if app.errors?
|
6
|
+
|
7
|
+
assert app.filename == 'BMW_Cluster.uia'
|
8
|
+
assert app.assets.length==10, "There should be 10 assets"
|
9
|
+
assert app.behaviors.length==3
|
10
|
+
assert app.presentations.length==6
|
11
|
+
|
12
|
+
assert app['#logic']
|
13
|
+
assert app['#logic'].datamodel=='{output=output}'
|
14
|
+
assert app['#logic']==app['states/logic.scxml']
|
15
|
+
assert app['#logic']==app['./states/logic.scxml']
|
16
|
+
assert app['#logic']==app['../BMW_Cluster/states/logic.scxml']
|
17
|
+
|
18
|
+
main = app['#main'] # Look up a presentation by asset id
|
19
|
+
assert main == app.main_presentation # …or ask for the main rendered presentation
|
20
|
+
assert main.filename == 'BMW_Cluster.uip' # You can also ask for the full path via .file
|
21
|
+
assert main == app['BMW_Cluster.uip'] # Look up a presentation by asset id
|
22
|
+
|
23
|
+
assert !app['beejonkers'] # If an asset id doesn't exist, you'll get nil
|
24
|
+
|
25
|
+
scene = app/'main:Scene'
|
26
|
+
assert scene
|
27
|
+
assert scene==main.scene
|
28
|
+
assert scene.type == 'Scene'
|
29
|
+
assert scene.name == 'Scene'
|
30
|
+
assert scene['name'].value == 'Scene'
|
31
|
+
|
32
|
+
# Find an element based on path, prefixed with asset id
|
33
|
+
sm = app/'main:Scene.ClassicContent.ClassicContent.SimpleMedia'
|
34
|
+
assert sm.name == 'SimpleMedia'
|
35
|
+
assert sm.type == 'Model'
|
36
|
+
assert sm.path == 'main:Scene.ClassicContent.ClassicContent.SimpleMedia'
|
37
|
+
|
38
|
+
assert sm==main/'Scene.ClassicContent.ClassicContent.SimpleMedia'
|
39
|
+
|
40
|
+
assert sm.component == (main/'Scene.ClassicContent.ClassicContent')
|
41
|
+
assert sm.component.slides.length==2
|
42
|
+
assert sm.component.slides[0].name == 'Master Slide'
|
43
|
+
assert sm.component.slides[0].index == 0
|
44
|
+
assert sm.component.slides[2].name == 'CarStatus'
|
45
|
+
assert sm.component.slides[2].index == 2
|
46
|
+
assert sm.component.slides['CarStatus'].name == 'CarStatus'
|
47
|
+
assert sm.component.slides['CarStatus'] == sm.component.slides[2]
|
48
|
+
|
49
|
+
assert sm['endtime',0]==250
|
50
|
+
assert sm['endtime',1]==500
|
51
|
+
assert sm['endtime','SimpleMedia']==500
|
52
|
+
assert sm['endtime','CarStatus' ]==250
|
53
|
+
assert sm['endtime',99].nil?
|
54
|
+
|
55
|
+
assert sm['position'].linked?
|
56
|
+
assert !sm['endtime'].linked?
|
57
|
+
assert sm['endtime'].values == [250,500,250]
|
58
|
+
assert sm['endtime'].value == 250
|
59
|
+
|
60
|
+
assert sm['endtime',1]==500
|
61
|
+
assert sm['endtime','SimpleMedia']==500
|
62
|
+
assert sm['endtime','CarStatus' ]==250
|
63
|
+
|
64
|
+
sm['endtime','CarStatus'] = 750
|
65
|
+
assert sm['endtime','SimpleMedia']==500
|
66
|
+
assert sm['endtime','CarStatus' ]==750
|
67
|
+
|
68
|
+
sm['endtime'] = 100
|
69
|
+
assert sm['endtime',0]==100
|
70
|
+
assert sm['endtime',1]==100
|
71
|
+
assert sm['endtime',2]==100
|
72
|
+
|
73
|
+
assert sm['position',0].x==0
|
74
|
+
assert sm['scale',0].y == 2.88
|
75
|
+
|
76
|
+
sm['position',0].x=42
|
77
|
+
assert sm['position',0].x==42
|
78
|
+
|
79
|
+
sm['position',0].y=17
|
80
|
+
assert sm['position',0].y==17
|
81
|
+
assert sm['position',0].x==42
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
FileUtils.copy_entry('projects/ReferencedMaterials','projects/_RefMat',false,false,true)
|
3
|
+
|
4
|
+
metadata 'MetaData.xml'
|
5
|
+
|
6
|
+
uia 'projects/_RefMat/ReferencedMaterials.uia'
|
7
|
+
show app.errors if app.errors?
|
8
|
+
|
9
|
+
layer = app/'main:Scene.Layer'
|
10
|
+
cubemat = layer/"Cube"/"Material"
|
11
|
+
|
12
|
+
# Ensure that the diffuse attribute is linked and present on multiple slides
|
13
|
+
assert cubemat['diffuse'].linked?
|
14
|
+
assert cubemat.has_slide?(0)
|
15
|
+
assert cubemat.has_slide?(1)
|
16
|
+
assert cubemat.has_slide?(2)
|
17
|
+
assert cubemat['diffuse',1].r == 0.5
|
18
|
+
assert cubemat['diffuse',2].r == 0.5
|
19
|
+
|
20
|
+
# When we do not unlink, values remain shared
|
21
|
+
cubemat['diffuse',1].r = 1
|
22
|
+
cubemat['diffuse',2].r = 0.2
|
23
|
+
assert cubemat['diffuse',1].r == cubemat['diffuse',2].r
|
24
|
+
|
25
|
+
# Ensure that we can unlink an attribute and vary the values per slide
|
26
|
+
cubemat['diffuse'].unlink
|
27
|
+
assert !cubemat['diffuse'].linked?
|
28
|
+
cubemat['diffuse',1].r = 1
|
29
|
+
cubemat['diffuse',2].r = 0.2
|
30
|
+
assert cubemat['diffuse',1].r == 1
|
31
|
+
assert cubemat['diffuse',2].r == 0.2
|
32
|
+
|
33
|
+
# We can swap a material with a referenced material
|
34
|
+
model = cubemat.parent
|
35
|
+
assert model
|
36
|
+
ref = cubemat.replace_with_referenced_material
|
37
|
+
assert cubemat.parent.nil? # The old material is removed from the graph
|
38
|
+
assert ref.parent==model # The new material is where the old was
|
39
|
+
assert ref['id'] == cubemat['id'] # The new material has the same id and name
|
40
|
+
assert ref.name == 'Material'
|
41
|
+
assert ref['referencedmaterial',0].object.nil? # New referenced materials start out with no reference
|
42
|
+
assert ref['referencedmaterial',0].type == :absolute # New references default to absolute
|
43
|
+
|
44
|
+
ref['referencedmaterial'].unlink
|
45
|
+
%w[Sphere Sphere2].each.with_index do |name,s|
|
46
|
+
# You can set a reference directly to an object, or alternatively
|
47
|
+
# ref['referencedmaterial',1].object = layer/name/"Material"
|
48
|
+
ref['referencedmaterial',s+1] = layer/name/"Material"
|
49
|
+
ref['referencedmaterial',s+1].type = :path
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
app.save_all!
|