Skip to content

Commit b06ca29

Browse files
authored
New Sample: Realistic Lighting and Shadows (#528)
* Set up sample with Display a Scene application code * Added style.css * Updated arcgis runtime version 100.9.0-2782 in build.gradle * Removed "Sample" from the project name, java files * Created a controller and view with FXML * Fixed button event handlers * Fixed formatting and removed unused selectors in style.css * Update JavaFX modules and version * Change camera, scene layer to Portland buildings * Update calendar to PST * Update image and remove unused imports * Rename files * Update gradle version, import order * Refactor control styling in main.fxml to style.css * Rename folder * Rename project in settings.gradle * Remove setTimeLabel * Add slider padding * Add combo box * Represent time as ints * Add string converter and list cell classes * Revert "Add string converter and list cell classes" This reverts commit 48be059. * Add string converter and list cell classes * Add javadoc comments, slider css styling, and image * Refactor readme and controller * Remove slider styling from style.css * Update README.metadata.json using metadata-updater script * Remove slider css styling, update readme.metadata.json and class access modifiers in controller
1 parent 14ee78b commit b06ca29

File tree

14 files changed

+761
-0
lines changed

14 files changed

+761
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Realistic lighting and shadows
2+
3+
Show realistic lighting and shadows for the time of day.
4+
5+
![Image of realistic lighting and shadows](RealisticLightingAndShadows.png)
6+
7+
## Use case
8+
9+
You can use realistic lighting to evaluate the shadow impact of buildings and utility infrastructure on the surrounding community. This could be useful for civil engineers and urban planners, or for events management assessing the impact of building shadows during an outdoor event.
10+
11+
## How to use the sample
12+
13+
Select one of the three available lighting options to display that lighting effect. Adjust the slider to show the lighting effect for a particular time of day. The 3D buildings will display shadows when "Sun light with shadows" is selected.
14+
15+
## How it works
16+
17+
1. Create an `ArcGISScene` and display it in a `SceneView`.
18+
2. Create a `Calendar` to define the time of day.
19+
3. Set the sun time to that calendar with `sceneView.setSunTime(calendar)`.
20+
4. Set the `LightingMode` of the scene view to `NO_LIGHT`, `LIGHT`, or `LIGHT_AND_SHADOWS` with `sceneView.setSunLighting(LightingMode)`.
21+
22+
## Relevant API
23+
24+
* ArcGISScene
25+
* LightingMode
26+
* SceneView.setSunLighting
27+
* SceneView.setSunTime
28+
29+
## Tags
30+
31+
3D, lighting, realism, realistic, rendering, shadows, sun, time
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"category": "Scene",
3+
"description": "Show realistic lighting and shadows for the time of day.",
4+
"ignore": false,
5+
"images": [
6+
"RealisticLightingAndShadows.png"
7+
],
8+
"keywords": [
9+
"3D",
10+
"lighting",
11+
"realism",
12+
"realistic",
13+
"rendering",
14+
"shadows",
15+
"sun",
16+
"time",
17+
"ArcGISScene",
18+
"LightingMode",
19+
"SceneView.setSunLighting",
20+
"SceneView.setSunTime"
21+
],
22+
"redirect_from": "",
23+
"relevant_apis": [
24+
"ArcGISScene",
25+
"LightingMode",
26+
"SceneView.setSunLighting",
27+
"SceneView.setSunTime"
28+
],
29+
"snippets": [
30+
"build/resources/main/realistic_lighting_and_shadows/main.fxml",
31+
"src/main/java/com/esri/samples/realistic_lighting_and_shadows/RealisticLightingAndShadowsController.java",
32+
"src/main/java/com/esri/samples/realistic_lighting_and_shadows/RealisticLightingAndShadowsSample.java",
33+
"src/main/resources/realistic_lighting_and_shadows/main.fxml"
34+
],
35+
"title": "Realistic lighting and shadows"
36+
}
2 MB
Loading
352 KB
Loading
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
plugins {
2+
id 'application'
3+
id 'org.openjfx.javafxplugin' version '0.0.5'
4+
}
5+
6+
group = 'com.esri.samples'
7+
8+
ext {
9+
arcgisVersion = '100.9.0-2838'
10+
}
11+
12+
javafx {
13+
version = "11.0.2"
14+
modules = ['javafx.controls','javafx.fxml']
15+
}
16+
17+
compileJava.options.encoding = 'UTF-8'
18+
19+
repositories {
20+
jcenter()
21+
maven {
22+
url 'https://esri.bintray.com/arcgis'
23+
}
24+
maven {
25+
url 'http://olympus.esri.com/artifactory/arcgisruntime-repo'
26+
}
27+
}
28+
29+
configurations {
30+
natives
31+
}
32+
33+
dependencies {
34+
compile "com.esri.arcgisruntime:arcgis-java:$arcgisVersion"
35+
natives "com.esri.arcgisruntime:arcgis-java-jnilibs:$arcgisVersion"
36+
natives "com.esri.arcgisruntime:arcgis-java-resources:$arcgisVersion"
37+
}
38+
39+
task copyNatives(type: Copy) {
40+
description = "Copies the arcgis native libraries into the project build directory for development."
41+
group = "build"
42+
configurations.natives.asFileTree.each {
43+
from(zipTree(it))
44+
}
45+
// store native libraries in a common location shared with other samples
46+
into "${System.properties.getProperty("user.home")}/.arcgis/$arcgisVersion"
47+
}
48+
49+
run {
50+
dependsOn copyNatives
51+
mainClassName = 'com.esri.samples.realistic_lighting_and_shadows.RealisticLightingAndShadowsLauncher'
52+
}
53+
54+
jar {
55+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
56+
manifest {
57+
attributes("Main-Class": "$mainClassName")
58+
}
59+
from {
60+
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
61+
}
62+
}
63+
64+
task productionZip(type: Zip) {
65+
group = 'distribution'
66+
from copyNatives
67+
from jar.destinationDir
68+
into(project.name)
69+
baseName = project.name
70+
}
71+
72+
wrapper {
73+
gradleVersion = '6.5.1'
74+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
distributionBase=GRADLE_USER_HOME
2+
distributionPath=wrapper/dists
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip
4+
zipStoreBase=GRADLE_USER_HOME
5+
zipStorePath=wrapper/dists
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
#!/usr/bin/env sh
2+
3+
##############################################################################
4+
##
5+
## Gradle start up script for UN*X
6+
##
7+
##############################################################################
8+
9+
# Attempt to set APP_HOME
10+
# Resolve links: $0 may be a link
11+
PRG="$0"
12+
# Need this for relative symlinks.
13+
while [ -h "$PRG" ] ; do
14+
ls=`ls -ld "$PRG"`
15+
link=`expr "$ls" : '.*-> \(.*\)$'`
16+
if expr "$link" : '/.*' > /dev/null; then
17+
PRG="$link"
18+
else
19+
PRG=`dirname "$PRG"`"/$link"
20+
fi
21+
done
22+
SAVED="`pwd`"
23+
cd "`dirname \"$PRG\"`/" >/dev/null
24+
APP_HOME="`pwd -P`"
25+
cd "$SAVED" >/dev/null
26+
27+
APP_NAME="Gradle"
28+
APP_BASE_NAME=`basename "$0"`
29+
30+
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31+
DEFAULT_JVM_OPTS=""
32+
33+
# Use the maximum available, or set MAX_FD != -1 to use that value.
34+
MAX_FD="maximum"
35+
36+
warn () {
37+
echo "$*"
38+
}
39+
40+
die () {
41+
echo
42+
echo "$*"
43+
echo
44+
exit 1
45+
}
46+
47+
# OS specific support (must be 'true' or 'false').
48+
cygwin=false
49+
msys=false
50+
darwin=false
51+
nonstop=false
52+
case "`uname`" in
53+
CYGWIN* )
54+
cygwin=true
55+
;;
56+
Darwin* )
57+
darwin=true
58+
;;
59+
MINGW* )
60+
msys=true
61+
;;
62+
NONSTOP* )
63+
nonstop=true
64+
;;
65+
esac
66+
67+
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
68+
69+
# Determine the Java command to use to start the JVM.
70+
if [ -n "$JAVA_HOME" ] ; then
71+
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
72+
# IBM's JDK on AIX uses strange locations for the executables
73+
JAVACMD="$JAVA_HOME/jre/sh/java"
74+
else
75+
JAVACMD="$JAVA_HOME/bin/java"
76+
fi
77+
if [ ! -x "$JAVACMD" ] ; then
78+
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
79+
80+
Please set the JAVA_HOME variable in your environment to match the
81+
location of your Java installation."
82+
fi
83+
else
84+
JAVACMD="java"
85+
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86+
87+
Please set the JAVA_HOME variable in your environment to match the
88+
location of your Java installation."
89+
fi
90+
91+
# Increase the maximum file descriptors if we can.
92+
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
93+
MAX_FD_LIMIT=`ulimit -H -n`
94+
if [ $? -eq 0 ] ; then
95+
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
96+
MAX_FD="$MAX_FD_LIMIT"
97+
fi
98+
ulimit -n $MAX_FD
99+
if [ $? -ne 0 ] ; then
100+
warn "Could not set maximum file descriptor limit: $MAX_FD"
101+
fi
102+
else
103+
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
104+
fi
105+
fi
106+
107+
# For Darwin, add options to specify how the application appears in the dock
108+
if $darwin; then
109+
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110+
fi
111+
112+
# For Cygwin, switch paths to Windows format before running java
113+
if $cygwin ; then
114+
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115+
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
116+
JAVACMD=`cygpath --unix "$JAVACMD"`
117+
118+
# We build the pattern for arguments to be converted via cygpath
119+
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120+
SEP=""
121+
for dir in $ROOTDIRSRAW ; do
122+
ROOTDIRS="$ROOTDIRS$SEP$dir"
123+
SEP="|"
124+
done
125+
OURCYGPATTERN="(^($ROOTDIRS))"
126+
# Add a user-defined pattern to the cygpath arguments
127+
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128+
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129+
fi
130+
# Now convert the arguments - kludge to limit ourselves to /bin/sh
131+
i=0
132+
for arg in "$@" ; do
133+
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134+
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135+
136+
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137+
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138+
else
139+
eval `echo args$i`="\"$arg\""
140+
fi
141+
i=$((i+1))
142+
done
143+
case $i in
144+
(0) set -- ;;
145+
(1) set -- "$args0" ;;
146+
(2) set -- "$args0" "$args1" ;;
147+
(3) set -- "$args0" "$args1" "$args2" ;;
148+
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149+
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150+
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151+
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152+
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153+
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154+
esac
155+
fi
156+
157+
# Escape application args
158+
save () {
159+
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160+
echo " "
161+
}
162+
APP_ARGS=$(save "$@")
163+
164+
# Collect all arguments for the java command, following the shell quoting and substitution rules
165+
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166+
167+
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168+
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169+
cd "$(dirname "$0")"
170+
fi
171+
172+
exec "$JAVACMD" "$@"

0 commit comments

Comments
 (0)