<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.rifidi.net/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.rifidi.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jochen</id>
		<title>RifidiWiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.rifidi.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jochen"/>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Special:Contributions/Jochen"/>
		<updated>2026-05-15T17:54:04Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.23.1</generator>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Designer_User%27s_Guide</id>
		<title>Designer User's Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Designer_User%27s_Guide"/>
				<updated>2008-06-05T18:34:39Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* GPIO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:userDoc]]&lt;br /&gt;
&lt;br /&gt;
=Requirements=&lt;br /&gt;
*Microsoft Windows 2000/XP/2003 or Linux (Ubuntu, Red Hat, SuSe)&lt;br /&gt;
*Sun Java Runtime Environment &amp;gt; 1.6.4 (J2SE 6.0)&lt;br /&gt;
*'''IMPORTANT:''' does not work with earlier JRE versions.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
Designer is packaged in a standard installer, which makes installation very easy.&lt;br /&gt;
&lt;br /&gt;
# Download the latest version of Rifidi Emulator from http://sourceforge.net/projects/rifidi/&lt;br /&gt;
# Double click to run the install.  Follow the on screen instructions.&lt;br /&gt;
&lt;br /&gt;
=Launching Rifidi Designer=&lt;br /&gt;
&lt;br /&gt;
*Windows Users: Simply click the shortcut located in the Rifidi folder in the Start Menu/Programs folder.&lt;br /&gt;
*Linux Users: Double click the executable file located in the installation directory.&lt;br /&gt;
&lt;br /&gt;
=Getting Started - Example Designer Simulation=&lt;br /&gt;
==Create Layout==&lt;br /&gt;
#Once the program is loaded, the main UI will be present.  [[Image:Screen1.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
#To create a new layout, click the 'file' and 'new'.  &lt;br /&gt;
#Enter in a layout name, select size of the room (64x64 or 256x256 square feet) and click 'Finish'.[[Image:Screen2.png |none|thumb|400px|Create New Layout]]  &lt;br /&gt;
#A new empty layout will be displayed in the UI ready for use [[Image:Screen3.png |none|thumb|800px|New Layout]]&lt;br /&gt;
&lt;br /&gt;
==Add a Conveyor==&lt;br /&gt;
#Click on the 'Components' Tab to view the library of all available components to add to a layout.[[Image:Screen4.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
#If the list is not expanded already, Click on the '+' next to RFID Base Models to expand the list. [[Image:Screen5.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
#Highlight the 'Conveyor' component and drag and drop to the 'Layout Designer'&lt;br /&gt;
#The name and speed of the new component will show up in the &amp;quot;properties&amp;quot; tab at the bottom.  You can change these values if you wish.  &lt;br /&gt;
#You will now see the component displayed in the 'Layout Designer'. ''Note: For placement refer to the Component Placement Section''&lt;br /&gt;
&lt;br /&gt;
==Add a Push Arm==&lt;br /&gt;
#Click on the 'Components' Tab to view the library of all available components to add to a layout.&lt;br /&gt;
#If the list is not expanded already, Click on the '+' next to RFID Base Models to expand the list.&lt;br /&gt;
#Highlight the 'Push Arm' component and drag and drop to the 'Layout Designer'&lt;br /&gt;
#The name and speed of the push-arm are given in the bottom tab marked &amp;quot;properties&amp;quot;.  You can edit them if you wish.  &lt;br /&gt;
#You will now see the component displayed in the 'Layout Designer'. ''Note: For placement refer to the Component Placement Section''&lt;br /&gt;
#Right-click it and select Turn On to activate it&lt;br /&gt;
''Note: See the push-arm section for instructions on how to get a push-arm working''&lt;br /&gt;
&lt;br /&gt;
==Add a Gate==&lt;br /&gt;
#Click on the 'Components' Tab to view the library of all available components to add to a layout.&lt;br /&gt;
#If the list is not expanded already, Click on the '+' next to RFID Base Models to expand the list.&lt;br /&gt;
#Highlight the 'Gate' component and drag and drop to the 'Layout Designer'&lt;br /&gt;
#Enter a name for the component, select a reader type and click 'Next'. &lt;br /&gt;
#Enter a name for the reader and click 'Finish'.&lt;br /&gt;
#You will now see the component displayed in the 'Layout Designer'. ''Note: For placement refer to the Component Placement Section''&lt;br /&gt;
&lt;br /&gt;
==Add a Box Producer==&lt;br /&gt;
#Click on the 'Components' Tab to view the library of all available components to add to a layout.&lt;br /&gt;
#If the list is not expanded already, Click on the '+' next to RFID Base Models to expand the list.&lt;br /&gt;
#Highlight one of the 'Producer' components (choose based on the type of tag you wish to produce from this producer) and drag and drop to the 'Layout Designer'&lt;br /&gt;
#The name and speed of the pusharm are given in the bottom tab marked &amp;quot;properties&amp;quot;. You can edit them if you wish.&lt;br /&gt;
#You will now see the component displayed in the 'Layout Designer'. ''Note: For placement refer to the Component Placement Section''&lt;br /&gt;
&lt;br /&gt;
==Component Placement==&lt;br /&gt;
===Conveyor Placement===&lt;br /&gt;
#In the Layout Designer View, click on the conveyor. ''Note: Yellow arrows will show the direction of the conveyor''&lt;br /&gt;
#Move the conveyor to the desired location by holding the left mouse button down. ''Note: The area below the component will be highlighted in green when placement is valid and red when placement is invalid.''&lt;br /&gt;
#Release the left mouse button once the desired location has been reached.&lt;br /&gt;
#If placement is valid the component will move to the new location and if placement is invalid the component will move to the prior valid location&lt;br /&gt;
&lt;br /&gt;
===Box Producer Placement===&lt;br /&gt;
#In the Layout Designer View, click on the Box Producer. &lt;br /&gt;
#Move the producer to the desired location by holding the left mouse button down. ''Note: The area below the component will be highlighted.''&lt;br /&gt;
#Once the producer is over the end of the conveyor, release the left mouse button to finish placement.&lt;br /&gt;
&lt;br /&gt;
===Push Arm Placement===&lt;br /&gt;
#In the Layout Designer View, click on the Push Arm. &lt;br /&gt;
#Move the gate to the desired location by holding the left mouse button down. ''Note: The area below the component will be highlighted.''&lt;br /&gt;
#Once the push arm is next to the right end of the conveyor, release the left mouse button.&lt;br /&gt;
#To finalize the placement, verify the push arm is pointed in the direction to push over the conveyor (Look for shaded area to be over conveyor). If not then you can rotate the component by 90 degrees by clicking on the component and then clicking on the rotate 90 degrees button in the toolbar. &lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
===Gate Placement===&lt;br /&gt;
#In the Layout Designer View, click on the Gate. &lt;br /&gt;
#Verify the space between the gate's legs can fit over the conveyor based on the conveyor's placement. If not then click on the gate and rotate 90 degrees by clicking on the 90 degree rotate button in the toolbar.&lt;br /&gt;
#Move the gate to the desired location by holding the left mouse button down. ''Note: The area below the component will be highlighted in green when placement is valid and red when placement is invalid.''&lt;br /&gt;
#Once the gate is over the center of the conveyor, release the left mouse button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Push Arm Instructions==&lt;br /&gt;
===Placing===&lt;br /&gt;
Place a push arm, and place a gate with an Alien reader near the push arm.  Be sure to select the &amp;quot;Enable GPI/O for this reader in the New Reader Wizard.  It should look something like this:&lt;br /&gt;
[[Image:push1.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
===GPIO===&lt;br /&gt;
The push arm works by an Alien or LLRP (or any other reader that supports GPIO) reader sending a GPIO signal to the push arm.  To connect up the GPIO, we first have to go to the GPIO perspective.  Click on Perspectives -&amp;gt; GPIO.  You should get a window that looks something like this:&lt;br /&gt;
[[Image:push2.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
# Expand the Palette if it isn't already open by pressing the arrow on the right.  &lt;br /&gt;
# Select the &amp;quot;Solid Connection&amp;quot; button in the palette and drag an arrow it from the Alien reader on top (in blue) to the push arm you want to move (in red).  You can also just click on the alien and click on the push arm, and an arrow will be shown connecting the two.  &lt;br /&gt;
#Don't forget to turn on the push arm and the gate. Other wise nothing will happen.&lt;br /&gt;
After that, the push arm should fire when you want it to.&lt;br /&gt;
&lt;br /&gt;
==Create a Group==&lt;br /&gt;
#Click on the Layout Navigator tab. &lt;br /&gt;
#Right click on Grouped Components&lt;br /&gt;
#In the right click menu, click on create group&lt;br /&gt;
#In the create group wizard, enter in a group name (example: group1)&lt;br /&gt;
#You will now see the new group listed under Grouped Components&lt;br /&gt;
&lt;br /&gt;
==Add Components to Group==&lt;br /&gt;
#Click on the Layout Navigator tab. &lt;br /&gt;
#Click on the '+' next to Ungrouped Components to expand the ungrouped components list if not expanded already.&lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#In the Ungrouped Components list, click on the conveyor component (Example: conveyor1).&lt;br /&gt;
#Hold the left mouse button down on the conveyor component and drag and drop into the Group (Example: group1)&lt;br /&gt;
#Repeat steps 2 - 4 for each or the remaining ungrouped components&lt;br /&gt;
#Once all the steps have been completed, you will now have all the components assigned to a group. (Example: group1) Now you can move the components around in a group in the Layout Designer instead of having to move each component seperately. There are other benefits of groups which will be described in later sections.&lt;br /&gt;
&lt;br /&gt;
==Turn On Components==&lt;br /&gt;
There are two ways to turn on components:&lt;br /&gt;
&lt;br /&gt;
#Click on the Layout Navigator tab if not already selected. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group name (Example: group1) to expand the group if not expanded already.&lt;br /&gt;
#Right click on the conveyor component&lt;br /&gt;
#In the conveyor component right click menu, click on turn On&lt;br /&gt;
#Repeat steps 3-4 for each component in the group&lt;br /&gt;
&lt;br /&gt;
or the short cut is to:&lt;br /&gt;
&lt;br /&gt;
#Click on the Layout Navigator tab if not already selected. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group name (Example: group1) to expand the group if not expanded already.&lt;br /&gt;
#Right click on group (Example: group1)&lt;br /&gt;
#In the group right click menu, click on Turn On&lt;br /&gt;
#This will Turn On all the components assigned to tha group&lt;br /&gt;
&lt;br /&gt;
You can now connect to the virtual reader (Alien, AWID, Symbol, LLRP) you created with a client such as telnet, client library, middleware or EdgeServer.&lt;br /&gt;
&lt;br /&gt;
==Start Simulation==&lt;br /&gt;
#On the Designer Toolbar, you can now click on the play button to start the simulation&lt;br /&gt;
#Once you start the simultaion you should now see boxes being produced and the conveyor and push arm moving at their defined rates.&lt;br /&gt;
#The client connected to the virtual reader should now report tags as the boxes pass through the gate's antenna.&lt;br /&gt;
&lt;br /&gt;
==Pause Simulation==&lt;br /&gt;
#On the Designer Toolbar, you can now click on the Pause button to start the simultaion&lt;br /&gt;
#Once you pause the simultaion you should now see boxes being produced and the conveyor and push arm moving pause, left in the previous state.&lt;br /&gt;
#The client connected to the virtual reader will continue to be connected.&lt;br /&gt;
&lt;br /&gt;
==Reset Simulation==&lt;br /&gt;
#On the Designer Toolbar, you can now click on the reset button to start the simultaion&lt;br /&gt;
#Once you reset the simultaion you should now see boxes being produced, the conveyor and push arm moving be reset&lt;br /&gt;
#The client connected to the virtual reader will continue to be connected.&lt;br /&gt;
&lt;br /&gt;
==Turn Off Components==&lt;br /&gt;
There are two ways to Turn Off components:&lt;br /&gt;
&lt;br /&gt;
#Click on the Layout Navigator tab if not already selected. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group name (Example: group1) to expand the group if not expanded already.&lt;br /&gt;
#Right click on the conveyor component&lt;br /&gt;
#In the conveyor component right click menu, click on Turn Off&lt;br /&gt;
#Repeat steps 3-4 for each component in the group&lt;br /&gt;
&lt;br /&gt;
or the short cut is to:&lt;br /&gt;
&lt;br /&gt;
#Click on the Layout Navigator tab if not already selected. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group name (Example: group1) to expand the group if not expanded already.&lt;br /&gt;
#Right click on group (Example: group1)&lt;br /&gt;
#In the group right click menu, click on Turn Off&lt;br /&gt;
#This will Turn Off all the components assigned to the group&lt;br /&gt;
&lt;br /&gt;
The client should now disconnect from the virtual reader as if the device has been powered off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Add Components to Group==&lt;br /&gt;
#Click on the Layout Navigator tab. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group (Example: groups1) to expand the assigned grouped component list if not expanded already.&lt;br /&gt;
#Click on the conveyor component.&lt;br /&gt;
#At the bottom below the Layout Designer view you will now see the conveyor component's property view.&lt;br /&gt;
#Click on the speed property and change the value.&lt;br /&gt;
#The next time you Turn On the components (if not on already) and play the simulation you will see the new speed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Edit Box Producer Rate===&lt;br /&gt;
#Click on the Layout Navigator tab. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group (Example: groups1) to expand the assigned grouped component list if not expanded already.&lt;br /&gt;
#Click on the box producer component.&lt;br /&gt;
#At the bottom below the Layout Designer view you will now see the box producer component's property view.&lt;br /&gt;
#Click on the rate property and change the value.&lt;br /&gt;
#The next time you Turn On the components (if not on already) and play the simulation you will see the new rate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Layout Navigation=&lt;br /&gt;
* The layout navigation is a tab on the left side of the Designer screen.  It contains 3 collapsible lists of components:&lt;br /&gt;
# Grouped Components&lt;br /&gt;
# Ungrouped Components&lt;br /&gt;
# Generated Components&lt;br /&gt;
==Ungrouped Components==&lt;br /&gt;
* This is where all the ungrouped components are listed.  Click on the plus sign to see them.  &lt;br /&gt;
* You can also turn off and turn on all of the grouped components at the same time.  To do this, right click on the &amp;quot;ungrouped components&amp;quot; and select &amp;quot;turn off&amp;quot; or &amp;quot;turn on&amp;quot;.  &lt;br /&gt;
[[Image:Screen6.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
==Grouped Components==&lt;br /&gt;
* This is where all of the grouped components are listed.  Click on the plus sign to see all of the groups, and click on the plus sign on individual groups to list the components in those groups.  &lt;br /&gt;
* You can turn on and turn off everything in a group by right clicking on the group and clicking &amp;quot;turn on&amp;quot; or &amp;quot;turn off&amp;quot;.  &lt;br /&gt;
[[Image:Screen7.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
==Generated Components==&lt;br /&gt;
* This is where you can find all of the components generated by a producer.&lt;br /&gt;
* You can delete these components by right clicking on them and selecting &amp;quot;Delete Entity&amp;quot;.&lt;br /&gt;
[[Image:Screen8.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
&lt;br /&gt;
=MiniMap=&lt;br /&gt;
The MiniMap is on the lower left of the Designer screen.  If you don't see it, click on views -&amp;gt; Show MiniMap.  &lt;br /&gt;
[[Image:Screen9.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
==Navigation==&lt;br /&gt;
* You can navigate around the MiniMap by clicking and dragging the red box where you want to go.  This will cause the overhead camera to shift where you drag it to.  &lt;br /&gt;
* You can also simply click on the map where you want the camera to be.&lt;br /&gt;
&lt;br /&gt;
==Zoom in/Zoom out==&lt;br /&gt;
* You can zoom in and zoom out by clicking on the MiniMap and moving the mouse wheel backwards and forwards.&lt;br /&gt;
&lt;br /&gt;
=Camera=&lt;br /&gt;
The camera is set at a fixed angle, but it can be zoomed in and zoomed out, and it can also be moved on the MiniMap.  &lt;br /&gt;
&lt;br /&gt;
==Zoom in/Zoom out==&lt;br /&gt;
*  You can zoom in and zoom out by clicking on the main view screen and moving the mouse wheel backwards and forwards.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Designer_User%27s_Guide</id>
		<title>Designer User's Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Designer_User%27s_Guide"/>
				<updated>2008-06-05T18:33:53Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* Add a Push Arm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:userDoc]]&lt;br /&gt;
&lt;br /&gt;
=Requirements=&lt;br /&gt;
*Microsoft Windows 2000/XP/2003 or Linux (Ubuntu, Red Hat, SuSe)&lt;br /&gt;
*Sun Java Runtime Environment &amp;gt; 1.6.4 (J2SE 6.0)&lt;br /&gt;
*'''IMPORTANT:''' does not work with earlier JRE versions.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
Designer is packaged in a standard installer, which makes installation very easy.&lt;br /&gt;
&lt;br /&gt;
# Download the latest version of Rifidi Emulator from http://sourceforge.net/projects/rifidi/&lt;br /&gt;
# Double click to run the install.  Follow the on screen instructions.&lt;br /&gt;
&lt;br /&gt;
=Launching Rifidi Designer=&lt;br /&gt;
&lt;br /&gt;
*Windows Users: Simply click the shortcut located in the Rifidi folder in the Start Menu/Programs folder.&lt;br /&gt;
*Linux Users: Double click the executable file located in the installation directory.&lt;br /&gt;
&lt;br /&gt;
=Getting Started - Example Designer Simulation=&lt;br /&gt;
==Create Layout==&lt;br /&gt;
#Once the program is loaded, the main UI will be present.  [[Image:Screen1.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
#To create a new layout, click the 'file' and 'new'.  &lt;br /&gt;
#Enter in a layout name, select size of the room (64x64 or 256x256 square feet) and click 'Finish'.[[Image:Screen2.png |none|thumb|400px|Create New Layout]]  &lt;br /&gt;
#A new empty layout will be displayed in the UI ready for use [[Image:Screen3.png |none|thumb|800px|New Layout]]&lt;br /&gt;
&lt;br /&gt;
==Add a Conveyor==&lt;br /&gt;
#Click on the 'Components' Tab to view the library of all available components to add to a layout.[[Image:Screen4.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
#If the list is not expanded already, Click on the '+' next to RFID Base Models to expand the list. [[Image:Screen5.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
#Highlight the 'Conveyor' component and drag and drop to the 'Layout Designer'&lt;br /&gt;
#The name and speed of the new component will show up in the &amp;quot;properties&amp;quot; tab at the bottom.  You can change these values if you wish.  &lt;br /&gt;
#You will now see the component displayed in the 'Layout Designer'. ''Note: For placement refer to the Component Placement Section''&lt;br /&gt;
&lt;br /&gt;
==Add a Push Arm==&lt;br /&gt;
#Click on the 'Components' Tab to view the library of all available components to add to a layout.&lt;br /&gt;
#If the list is not expanded already, Click on the '+' next to RFID Base Models to expand the list.&lt;br /&gt;
#Highlight the 'Push Arm' component and drag and drop to the 'Layout Designer'&lt;br /&gt;
#The name and speed of the push-arm are given in the bottom tab marked &amp;quot;properties&amp;quot;.  You can edit them if you wish.  &lt;br /&gt;
#You will now see the component displayed in the 'Layout Designer'. ''Note: For placement refer to the Component Placement Section''&lt;br /&gt;
#Right-click it and select Turn On to activate it&lt;br /&gt;
''Note: See the push-arm section for instructions on how to get a push-arm working''&lt;br /&gt;
&lt;br /&gt;
==Add a Gate==&lt;br /&gt;
#Click on the 'Components' Tab to view the library of all available components to add to a layout.&lt;br /&gt;
#If the list is not expanded already, Click on the '+' next to RFID Base Models to expand the list.&lt;br /&gt;
#Highlight the 'Gate' component and drag and drop to the 'Layout Designer'&lt;br /&gt;
#Enter a name for the component, select a reader type and click 'Next'. &lt;br /&gt;
#Enter a name for the reader and click 'Finish'.&lt;br /&gt;
#You will now see the component displayed in the 'Layout Designer'. ''Note: For placement refer to the Component Placement Section''&lt;br /&gt;
&lt;br /&gt;
==Add a Box Producer==&lt;br /&gt;
#Click on the 'Components' Tab to view the library of all available components to add to a layout.&lt;br /&gt;
#If the list is not expanded already, Click on the '+' next to RFID Base Models to expand the list.&lt;br /&gt;
#Highlight one of the 'Producer' components (choose based on the type of tag you wish to produce from this producer) and drag and drop to the 'Layout Designer'&lt;br /&gt;
#The name and speed of the pusharm are given in the bottom tab marked &amp;quot;properties&amp;quot;. You can edit them if you wish.&lt;br /&gt;
#You will now see the component displayed in the 'Layout Designer'. ''Note: For placement refer to the Component Placement Section''&lt;br /&gt;
&lt;br /&gt;
==Component Placement==&lt;br /&gt;
===Conveyor Placement===&lt;br /&gt;
#In the Layout Designer View, click on the conveyor. ''Note: Yellow arrows will show the direction of the conveyor''&lt;br /&gt;
#Move the conveyor to the desired location by holding the left mouse button down. ''Note: The area below the component will be highlighted in green when placement is valid and red when placement is invalid.''&lt;br /&gt;
#Release the left mouse button once the desired location has been reached.&lt;br /&gt;
#If placement is valid the component will move to the new location and if placement is invalid the component will move to the prior valid location&lt;br /&gt;
&lt;br /&gt;
===Box Producer Placement===&lt;br /&gt;
#In the Layout Designer View, click on the Box Producer. &lt;br /&gt;
#Move the producer to the desired location by holding the left mouse button down. ''Note: The area below the component will be highlighted.''&lt;br /&gt;
#Once the producer is over the end of the conveyor, release the left mouse button to finish placement.&lt;br /&gt;
&lt;br /&gt;
===Push Arm Placement===&lt;br /&gt;
#In the Layout Designer View, click on the Push Arm. &lt;br /&gt;
#Move the gate to the desired location by holding the left mouse button down. ''Note: The area below the component will be highlighted.''&lt;br /&gt;
#Once the push arm is next to the right end of the conveyor, release the left mouse button.&lt;br /&gt;
#To finalize the placement, verify the push arm is pointed in the direction to push over the conveyor (Look for shaded area to be over conveyor). If not then you can rotate the component by 90 degrees by clicking on the component and then clicking on the rotate 90 degrees button in the toolbar. &lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
===Gate Placement===&lt;br /&gt;
#In the Layout Designer View, click on the Gate. &lt;br /&gt;
#Verify the space between the gate's legs can fit over the conveyor based on the conveyor's placement. If not then click on the gate and rotate 90 degrees by clicking on the 90 degree rotate button in the toolbar.&lt;br /&gt;
#Move the gate to the desired location by holding the left mouse button down. ''Note: The area below the component will be highlighted in green when placement is valid and red when placement is invalid.''&lt;br /&gt;
#Once the gate is over the center of the conveyor, release the left mouse button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Push Arm Instructions==&lt;br /&gt;
===Placing===&lt;br /&gt;
Place a push arm, and place a gate with an Alien reader near the push arm.  Be sure to select the &amp;quot;Enable GPI/O for this reader in the New Reader Wizard.  It should look something like this:&lt;br /&gt;
[[Image:push1.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
===GPIO===&lt;br /&gt;
The push arm works by an Alien or LLRP (or any other reader that supports GPIO) reader sending a GPIO signal to the push arm.  To connect up the GPIO, we first have to go to the GPIO perspective.  Click on Perspectives -&amp;gt; GPIO.  You should get a window that looks something like this:&lt;br /&gt;
[[Image:push2.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
# Expand the Palette if it isn't already open by pressing the arrow on the right.  &lt;br /&gt;
# Select the &amp;quot;Solid Connection&amp;quot; button in the palette and drag an arrow it from the Alien reader on top (in blue) to the push arm you want to move (in red).  You can also just click on the alien and click on the push arm, and an arrow will be shown connecting the two.  &lt;br /&gt;
&lt;br /&gt;
After that, the push arm should fire when you want it to.&lt;br /&gt;
&lt;br /&gt;
==Create a Group==&lt;br /&gt;
#Click on the Layout Navigator tab. &lt;br /&gt;
#Right click on Grouped Components&lt;br /&gt;
#In the right click menu, click on create group&lt;br /&gt;
#In the create group wizard, enter in a group name (example: group1)&lt;br /&gt;
#You will now see the new group listed under Grouped Components&lt;br /&gt;
&lt;br /&gt;
==Add Components to Group==&lt;br /&gt;
#Click on the Layout Navigator tab. &lt;br /&gt;
#Click on the '+' next to Ungrouped Components to expand the ungrouped components list if not expanded already.&lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#In the Ungrouped Components list, click on the conveyor component (Example: conveyor1).&lt;br /&gt;
#Hold the left mouse button down on the conveyor component and drag and drop into the Group (Example: group1)&lt;br /&gt;
#Repeat steps 2 - 4 for each or the remaining ungrouped components&lt;br /&gt;
#Once all the steps have been completed, you will now have all the components assigned to a group. (Example: group1) Now you can move the components around in a group in the Layout Designer instead of having to move each component seperately. There are other benefits of groups which will be described in later sections.&lt;br /&gt;
&lt;br /&gt;
==Turn On Components==&lt;br /&gt;
There are two ways to turn on components:&lt;br /&gt;
&lt;br /&gt;
#Click on the Layout Navigator tab if not already selected. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group name (Example: group1) to expand the group if not expanded already.&lt;br /&gt;
#Right click on the conveyor component&lt;br /&gt;
#In the conveyor component right click menu, click on turn On&lt;br /&gt;
#Repeat steps 3-4 for each component in the group&lt;br /&gt;
&lt;br /&gt;
or the short cut is to:&lt;br /&gt;
&lt;br /&gt;
#Click on the Layout Navigator tab if not already selected. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group name (Example: group1) to expand the group if not expanded already.&lt;br /&gt;
#Right click on group (Example: group1)&lt;br /&gt;
#In the group right click menu, click on Turn On&lt;br /&gt;
#This will Turn On all the components assigned to tha group&lt;br /&gt;
&lt;br /&gt;
You can now connect to the virtual reader (Alien, AWID, Symbol, LLRP) you created with a client such as telnet, client library, middleware or EdgeServer.&lt;br /&gt;
&lt;br /&gt;
==Start Simulation==&lt;br /&gt;
#On the Designer Toolbar, you can now click on the play button to start the simulation&lt;br /&gt;
#Once you start the simultaion you should now see boxes being produced and the conveyor and push arm moving at their defined rates.&lt;br /&gt;
#The client connected to the virtual reader should now report tags as the boxes pass through the gate's antenna.&lt;br /&gt;
&lt;br /&gt;
==Pause Simulation==&lt;br /&gt;
#On the Designer Toolbar, you can now click on the Pause button to start the simultaion&lt;br /&gt;
#Once you pause the simultaion you should now see boxes being produced and the conveyor and push arm moving pause, left in the previous state.&lt;br /&gt;
#The client connected to the virtual reader will continue to be connected.&lt;br /&gt;
&lt;br /&gt;
==Reset Simulation==&lt;br /&gt;
#On the Designer Toolbar, you can now click on the reset button to start the simultaion&lt;br /&gt;
#Once you reset the simultaion you should now see boxes being produced, the conveyor and push arm moving be reset&lt;br /&gt;
#The client connected to the virtual reader will continue to be connected.&lt;br /&gt;
&lt;br /&gt;
==Turn Off Components==&lt;br /&gt;
There are two ways to Turn Off components:&lt;br /&gt;
&lt;br /&gt;
#Click on the Layout Navigator tab if not already selected. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group name (Example: group1) to expand the group if not expanded already.&lt;br /&gt;
#Right click on the conveyor component&lt;br /&gt;
#In the conveyor component right click menu, click on Turn Off&lt;br /&gt;
#Repeat steps 3-4 for each component in the group&lt;br /&gt;
&lt;br /&gt;
or the short cut is to:&lt;br /&gt;
&lt;br /&gt;
#Click on the Layout Navigator tab if not already selected. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group name (Example: group1) to expand the group if not expanded already.&lt;br /&gt;
#Right click on group (Example: group1)&lt;br /&gt;
#In the group right click menu, click on Turn Off&lt;br /&gt;
#This will Turn Off all the components assigned to the group&lt;br /&gt;
&lt;br /&gt;
The client should now disconnect from the virtual reader as if the device has been powered off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Add Components to Group==&lt;br /&gt;
#Click on the Layout Navigator tab. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group (Example: groups1) to expand the assigned grouped component list if not expanded already.&lt;br /&gt;
#Click on the conveyor component.&lt;br /&gt;
#At the bottom below the Layout Designer view you will now see the conveyor component's property view.&lt;br /&gt;
#Click on the speed property and change the value.&lt;br /&gt;
#The next time you Turn On the components (if not on already) and play the simulation you will see the new speed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Edit Box Producer Rate===&lt;br /&gt;
#Click on the Layout Navigator tab. &lt;br /&gt;
#Click on the '+' next to Grouped Components to expand the grouped list if not expanded already.&lt;br /&gt;
#Click on the '+' next to the group (Example: groups1) to expand the assigned grouped component list if not expanded already.&lt;br /&gt;
#Click on the box producer component.&lt;br /&gt;
#At the bottom below the Layout Designer view you will now see the box producer component's property view.&lt;br /&gt;
#Click on the rate property and change the value.&lt;br /&gt;
#The next time you Turn On the components (if not on already) and play the simulation you will see the new rate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Layout Navigation=&lt;br /&gt;
* The layout navigation is a tab on the left side of the Designer screen.  It contains 3 collapsible lists of components:&lt;br /&gt;
# Grouped Components&lt;br /&gt;
# Ungrouped Components&lt;br /&gt;
# Generated Components&lt;br /&gt;
==Ungrouped Components==&lt;br /&gt;
* This is where all the ungrouped components are listed.  Click on the plus sign to see them.  &lt;br /&gt;
* You can also turn off and turn on all of the grouped components at the same time.  To do this, right click on the &amp;quot;ungrouped components&amp;quot; and select &amp;quot;turn off&amp;quot; or &amp;quot;turn on&amp;quot;.  &lt;br /&gt;
[[Image:Screen6.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
==Grouped Components==&lt;br /&gt;
* This is where all of the grouped components are listed.  Click on the plus sign to see all of the groups, and click on the plus sign on individual groups to list the components in those groups.  &lt;br /&gt;
* You can turn on and turn off everything in a group by right clicking on the group and clicking &amp;quot;turn on&amp;quot; or &amp;quot;turn off&amp;quot;.  &lt;br /&gt;
[[Image:Screen7.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
==Generated Components==&lt;br /&gt;
* This is where you can find all of the components generated by a producer.&lt;br /&gt;
* You can delete these components by right clicking on them and selecting &amp;quot;Delete Entity&amp;quot;.&lt;br /&gt;
[[Image:Screen8.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
&lt;br /&gt;
=MiniMap=&lt;br /&gt;
The MiniMap is on the lower left of the Designer screen.  If you don't see it, click on views -&amp;gt; Show MiniMap.  &lt;br /&gt;
[[Image:Screen9.png |none|thumb|800px|The Rifidi Designer UI]]&lt;br /&gt;
==Navigation==&lt;br /&gt;
* You can navigate around the MiniMap by clicking and dragging the red box where you want to go.  This will cause the overhead camera to shift where you drag it to.  &lt;br /&gt;
* You can also simply click on the map where you want the camera to be.&lt;br /&gt;
&lt;br /&gt;
==Zoom in/Zoom out==&lt;br /&gt;
* You can zoom in and zoom out by clicking on the MiniMap and moving the mouse wheel backwards and forwards.&lt;br /&gt;
&lt;br /&gt;
=Camera=&lt;br /&gt;
The camera is set at a fixed angle, but it can be zoomed in and zoomed out, and it can also be moved on the MiniMap.  &lt;br /&gt;
&lt;br /&gt;
==Zoom in/Zoom out==&lt;br /&gt;
*  You can zoom in and zoom out by clicking on the main view screen and moving the mouse wheel backwards and forwards.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-04T23:35:47Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* jMonkey SWT bindings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
[[Image:Screen1.jpg]]&amp;lt;br/&amp;gt;&lt;br /&gt;
This screenshot is taken from the image converter we built using jmeswt.&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package test;&lt;br /&gt;
 &lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.math.Vector3f;&lt;br /&gt;
 import com.jme.scene.shape.Box;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * &lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - Jun 2, 2008&lt;br /&gt;
  * &lt;br /&gt;
  */&lt;br /&gt;
 public class MyGame extends SWTBaseGame {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param updateResolution&lt;br /&gt;
 	 * @param renderResolution&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 * @param parent&lt;br /&gt;
 	 * @param single&lt;br /&gt;
 	 */&lt;br /&gt;
 	public MyGame(String name, int updateResolution, int renderResolution,&lt;br /&gt;
 			int width, int height, Composite parent, boolean single) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent,&lt;br /&gt;
 				single);&lt;br /&gt;
 		// TODO Auto-generated constructor stub&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		Box myBox=new Box(&amp;quot;boxxy&amp;quot;, Vector3f.ZERO.clone(), 2f, 2f, 2f);&lt;br /&gt;
 		myBox.setRandomColors();&lt;br /&gt;
 		getRootNode().attachChild(myBox);&lt;br /&gt;
 		getRootNode().updateRenderState();&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating this game instantiated it in your createPartControl method and hit the start() method after creating it.&amp;lt;br/&amp;gt;&lt;br /&gt;
 MyGame my=new MyGame(&amp;quot;gamy&amp;quot;,10,20,640,480,parent,true);&lt;br /&gt;
 my.start();&lt;br /&gt;
* The first parameter is a name for the game.&lt;br /&gt;
* The second one is the amount of msecs between two updates.&lt;br /&gt;
* The third one is the amount of msecs between two render runs.&lt;br /&gt;
* four and five are start width and height.&lt;br /&gt;
* number six is the parent composite for the glCanas.&lt;br /&gt;
* the seventh and last one states if this is the only SWTGame running.&lt;br /&gt;
The game is now running.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Controlling the scene==&lt;br /&gt;
Now we want to add a FirstPersonController.&amp;lt;br/&amp;gt;&lt;br /&gt;
To do this add this code to your simpleInitGame() method:&amp;lt;br/&amp;gt;&lt;br /&gt;
 		getGlCanvas().addKeyListener((KeyListener) KeyInput.get());&lt;br /&gt;
 		getGlCanvas()&lt;br /&gt;
 				.addMouseMoveListener((MouseMoveListener) MouseInput.get());&lt;br /&gt;
 		getGlCanvas().addMouseListener((MouseListener) MouseInput.get());&lt;br /&gt;
 		FirstPersonHandler firstPersonHandler = new FirstPersonHandler(display&lt;br /&gt;
 				.getRenderer().getCamera(), 50, 1);&lt;br /&gt;
 		input = firstPersonHandler;&lt;br /&gt;
And add a global var:&lt;br /&gt;
 	/**&lt;br /&gt;
 	 * Handles our mouse/keyboard input.&lt;br /&gt;
 	 */&lt;br /&gt;
 	protected InputHandler input;&lt;br /&gt;
Now overwrite the update() method:&lt;br /&gt;
 	/* (non-Javadoc)&lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#update(float)&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void update(float interpolation) {&lt;br /&gt;
 		super.update(interpolation);&lt;br /&gt;
 		input.update(interpolation);&lt;br /&gt;
 	}&lt;br /&gt;
Start your RCP-app again, click in the 3d window and move around your fancy box.&amp;lt;br/&amp;gt;&lt;br /&gt;
As you can see from this example SWTKeyInput and SWTMouseInput are already registered for handling events&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread works good but I will add some timing related tweaks soon.&amp;lt;br/&amp;gt;&lt;br /&gt;
Have Fun :)&lt;br /&gt;
==What does the &amp;quot;simple&amp;quot; parameter in the constructor mean?==&lt;br /&gt;
Ok, we are in eclipse RCP so mostly you will deal with  multiwindow thing.&amp;lt;br/&amp;gt;&lt;br /&gt;
First of all:&amp;lt;br/&amp;gt;&lt;br /&gt;
If you don't intend to use more than one game/window inside eclipse stop reading here. Everything will work like you are used to it from jmonkey.&amp;lt;br/&amp;gt; You will have your GameTaskQueues as you are used to them and can live happily on without bothering ybout the rest.&amp;lt;br/&amp;gt;&lt;br /&gt;
If you, like us, need support for multiple games in one app continue readiung.&amp;lt;br/&amp;gt;&lt;br /&gt;
When you create let's say two games you will have to set single to false.&amp;lt;br/&amp;gt;&lt;br /&gt;
That tells SWTBaseGame to create individual rendering and update queues for each game so that we don't have collisions there.&amp;lt;br/&amp;gt;&lt;br /&gt;
The queues are name &amp;quot;&amp;lt;gamename&amp;gt;.render&amp;quot; and &amp;quot;&amp;lt;gamename&amp;gt;.update&amp;quot;. This is important to remember as your callables will have to be sent to the right queues.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also access the queues directly in SWTBaseGame with getUpdateQueue() or getRenderQueue().&amp;lt;br/&amp;gt;&lt;br /&gt;
Right now you can't render to two games at the same time (NOTE: the next release should include functionality for that, but our current app doesn't need that) so call stopRendering() when your game loses the focus and resumeRendering() when it acquires focus. The important thing is that the games don't stop updating!&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/File:Screen1.jpg</id>
		<title>File:Screen1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/File:Screen1.jpg"/>
				<updated>2008-06-04T23:34:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: Scrrenshot from converter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scrrenshot from converter&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-03T23:29:23Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package test;&lt;br /&gt;
 &lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.math.Vector3f;&lt;br /&gt;
 import com.jme.scene.shape.Box;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * &lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - Jun 2, 2008&lt;br /&gt;
  * &lt;br /&gt;
  */&lt;br /&gt;
 public class MyGame extends SWTBaseGame {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param updateResolution&lt;br /&gt;
 	 * @param renderResolution&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 * @param parent&lt;br /&gt;
 	 * @param single&lt;br /&gt;
 	 */&lt;br /&gt;
 	public MyGame(String name, int updateResolution, int renderResolution,&lt;br /&gt;
 			int width, int height, Composite parent, boolean single) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent,&lt;br /&gt;
 				single);&lt;br /&gt;
 		// TODO Auto-generated constructor stub&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		Box myBox=new Box(&amp;quot;boxxy&amp;quot;, Vector3f.ZERO.clone(), 2f, 2f, 2f);&lt;br /&gt;
 		myBox.setRandomColors();&lt;br /&gt;
 		getRootNode().attachChild(myBox);&lt;br /&gt;
 		getRootNode().updateRenderState();&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating this game instantiated it in your createPartControl method and hit the start() method after creating it.&amp;lt;br/&amp;gt;&lt;br /&gt;
 MyGame my=new MyGame(&amp;quot;gamy&amp;quot;,10,20,640,480,parent,true);&lt;br /&gt;
 my.start();&lt;br /&gt;
* The first parameter is a name for the game.&lt;br /&gt;
* The second one is the amount of msecs between two updates.&lt;br /&gt;
* The third one is the amount of msecs between two render runs.&lt;br /&gt;
* four and five are start width and height.&lt;br /&gt;
* number six is the parent composite for the glCanas.&lt;br /&gt;
* the seventh and last one states if this is the only SWTGame running.&lt;br /&gt;
The game is now running.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Controlling the scene==&lt;br /&gt;
Now we want to add a FirstPersonController.&amp;lt;br/&amp;gt;&lt;br /&gt;
To do this add this code to your simpleInitGame() method:&amp;lt;br/&amp;gt;&lt;br /&gt;
 		getGlCanvas().addKeyListener((KeyListener) KeyInput.get());&lt;br /&gt;
 		getGlCanvas()&lt;br /&gt;
 				.addMouseMoveListener((MouseMoveListener) MouseInput.get());&lt;br /&gt;
 		getGlCanvas().addMouseListener((MouseListener) MouseInput.get());&lt;br /&gt;
 		FirstPersonHandler firstPersonHandler = new FirstPersonHandler(display&lt;br /&gt;
 				.getRenderer().getCamera(), 50, 1);&lt;br /&gt;
 		input = firstPersonHandler;&lt;br /&gt;
And add a global var:&lt;br /&gt;
 	/**&lt;br /&gt;
 	 * Handles our mouse/keyboard input.&lt;br /&gt;
 	 */&lt;br /&gt;
 	protected InputHandler input;&lt;br /&gt;
Now overwrite the update() method:&lt;br /&gt;
 	/* (non-Javadoc)&lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#update(float)&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void update(float interpolation) {&lt;br /&gt;
 		super.update(interpolation);&lt;br /&gt;
 		input.update(interpolation);&lt;br /&gt;
 	}&lt;br /&gt;
Start your RCP-app again, click in the 3d window and move around your fancy box.&amp;lt;br/&amp;gt;&lt;br /&gt;
As you can see from this example SWTKeyInput and SWTMouseInput are already registered for handling events&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread works good but I will add some timing related tweaks soon.&amp;lt;br/&amp;gt;&lt;br /&gt;
Have Fun :)&lt;br /&gt;
==What does the &amp;quot;simple&amp;quot; parameter in the constructor mean?==&lt;br /&gt;
Ok, we are in eclipse RCP so mostly you will deal with  multiwindow thing.&amp;lt;br/&amp;gt;&lt;br /&gt;
First of all:&amp;lt;br/&amp;gt;&lt;br /&gt;
If you don't intend to use more than one game/window inside eclipse stop reading here. Everything will work like you are used to it from jmonkey.&amp;lt;br/&amp;gt; You will have your GameTaskQueues as you are used to them and can live happily on without bothering ybout the rest.&amp;lt;br/&amp;gt;&lt;br /&gt;
If you, like us, need support for multiple games in one app continue readiung.&amp;lt;br/&amp;gt;&lt;br /&gt;
When you create let's say two games you will have to set single to false.&amp;lt;br/&amp;gt;&lt;br /&gt;
That tells SWTBaseGame to create individual rendering and update queues for each game so that we don't have collisions there.&amp;lt;br/&amp;gt;&lt;br /&gt;
The queues are name &amp;quot;&amp;lt;gamename&amp;gt;.render&amp;quot; and &amp;quot;&amp;lt;gamename&amp;gt;.update&amp;quot;. This is important to remember as your callables will have to be sent to the right queues.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also access the queues directly in SWTBaseGame with getUpdateQueue() or getRenderQueue().&amp;lt;br/&amp;gt;&lt;br /&gt;
Right now you can't render to two games at the same time (NOTE: the next release should include functionality for that, but our current app doesn't need that) so call stopRendering() when your game loses the focus and resumeRendering() when it acquires focus. The important thing is that the games don't stop updating!&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Helpful_links</id>
		<title>Helpful links</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Helpful_links"/>
				<updated>2008-06-03T23:23:50Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/ javadocs for designer]&lt;br /&gt;
*[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.entities/ javadoc for the entites]&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Threads</id>
		<title>Threads</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Threads"/>
				<updated>2008-06-03T23:22:39Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rendering and it's threads are now part of our jmonkey plugin:[http://wiki.rifidi.org/index.php/Rifidi:jmeswt jmeswt]&amp;lt;br/&amp;gt;&lt;br /&gt;
Documentation in this chapter is from now on obsolete!&amp;lt;br/&amp;gt;&lt;br /&gt;
Designer runs as a combination of eclipse and a 3d engine.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is very important to closely look where things are going.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Just some rules:&lt;br /&gt;
* GameTaskQueueManager.getInstance().render()/update() can be called from every part of the application and should be used to submit things to the 3d engine. &amp;lt;br/&amp;gt; It is very important to add and remove nodes inside callables that get submitted to the 3d engine as it might break the software if you don't do it this way.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Old stuff:&amp;lt;br/&amp;gt;&lt;br /&gt;
IF YOU HAVE BEEN USING THE HELPER CLASS REMOVE THAT CODE AS IT WILL CAUSE A DEADLOCK FROM DESIGNER 1.3 ON!&lt;br /&gt;
* Waiting on Futures: Sometimes it is important to be able to wait on a future when you have submitted a callable. The [http://www.rifidi.org/javadoc/designer/doc/org/rifidi/designer/utils/Helpers.html Helpers class] contains a static method called waitOnCallable. This method can be used to wait for a futue to return and is the only way (that I know of) to do this from inside the eclipse thread.&amp;lt;br/&amp;gt;THIS METHOD IS BLOCKING AND IF  CALLED WHEN UPDATETHREAD IS IN THE PAUSEDSTATE WILL BLOCK FOREVER!!&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
APPARENTLY THIS ISSUE GOT RESOLVED WITH ECLIPSE 3.3!&lt;br /&gt;
* syncExec/asyncExec: Avoid syncExec. According to some newsgroup posts as of eclipse 3.2 there is a deadlock condition that might cause a hang on syncExec. Use asyncExec and a callback.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Threads</id>
		<title>Threads</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Threads"/>
				<updated>2008-06-03T23:22:27Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rendering and it's threads are now part of our jmonkey plugin:[http://wiki.rifidi.org/index.php/Rifidi:jmeswt jmeswt]&amp;lt;br/&amp;gt;&lt;br /&gt;
Documentation in this chapter is from now on obsolete!&amp;lt;br/&amp;gt;&lt;br /&gt;
Designer runs as a combination of eclipse and a 3d engine.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is very important to closely look where things are going.&amp;lt;br/&amp;gt;&lt;br /&gt;
Just some rules:&lt;br /&gt;
* GameTaskQueueManager.getInstance().render()/update() can be called from every part of the application and should be used to submit things to the 3d engine. &amp;lt;br/&amp;gt; It is very important to add and remove nodes inside callables that get submitted to the 3d engine as it might break the software if you don't do it this way.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Old stuff:&amp;lt;br/&amp;gt;&lt;br /&gt;
IF YOU HAVE BEEN USING THE HELPER CLASS REMOVE THAT CODE AS IT WILL CAUSE A DEADLOCK FROM DESIGNER 1.3 ON!&lt;br /&gt;
* Waiting on Futures: Sometimes it is important to be able to wait on a future when you have submitted a callable. The [http://www.rifidi.org/javadoc/designer/doc/org/rifidi/designer/utils/Helpers.html Helpers class] contains a static method called waitOnCallable. This method can be used to wait for a futue to return and is the only way (that I know of) to do this from inside the eclipse thread.&amp;lt;br/&amp;gt;THIS METHOD IS BLOCKING AND IF  CALLED WHEN UPDATETHREAD IS IN THE PAUSEDSTATE WILL BLOCK FOREVER!!&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
APPARENTLY THIS ISSUE GOT RESOLVED WITH ECLIPSE 3.3!&lt;br /&gt;
* syncExec/asyncExec: Avoid syncExec. According to some newsgroup posts as of eclipse 3.2 there is a deadlock condition that might cause a hang on syncExec. Use asyncExec and a callback.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/UpdateThread</id>
		<title>UpdateThread</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/UpdateThread"/>
				<updated>2008-06-03T23:21:08Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; THIS PAGE NEEDS A REWORK, THE DIAGRAMS ARE NOT UP TO DATE&lt;br /&gt;
[http://www.rifidi.org/javadoc/designer/doc/org/rifidi/designer/rcp/views/view3d/threads/UpdateThread.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
The UpdateThread is responsible for executing the update queue, updating the geometric states, the collison information and executing repeated callables.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:UpdateThread.png]]&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/RenderThread</id>
		<title>RenderThread</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/RenderThread"/>
				<updated>2008-06-03T23:20:50Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; THIS PAGE NEEDS A REWORK, THE DIAGRAMS ARE NOT UP TO DATE&lt;br /&gt;
[[Image:Renderthread.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.rifidi.org/javadoc/designer/doc/org/rifidi/designer/rcp/views/view3d/threads/RenderThread.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread is instantiated and started after a new scene got loaded.&amp;lt;br/&amp;gt;&lt;br /&gt;
The [http://www.rifidi.org/javadoc/designer/doc/org/rifidi/designer/services/core/world/WorldService.html WorldService] is responsible for controlling the states of this thread.&amp;lt;br/&amp;gt;&lt;br /&gt;
As syncExec has a little problem with deadlocks (we got this from some newsgroup posts, we could never confirm this but as we were facing some deadlocks we eliminated all possible sources) we have to use asyncExec and a control variable in renderThread (running) to check if a RenderRunnable is currently running.&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderRunnable is responsible for acquiring the lock that is shared with the UpdateThread to prevent simultanious operations of both on the scene graph.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:RenderRunnable.png]]&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Threads</id>
		<title>Threads</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Threads"/>
				<updated>2008-06-03T23:19:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Designer runs as a combination of eclipse and a 3d engine.&amp;lt;br/&amp;gt;&lt;br /&gt;
It is very important to closely look where things are going.&amp;lt;br/&amp;gt;&lt;br /&gt;
Just some rules:&lt;br /&gt;
* GameTaskQueueManager.getInstance().render()/update() can be called from every part of the application and should be used to submit things to the 3d engine. &amp;lt;br/&amp;gt; It is very important to add and remove nodes inside callables that get submitted to the 3d engine as it might break the software if you don't do it this way.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Old stuff:&amp;lt;br/&amp;gt;&lt;br /&gt;
IF YOU HAVE BEEN USING THE HELPER CLASS REMOVE THAT CODE AS IT WILL CAUSE A DEADLOCK FROM DESIGNER 1.3 ON!&lt;br /&gt;
* Waiting on Futures: Sometimes it is important to be able to wait on a future when you have submitted a callable. The [http://www.rifidi.org/javadoc/designer/doc/org/rifidi/designer/utils/Helpers.html Helpers class] contains a static method called waitOnCallable. This method can be used to wait for a futue to return and is the only way (that I know of) to do this from inside the eclipse thread.&amp;lt;br/&amp;gt;THIS METHOD IS BLOCKING AND IF  CALLED WHEN UPDATETHREAD IS IN THE PAUSEDSTATE WILL BLOCK FOREVER!!&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
APPARENTLY THIS ISSUE GOT RESOLVED WITH ECLIPSE 3.3!&lt;br /&gt;
* syncExec/asyncExec: Avoid syncExec. According to some newsgroup posts as of eclipse 3.2 there is a deadlock condition that might cause a hang on syncExec. Use asyncExec and a callback.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/FieldService</id>
		<title>FieldService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/FieldService"/>
				<updated>2008-06-03T23:11:02Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/collision/FieldService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.entities/org/rifidi/designer/entities/interfaces/Field.html Field]&amp;lt;br/&amp;gt;&lt;br /&gt;
A field (antenna field of a reader, the watch areas, a infrared field, ...) will be automatically registered to this service when it is created.&amp;lt;br/&amp;gt;&lt;br /&gt;
On every run of the update thread the fields are checked for new collisions or entities leaving the field.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/CablingService</id>
		<title>CablingService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/CablingService"/>
				<updated>2008-06-03T23:10:29Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/cabling/CablingService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.entities/org/rifidi/designer/entities/interfaces/GPI.html GPI]&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.entities/org/rifidi/designer/entities/interfaces/GPO.html GPO]&amp;lt;br/&amp;gt;&lt;br /&gt;
The cabling service is used for GPIO events.&amp;lt;br/&amp;gt;&lt;br /&gt;
It provides facilities to add and remove cables.&amp;lt;br/&amp;gt;&lt;br /&gt;
The reason why we don't allow a direct connection between a GPO and a GPI is that we want to be able to monitor and record events between these.&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/SceneDataService</id>
		<title>SceneDataService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/SceneDataService"/>
				<updated>2008-06-03T23:09:38Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: [http://www.rifidi.org/javadoc/designer/org.rifidi.designer.entities/org/rifidi/designer/services/core/entities/SceneDataService.html javadoc]&amp;lt;br/&amp;gt; * save/load a scene * access certain par...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.entities/org/rifidi/designer/services/core/entities/SceneDataService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
* save/load a scene&lt;br /&gt;
* access certain parts of the scene data in a save way (like the root node)&lt;br /&gt;
* inform the application of loading and closing of scene datas&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/ProductService</id>
		<title>ProductService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/ProductService"/>
				<updated>2008-06-03T23:07:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: [http://www.rifidi.org/javadoc/designer/org.rifidi.designer.entities/org/rifidi/designer/services/core/entities/ProductService.html javadoc]&amp;lt;br/&amp;gt; If your entity creates other entites while...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.entities/org/rifidi/designer/services/core/entities/ProductService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
If your entity creates other entites while the simulation is running you will have to use this service to make those new entites appear in the scene.&amp;lt;br/&amp;gt;&lt;br /&gt;
The best example for using the product service is the BoxProducer in the base library of designer.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/EntitiesService</id>
		<title>EntitiesService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/EntitiesService"/>
				<updated>2008-06-03T23:05:21Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: [http://www.rifidi.org/javadoc/designer/org.rifidi.designer.entities/org/rifidi/designer/services/core/entities/EntitiesService.html javadoc]&amp;lt;br/&amp;gt; This service is mostly used by designer t...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.entities/org/rifidi/designer/services/core/entities/EntitiesService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
This service is mostly used by designer to manage entites.&amp;lt;br/&amp;gt;&lt;br /&gt;
* add/remove entities&lt;br /&gt;
* organize them into groups&lt;br /&gt;
It's very unlikely that you will need this service.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Entities_Services</id>
		<title>Entities Services</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Entities_Services"/>
				<updated>2008-06-03T23:02:23Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: Entites services are part of the org.rifidi.designer.entities bundle.&amp;lt;br/&amp;gt; Theay are also part of the core of designer but they are alos the ones you are most likely to need while creating...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Entites services are part of the org.rifidi.designer.entities bundle.&amp;lt;br/&amp;gt;&lt;br /&gt;
Theay are also part of the core of designer but they are alos the ones you are most likely to need while creating new entities.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Designer_documentation_summary</id>
		<title>Designer documentation summary</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Designer_documentation_summary"/>
				<updated>2008-06-03T23:01:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:developerDoc]][[category:designerDoc]]&lt;br /&gt;
== Designer ==&lt;br /&gt;
*[[Helpful links]]&lt;br /&gt;
*[[Designer Internals]]&lt;br /&gt;
**[[Overview]]&lt;br /&gt;
**[[Threads]]&lt;br /&gt;
***[[RenderThread]]&lt;br /&gt;
***[[UpdateThread]]&lt;br /&gt;
****[[RepeatedUpdateAction]]&lt;br /&gt;
**[[Services]]&lt;br /&gt;
***[[How services work]]&lt;br /&gt;
***[[Creating your own service]]&lt;br /&gt;
*** [[Core Services]]&lt;br /&gt;
**** [[CablingService]]&lt;br /&gt;
**** [[CameraService]]&lt;br /&gt;
**** [[FieldService]]&lt;br /&gt;
**** [[EventsService]]&lt;br /&gt;
**** [[SelectionService]]&lt;br /&gt;
**** [[WorldService]]&lt;br /&gt;
*** [[Entities Services]]&lt;br /&gt;
**** [[EntitiesService]]&lt;br /&gt;
**** [[FinderService]]&lt;br /&gt;
**** [[ProductService]]&lt;br /&gt;
**** [[SceneDataService]]&lt;br /&gt;
**Utilities&lt;br /&gt;
***[[MessagingSystem]]&lt;br /&gt;
*[[Coding guidelines]]&lt;br /&gt;
**[[Style Guide]] &lt;br /&gt;
**[[Creating entities]]&lt;br /&gt;
*[[:Category:desginerDoc|Browse All Designer Documentation]]&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/WorldService</id>
		<title>WorldService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/WorldService"/>
				<updated>2008-06-03T22:56:16Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: [http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/world/WorldService.html javadoc]&amp;lt;br/&amp;gt; This service is used to control the running state of...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/world/WorldService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
This service is used to control the running state of the currently laoded scene.&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/SelectionService</id>
		<title>SelectionService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/SelectionService"/>
				<updated>2008-06-03T22:55:15Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: [http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/selection/SelectionService.html javadoc]&amp;lt;br/&amp;gt; This service manages the selections in the 3...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/selection/SelectionService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
This service manages the selections in the 3d scene and is the glue between the 3d view and the tree viewer on the left.&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/EventsService</id>
		<title>EventsService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/EventsService"/>
				<updated>2008-06-03T22:49:26Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: [http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/events/EventsService.html javadoc]&amp;lt;br/&amp;gt; Every entity can post events to this service.&amp;lt;br/&amp;gt;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/events/EventsService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
Every entity can post events to this service.&amp;lt;br/&amp;gt;&lt;br /&gt;
This service is responsible for displaying them in the console and, if configured, to record the events.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/FieldService</id>
		<title>FieldService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/FieldService"/>
				<updated>2008-06-03T22:47:45Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/collision/FieldService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
A field (antenna field of a reader, the watch areas, a infrared field, ...) will be automatically registered to this service when it is created.&amp;lt;br/&amp;gt;&lt;br /&gt;
On every run of the update thread the fields are checked for new collisions or entities leaving the field.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/FieldService</id>
		<title>FieldService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/FieldService"/>
				<updated>2008-06-03T22:45:08Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: [url]http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/collision/FieldService.html javadoc[/url]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[url]http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/collision/FieldService.html javadoc[/url]&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/CameraService</id>
		<title>CameraService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/CameraService"/>
				<updated>2008-06-03T22:44:23Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: [http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/camera/CameraService.html javadoc]&amp;lt;br/&amp;gt; This service provides the methods to zoom the came...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/camera/CameraService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
This service provides the methods to zoom the camera and record camera positions that can later be restored.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/CablingService</id>
		<title>CablingService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/CablingService"/>
				<updated>2008-06-03T22:42:25Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/cabling/CablingService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
The cabling service is used for GPIO events.&amp;lt;br/&amp;gt;&lt;br /&gt;
It provides facilities to add and remove cables.&amp;lt;br/&amp;gt;&lt;br /&gt;
The reason why we don't allow a direct connection between a GPO and a GPI is that we want to be able to monitor and record events between these.&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/CablingService</id>
		<title>CablingService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/CablingService"/>
				<updated>2008-06-03T22:42:15Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/cabling/CablingService.html javadoc]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The cabling service is used for GPIO events.&amp;lt;br/&amp;gt;&lt;br /&gt;
It provides facilities to add and remove cables.&amp;lt;br/&amp;gt;&lt;br /&gt;
The reason why we don't allow a direct connection between a GPO and a GPI is that we want to be able to monitor and record events between these.&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/CablingService</id>
		<title>CablingService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/CablingService"/>
				<updated>2008-06-03T22:40:55Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.rifidi.org/javadoc/designer/org.rifidi.designer.rcp/org/rifidi/designer/services/core/cabling/CablingService.html javadoc]&lt;br /&gt;
The cabling service is used for GPIO events.&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/CablingService</id>
		<title>CablingService</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/CablingService"/>
				<updated>2008-06-03T22:21:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: The cabling service is used for GPIO events.&amp;lt;br/&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cabling service is used for GPIO events.&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Core_Services</id>
		<title>Core Services</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Core_Services"/>
				<updated>2008-06-03T22:11:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: These are services that are provided by the org.rifidi.designer.rcp plugin.&amp;lt;br/&amp;gt; They are an integral part of designer.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are services that are provided by the org.rifidi.designer.rcp plugin.&amp;lt;br/&amp;gt;&lt;br /&gt;
They are an integral part of designer.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Designer_documentation_summary</id>
		<title>Designer documentation summary</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Designer_documentation_summary"/>
				<updated>2008-06-03T22:10:45Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:developerDoc]][[category:designerDoc]]&lt;br /&gt;
== Designer ==&lt;br /&gt;
*[[Helpful links]]&lt;br /&gt;
*[[Designer Internals]]&lt;br /&gt;
**[[Overview]]&lt;br /&gt;
**[[Threads]]&lt;br /&gt;
***[[RenderThread]]&lt;br /&gt;
***[[UpdateThread]]&lt;br /&gt;
****[[RepeatedUpdateAction]]&lt;br /&gt;
**[[Services]]&lt;br /&gt;
***[[How services work]]&lt;br /&gt;
***[[Creating your own service]]&lt;br /&gt;
*** [[Core Services]]&lt;br /&gt;
**** [[CablingService]]&lt;br /&gt;
**** [[CameraService]]&lt;br /&gt;
**** [[FieldService]]&lt;br /&gt;
**** [[EventsService]]&lt;br /&gt;
**** [[SelectionService]]&lt;br /&gt;
**** [[WorldService]]&lt;br /&gt;
**Utilities&lt;br /&gt;
***[[MessagingSystem]]&lt;br /&gt;
*[[Coding guidelines]]&lt;br /&gt;
**[[Style Guide]] &lt;br /&gt;
**[[Creating entities]]&lt;br /&gt;
*[[:Category:desginerDoc|Browse All Designer Documentation]]&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Creating_your_own_service</id>
		<title>Creating your own service</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Creating_your_own_service"/>
				<updated>2008-06-03T22:07:59Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* create a new OSGi Bundle.&lt;br /&gt;
* Create an interface for your service.&lt;br /&gt;
* Implement the interface.&lt;br /&gt;
* Register the service in the activator:&lt;br /&gt;
 public void start(BundleContext context) throws Exception {&lt;br /&gt;
 	super.start(context);&lt;br /&gt;
 	plugin = this;&lt;br /&gt;
 	context.registerService(CablingService.class.getName(),&lt;br /&gt;
 				new CablingServiceImpl(), null);&lt;br /&gt;
 }&lt;br /&gt;
And that's it. Your service is available as soon as the first class from your bundle is loaded.&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Creating_your_own_service</id>
		<title>Creating your own service</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Creating_your_own_service"/>
				<updated>2008-06-03T22:07:46Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* Define your service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Define your service==&lt;br /&gt;
* create a new OSGi Bundle.&lt;br /&gt;
* Create an interface for your service.&lt;br /&gt;
* Implement the interface.&lt;br /&gt;
* Register the service in the activator:&lt;br /&gt;
 public void start(BundleContext context) throws Exception {&lt;br /&gt;
 	super.start(context);&lt;br /&gt;
 	plugin = this;&lt;br /&gt;
 	context.registerService(CablingService.class.getName(),&lt;br /&gt;
 				new CablingServiceImpl(), null);&lt;br /&gt;
 }&lt;br /&gt;
And that's it. Your service is available as soon as the first class from your bundle is loaded.&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Creating_your_own_service</id>
		<title>Creating your own service</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Creating_your_own_service"/>
				<updated>2008-06-03T22:07:33Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: ==Define your service== * create a new OSGi Bundle. * First create an interface for your service. * Implement the interface. * Register the service in the activator:  public void start(Bun...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Define your service==&lt;br /&gt;
* create a new OSGi Bundle.&lt;br /&gt;
* First create an interface for your service.&lt;br /&gt;
* Implement the interface.&lt;br /&gt;
* Register the service in the activator:&lt;br /&gt;
 public void start(BundleContext context) throws Exception {&lt;br /&gt;
 	super.start(context);&lt;br /&gt;
 	plugin = this;&lt;br /&gt;
 	context.registerService(CablingService.class.getName(),&lt;br /&gt;
 				new CablingServiceImpl(), null);&lt;br /&gt;
 }&lt;br /&gt;
And that's it. Your service is available as soon as the first class from your bundle is loaded.&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/How_services_work</id>
		<title>How services work</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/How_services_work"/>
				<updated>2008-06-03T22:00:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Why services==&lt;br /&gt;
The first version of Designer (and also the rest of Rifidi) was littered with a lot of Singletons.&amp;lt;br/&amp;gt;&lt;br /&gt;
As everybody knows by now: &lt;br /&gt;
* Singletons are bad.&lt;br /&gt;
* They are hard to test.&lt;br /&gt;
* Impossible (almost) to mock&lt;br /&gt;
So I replaced them with a little service registry where you register a concrete class with an interface this class implements.&amp;lt;br/&amp;gt;&lt;br /&gt;
Once again I had to discover that somebody else had already had that idea some time ago.&amp;lt;br/&amp;gt;&lt;br /&gt;
OSGi is an SOA (bright me, reading about OSGi all the time without actually realizing what it means).&amp;lt;br/&amp;gt;&lt;br /&gt;
So I am using now the OSGi ServiceRegistry to deal with services.&amp;lt;br/&amp;gt;&lt;br /&gt;
You, as an aspiring rifidi developer, won't need to worry about that.&amp;lt;br/&amp;gt;&lt;br /&gt;
To make it easier to use the services I wrote a ServiceLocater that does all the work for you.&amp;lt;br/&amp;gt;&lt;br /&gt;
The only thing to remember is to use the @Inject annotation and do the following call in the constructor.&amp;lt;br/&amp;gt;&lt;br /&gt;
 ServiceRegister.getInstance().service(this)&lt;br /&gt;
==@Inject==&lt;br /&gt;
This annotation is a marker for the ServiceLocator in the ServiceRegistry. It annotates a setter method that takes the desired service interface as it's only parameter.&amp;lt;br/&amp;gt;&lt;br /&gt;
 @Inject&lt;br /&gt;
 public void setEventsService(EventsService eventsService) {&lt;br /&gt;
 	this.eventsService = eventsService;&lt;br /&gt;
 }&lt;br /&gt;
After the call to service(this) in the constructor the locator will check the class for the annotation and try to resolve it.&amp;lt;br/&amp;gt;&lt;br /&gt;
If the service is not available atb the time of the call it will be resolved as soon as the service becomes available.&amp;lt;br/&amp;gt;&lt;br /&gt;
NOTE: All OSGi services are supported, als declarative services. The only problem is that due to the way they get initialized they are unsutable for a GUI application.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/How_services_work</id>
		<title>How services work</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/How_services_work"/>
				<updated>2008-06-03T21:48:52Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* Why services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Why services==&lt;br /&gt;
The first version of Designer (and also the rest of Rifidi) was littered with a lot of Singletons.&amp;lt;br/&amp;gt;&lt;br /&gt;
As everybody knows by now: &lt;br /&gt;
* Singletons are bad.&lt;br /&gt;
* They are hard to test.&lt;br /&gt;
* Impossible (almost) to mock&lt;br /&gt;
So I replaced them with a little service registry where you register a concrete class with an interface this class implements.&amp;lt;br/&amp;gt;&lt;br /&gt;
Once again I had to discover that somebody else had already had that idea some time ago.&amp;lt;br/&amp;gt;&lt;br /&gt;
OSGi is an SOA (bright me, reading about OSGi all the time without actually realizing what it means).&amp;lt;br/&amp;gt;&lt;br /&gt;
So I am using now the OSGi ServiceRegistry to deal with services.&amp;lt;br/&amp;gt;&lt;br /&gt;
You, as an aspiring rifidi developer, won't need to worry about that.&amp;lt;br/&amp;gt;&lt;br /&gt;
To make it easier to use the services I wrote a ServiceLocater that does all the work for you.&amp;lt;br/&amp;gt;&lt;br /&gt;
The only thing to remember is to use the @Inject annotation and do the following call in the constructor.&amp;lt;br/&amp;gt;&lt;br /&gt;
 ServiceRegister.getInstance().service(this)&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/How_services_work</id>
		<title>How services work</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/How_services_work"/>
				<updated>2008-06-03T21:48:26Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: ==Why services== The first version of Designer (and also the rest of Rifidi) was littered with a lot of Singletons.&amp;lt;br/&amp;gt; As everybody knows by now:  * Singletons are bad. * They are hard t...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Why services==&lt;br /&gt;
The first version of Designer (and also the rest of Rifidi) was littered with a lot of Singletons.&amp;lt;br/&amp;gt;&lt;br /&gt;
As everybody knows by now: &lt;br /&gt;
* Singletons are bad.&lt;br /&gt;
* They are hard to test.&lt;br /&gt;
* Impossible (almost) to mock&lt;br /&gt;
So I replaced them with a little service registry where you register a concrete class with an interface this class implements.&amp;lt;br/&amp;gt;&lt;br /&gt;
Once again I had to discover that somebody else had already had that idea some time ago.&amp;lt;br/&amp;gt;&lt;br /&gt;
OSGi is an SOA (bright me, reading about OSGi all the time without actually realizing what it means).&amp;lt;br/&amp;gt;&lt;br /&gt;
So I am using now the OSGi ServiceRegistry to deal with services.&amp;lt;br/&amp;gt;&lt;br /&gt;
You, as an aspiring rifidi developer, won't need to worry about that.&amp;lt;br/&amp;gt;&lt;br /&gt;
To make it easier to use the services I wrote a ServiceLocater that does all the work for you.&amp;lt;br/&amp;gt;&lt;br /&gt;
The only thing to remember is to use the @Inject annotation and do the following call.&amp;lt;br/&amp;gt;&lt;br /&gt;
 ServiceRegister.getInstance().service(this)&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Designer_documentation_summary</id>
		<title>Designer documentation summary</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Designer_documentation_summary"/>
				<updated>2008-06-03T15:25:23Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:developerDoc]][[category:designerDoc]]&lt;br /&gt;
== Designer ==&lt;br /&gt;
*[[Helpful links]]&lt;br /&gt;
*[[Designer Internals]]&lt;br /&gt;
**[[Overview]]&lt;br /&gt;
**[[Threads]]&lt;br /&gt;
***[[RenderThread]]&lt;br /&gt;
***[[UpdateThread]]&lt;br /&gt;
****[[RepeatedUpdateAction]]&lt;br /&gt;
**[[Services]]&lt;br /&gt;
***[[How services work]]&lt;br /&gt;
***[[Creating your own service]]&lt;br /&gt;
**Utilities&lt;br /&gt;
***[[MessagingSystem]]&lt;br /&gt;
*[[Coding guidelines]]&lt;br /&gt;
**[[Style Guide]] &lt;br /&gt;
**[[Creating entities]]&lt;br /&gt;
*[[:Category:desginerDoc|Browse All Designer Documentation]]&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Services</id>
		<title>Services</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Services"/>
				<updated>2008-06-03T15:24:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: New page: Since designer 1.3 we have changed a lot of the it's internal works.&amp;lt;br/&amp;gt; We tried to stick even more with the principle of dependency injection.&amp;lt;br/&amp;gt; The most important change we made is ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since designer 1.3 we have changed a lot of the it's internal works.&amp;lt;br/&amp;gt;&lt;br /&gt;
We tried to stick even more with the principle of dependency injection.&amp;lt;br/&amp;gt;&lt;br /&gt;
The most important change we made is that we switched from our custom services and their ServiceRegistry-Singleton to the service architecture that comes with OSGi.&amp;lt;br/&amp;gt;&lt;br /&gt;
We also created a service locator to make it even easier to make use of these services.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following chapters will introduce the basic concepts of services and how we use it in designer. I will also try to show how to create your own service.&amp;lt;br/&amp;gt;&lt;br /&gt;
The last chapter will then introduce the various services that we are providing with the core of designer.&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Designer_documentation_summary</id>
		<title>Designer documentation summary</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Designer_documentation_summary"/>
				<updated>2008-06-03T15:13:08Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:developerDoc]][[category:designerDoc]]&lt;br /&gt;
== Designer ==&lt;br /&gt;
*[[Helpful links]]&lt;br /&gt;
*[[Designer Internals]]&lt;br /&gt;
**[[Overview]]&lt;br /&gt;
**[[Threads]]&lt;br /&gt;
***[[RenderThread]]&lt;br /&gt;
***[[UpdateThread]]&lt;br /&gt;
****[[RepeatedUpdateAction]]&lt;br /&gt;
**[[Services]]&lt;br /&gt;
***[[Creating your own service]]&lt;br /&gt;
**Utilities&lt;br /&gt;
***[[MessagingSystem]]&lt;br /&gt;
*[[Coding guidelines]]&lt;br /&gt;
**[[Style Guide]] &lt;br /&gt;
**[[Creating entities]]&lt;br /&gt;
*[[:Category:desginerDoc|Browse All Designer Documentation]]&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T15:14:57Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* What the frick does the simple parameter in the constructor mean? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package test;&lt;br /&gt;
 &lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.math.Vector3f;&lt;br /&gt;
 import com.jme.scene.shape.Box;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * &lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - Jun 2, 2008&lt;br /&gt;
  * &lt;br /&gt;
  */&lt;br /&gt;
 public class MyGame extends SWTBaseGame {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param updateResolution&lt;br /&gt;
 	 * @param renderResolution&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 * @param parent&lt;br /&gt;
 	 * @param single&lt;br /&gt;
 	 */&lt;br /&gt;
 	public MyGame(String name, int updateResolution, int renderResolution,&lt;br /&gt;
 			int width, int height, Composite parent, boolean single) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent,&lt;br /&gt;
 				single);&lt;br /&gt;
 		// TODO Auto-generated constructor stub&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		Box myBox=new Box(&amp;quot;boxxy&amp;quot;, Vector3f.ZERO.clone(), 2f, 2f, 2f);&lt;br /&gt;
 		myBox.setRandomColors();&lt;br /&gt;
 		getRootNode().attachChild(myBox);&lt;br /&gt;
 		getRootNode().updateRenderState();&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating this game instantiated it in your createPartControl method and hit the start() method after creating it.&amp;lt;br/&amp;gt;&lt;br /&gt;
 MyGame my=new MyGame(&amp;quot;gamy&amp;quot;,10,20,640,480,parent,true);&lt;br /&gt;
 my.start();&lt;br /&gt;
* The first parameter is a name for the game.&lt;br /&gt;
* The second one is the amount of msecs between two updates.&lt;br /&gt;
* The third one is the amount of msecs between two render runs.&lt;br /&gt;
* four and five are start width and height.&lt;br /&gt;
* number six is the parent composite for the glCanas.&lt;br /&gt;
* the seventh and last one states if this is the only SWTGame running.&lt;br /&gt;
The game is now running.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Controlling the scene==&lt;br /&gt;
Now we want to add a FirstPersonController.&amp;lt;br/&amp;gt;&lt;br /&gt;
To do this add this code to your simpleInitGame() method:&amp;lt;br/&amp;gt;&lt;br /&gt;
 		getGlCanvas().addKeyListener((KeyListener) KeyInput.get());&lt;br /&gt;
 		getGlCanvas()&lt;br /&gt;
 				.addMouseMoveListener((MouseMoveListener) MouseInput.get());&lt;br /&gt;
 		getGlCanvas().addMouseListener((MouseListener) MouseInput.get());&lt;br /&gt;
 		FirstPersonHandler firstPersonHandler = new FirstPersonHandler(display&lt;br /&gt;
 				.getRenderer().getCamera(), 50, 1);&lt;br /&gt;
 		input = firstPersonHandler;&lt;br /&gt;
And add a global var:&lt;br /&gt;
 	/**&lt;br /&gt;
 	 * Handles our mouse/keyboard input.&lt;br /&gt;
 	 */&lt;br /&gt;
 	protected InputHandler input;&lt;br /&gt;
Now overwrite the update() method:&lt;br /&gt;
 	/* (non-Javadoc)&lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#update(float)&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void update(float interpolation) {&lt;br /&gt;
 		super.update(interpolation);&lt;br /&gt;
 		input.update(interpolation);&lt;br /&gt;
 	}&lt;br /&gt;
Start your RCP-app again, click in the 3d window and move around your fancy box.&amp;lt;br/&amp;gt;&lt;br /&gt;
As you can see from this example SWTKeyInput and SWTMouseInput are already registered for handling events&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread works good but I will add some timing related tweaks soon.&amp;lt;br/&amp;gt;&lt;br /&gt;
Have Fun :)&lt;br /&gt;
==What the frick does the &amp;quot;simple&amp;quot; parameter in the constructor mean?==&lt;br /&gt;
Ok, we are in eclipse RCP so mostly you will deal with  multiwindow thing.&amp;lt;br/&amp;gt;&lt;br /&gt;
First of all:&amp;lt;br/&amp;gt;&lt;br /&gt;
If you don't intend to use more than one game/window inside eclipse stop reading here. Everything will work like you are used to it from jmonkey.&amp;lt;br/&amp;gt; You will have your GameTaskQueues as you are used to them and can live happily on without bothering ybout the rest.&amp;lt;br/&amp;gt;&lt;br /&gt;
If you, like us, need support for multiple games in one app continue readiung.&amp;lt;br/&amp;gt;&lt;br /&gt;
When you create let's say two games you will have to set single to false.&amp;lt;br/&amp;gt;&lt;br /&gt;
That tells SWTBaseGame to create individual rendering and update queues for each game so that we don't have collisions there.&amp;lt;br/&amp;gt;&lt;br /&gt;
The queues are name &amp;quot;&amp;lt;gamename&amp;gt;.render&amp;quot; and &amp;quot;&amp;lt;gamename&amp;gt;.update&amp;quot;. This is important to remember as your callables will have to be sent to the right queues.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also access the queues directly in SWTBaseGame with getUpdateQueue() or getRenderQueue().&amp;lt;br/&amp;gt;&lt;br /&gt;
Right now you can't render to two games at the same time (NOTE: the next release should include functionality for that, but our current app doesn't need that) so call stopRendering() when your game loses the focus and resumeRendering() when it acquires focus. The important thing is that the games don't stop updating!&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T15:14:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package test;&lt;br /&gt;
 &lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.math.Vector3f;&lt;br /&gt;
 import com.jme.scene.shape.Box;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * &lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - Jun 2, 2008&lt;br /&gt;
  * &lt;br /&gt;
  */&lt;br /&gt;
 public class MyGame extends SWTBaseGame {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param updateResolution&lt;br /&gt;
 	 * @param renderResolution&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 * @param parent&lt;br /&gt;
 	 * @param single&lt;br /&gt;
 	 */&lt;br /&gt;
 	public MyGame(String name, int updateResolution, int renderResolution,&lt;br /&gt;
 			int width, int height, Composite parent, boolean single) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent,&lt;br /&gt;
 				single);&lt;br /&gt;
 		// TODO Auto-generated constructor stub&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		Box myBox=new Box(&amp;quot;boxxy&amp;quot;, Vector3f.ZERO.clone(), 2f, 2f, 2f);&lt;br /&gt;
 		myBox.setRandomColors();&lt;br /&gt;
 		getRootNode().attachChild(myBox);&lt;br /&gt;
 		getRootNode().updateRenderState();&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating this game instantiated it in your createPartControl method and hit the start() method after creating it.&amp;lt;br/&amp;gt;&lt;br /&gt;
 MyGame my=new MyGame(&amp;quot;gamy&amp;quot;,10,20,640,480,parent,true);&lt;br /&gt;
 my.start();&lt;br /&gt;
* The first parameter is a name for the game.&lt;br /&gt;
* The second one is the amount of msecs between two updates.&lt;br /&gt;
* The third one is the amount of msecs between two render runs.&lt;br /&gt;
* four and five are start width and height.&lt;br /&gt;
* number six is the parent composite for the glCanas.&lt;br /&gt;
* the seventh and last one states if this is the only SWTGame running.&lt;br /&gt;
The game is now running.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Controlling the scene==&lt;br /&gt;
Now we want to add a FirstPersonController.&amp;lt;br/&amp;gt;&lt;br /&gt;
To do this add this code to your simpleInitGame() method:&amp;lt;br/&amp;gt;&lt;br /&gt;
 		getGlCanvas().addKeyListener((KeyListener) KeyInput.get());&lt;br /&gt;
 		getGlCanvas()&lt;br /&gt;
 				.addMouseMoveListener((MouseMoveListener) MouseInput.get());&lt;br /&gt;
 		getGlCanvas().addMouseListener((MouseListener) MouseInput.get());&lt;br /&gt;
 		FirstPersonHandler firstPersonHandler = new FirstPersonHandler(display&lt;br /&gt;
 				.getRenderer().getCamera(), 50, 1);&lt;br /&gt;
 		input = firstPersonHandler;&lt;br /&gt;
And add a global var:&lt;br /&gt;
 	/**&lt;br /&gt;
 	 * Handles our mouse/keyboard input.&lt;br /&gt;
 	 */&lt;br /&gt;
 	protected InputHandler input;&lt;br /&gt;
Now overwrite the update() method:&lt;br /&gt;
 	/* (non-Javadoc)&lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#update(float)&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void update(float interpolation) {&lt;br /&gt;
 		super.update(interpolation);&lt;br /&gt;
 		input.update(interpolation);&lt;br /&gt;
 	}&lt;br /&gt;
Start your RCP-app again, click in the 3d window and move around your fancy box.&amp;lt;br/&amp;gt;&lt;br /&gt;
As you can see from this example SWTKeyInput and SWTMouseInput are already registered for handling events&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread works good but I will add some timing related tweaks soon.&amp;lt;br/&amp;gt;&lt;br /&gt;
Have Fun :)&lt;br /&gt;
==What the frick does the simple parameter in the constructor mean?==&lt;br /&gt;
Ok, we are in eclipse RCP so mostly you will deal with  multiwindow thing.&amp;lt;br/&amp;gt;&lt;br /&gt;
First of all:&amp;lt;br/&amp;gt;&lt;br /&gt;
If you don't intend to use more than one game/window inside eclipse stop reading here. Everything will work like you are used to it from jmonkey.&amp;lt;br/&amp;gt; You will have your GameTaskQueues as you are used to them and can live happily on without bothering ybout the rest.&amp;lt;br/&amp;gt;&lt;br /&gt;
If you, like us, need support for multiple games in one app continue readiung.&amp;lt;br/&amp;gt;&lt;br /&gt;
When you create let's say two games you will have to set single to false.&amp;lt;br/&amp;gt;&lt;br /&gt;
That tells SWTBaseGame to create individual rendering and update queues for each game so that we don't have collisions there.&amp;lt;br/&amp;gt;&lt;br /&gt;
The queues are name &amp;quot;&amp;lt;gamename&amp;gt;.render&amp;quot; and &amp;quot;&amp;lt;gamename&amp;gt;.update&amp;quot;. This is important to remember as your callables will have to be sent to the right queues.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also access the queues directly in SWTBaseGame with getUpdateQueue() or getRenderQueue().&amp;lt;br/&amp;gt;&lt;br /&gt;
Right now you can't render to two games at the same time (NOTE: the next release should include functionality for that, but our current app doesn't need that) so call stopRendering() when your game loses the focus and resumeRendering() when it acquires focus. The important thing is that the games don't stop updating!&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T15:04:56Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* Controlling the scene */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package test;&lt;br /&gt;
 &lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.math.Vector3f;&lt;br /&gt;
 import com.jme.scene.shape.Box;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * &lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - Jun 2, 2008&lt;br /&gt;
  * &lt;br /&gt;
  */&lt;br /&gt;
 public class MyGame extends SWTBaseGame {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param updateResolution&lt;br /&gt;
 	 * @param renderResolution&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 * @param parent&lt;br /&gt;
 	 * @param single&lt;br /&gt;
 	 */&lt;br /&gt;
 	public MyGame(String name, int updateResolution, int renderResolution,&lt;br /&gt;
 			int width, int height, Composite parent, boolean single) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent,&lt;br /&gt;
 				single);&lt;br /&gt;
 		// TODO Auto-generated constructor stub&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		Box myBox=new Box(&amp;quot;boxxy&amp;quot;, Vector3f.ZERO.clone(), 2f, 2f, 2f);&lt;br /&gt;
 		myBox.setRandomColors();&lt;br /&gt;
 		getRootNode().attachChild(myBox);&lt;br /&gt;
 		getRootNode().updateRenderState();&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating this game instantiated it in your createPartControl method and hit the start() method after creating it.&amp;lt;br/&amp;gt;&lt;br /&gt;
 MyGame my=new MyGame(&amp;quot;gamy&amp;quot;,10,20,640,480,parent,true);&lt;br /&gt;
 my.start();&lt;br /&gt;
* The first parameter is a name for the game.&lt;br /&gt;
* The second one is the amount of msecs between two updates.&lt;br /&gt;
* The third one is the amount of msecs between two render runs.&lt;br /&gt;
* four and five are start width and height.&lt;br /&gt;
* number six is the parent composite for the glCanas.&lt;br /&gt;
* the seventh and last one states if this is the only SWTGame running.&lt;br /&gt;
The game is now running.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Controlling the scene==&lt;br /&gt;
Now we want to add a FirstPersonController.&amp;lt;br/&amp;gt;&lt;br /&gt;
To do this add this code to your simpleInitGame() method:&amp;lt;br/&amp;gt;&lt;br /&gt;
 		getGlCanvas().addKeyListener((KeyListener) KeyInput.get());&lt;br /&gt;
 		getGlCanvas()&lt;br /&gt;
 				.addMouseMoveListener((MouseMoveListener) MouseInput.get());&lt;br /&gt;
 		getGlCanvas().addMouseListener((MouseListener) MouseInput.get());&lt;br /&gt;
 		FirstPersonHandler firstPersonHandler = new FirstPersonHandler(display&lt;br /&gt;
 				.getRenderer().getCamera(), 50, 1);&lt;br /&gt;
 		input = firstPersonHandler;&lt;br /&gt;
And add a global var:&lt;br /&gt;
 	/**&lt;br /&gt;
 	 * Handles our mouse/keyboard input.&lt;br /&gt;
 	 */&lt;br /&gt;
 	protected InputHandler input;&lt;br /&gt;
Now overwrite the update() method:&lt;br /&gt;
 	/* (non-Javadoc)&lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#update(float)&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void update(float interpolation) {&lt;br /&gt;
 		super.update(interpolation);&lt;br /&gt;
 		input.update(interpolation);&lt;br /&gt;
 	}&lt;br /&gt;
Start your RCP-app again, click in the 3d window and move around your fancy box.&amp;lt;br/&amp;gt;&lt;br /&gt;
As you can see from this example SWTKeyInput and SWTMouseInput are already registered for handling events&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread works good but I will add some timing related tweaks soon.&amp;lt;br/&amp;gt;&lt;br /&gt;
Have Fun :)&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T15:04:06Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package test;&lt;br /&gt;
 &lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.math.Vector3f;&lt;br /&gt;
 import com.jme.scene.shape.Box;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * &lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - Jun 2, 2008&lt;br /&gt;
  * &lt;br /&gt;
  */&lt;br /&gt;
 public class MyGame extends SWTBaseGame {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param updateResolution&lt;br /&gt;
 	 * @param renderResolution&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 * @param parent&lt;br /&gt;
 	 * @param single&lt;br /&gt;
 	 */&lt;br /&gt;
 	public MyGame(String name, int updateResolution, int renderResolution,&lt;br /&gt;
 			int width, int height, Composite parent, boolean single) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent,&lt;br /&gt;
 				single);&lt;br /&gt;
 		// TODO Auto-generated constructor stub&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		Box myBox=new Box(&amp;quot;boxxy&amp;quot;, Vector3f.ZERO.clone(), 2f, 2f, 2f);&lt;br /&gt;
 		myBox.setRandomColors();&lt;br /&gt;
 		getRootNode().attachChild(myBox);&lt;br /&gt;
 		getRootNode().updateRenderState();&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating this game instantiated it in your createPartControl method and hit the start() method after creating it.&amp;lt;br/&amp;gt;&lt;br /&gt;
 MyGame my=new MyGame(&amp;quot;gamy&amp;quot;,10,20,640,480,parent,true);&lt;br /&gt;
 my.start();&lt;br /&gt;
* The first parameter is a name for the game.&lt;br /&gt;
* The second one is the amount of msecs between two updates.&lt;br /&gt;
* The third one is the amount of msecs between two render runs.&lt;br /&gt;
* four and five are start width and height.&lt;br /&gt;
* number six is the parent composite for the glCanas.&lt;br /&gt;
* the seventh and last one states if this is the only SWTGame running.&lt;br /&gt;
The game is now running.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Controlling the scene==&lt;br /&gt;
Now we want to add a FirstPersonController.&amp;lt;br/&amp;gt;&lt;br /&gt;
To do this add this code to your simpleInitGame() method:&amp;lt;br/&amp;gt;&lt;br /&gt;
 		getGlCanvas().addKeyListener((KeyListener) KeyInput.get());&lt;br /&gt;
 		getGlCanvas()&lt;br /&gt;
 				.addMouseMoveListener((MouseMoveListener) MouseInput.get());&lt;br /&gt;
 		getGlCanvas().addMouseListener((MouseListener) MouseInput.get());&lt;br /&gt;
 		FirstPersonHandler firstPersonHandler = new FirstPersonHandler(display&lt;br /&gt;
 				.getRenderer().getCamera(), 50, 1);&lt;br /&gt;
 		input = firstPersonHandler;&lt;br /&gt;
And add a global var:&lt;br /&gt;
 	/**&lt;br /&gt;
 	 * Handles our mouse/keyboard input.&lt;br /&gt;
 	 */&lt;br /&gt;
 	protected InputHandler input;&lt;br /&gt;
Now overwrite the update() method:&lt;br /&gt;
 	/* (non-Javadoc)&lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#update(float)&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void update(float interpolation) {&lt;br /&gt;
 		super.update(interpolation);&lt;br /&gt;
 		input.update(interpolation);&lt;br /&gt;
 	}&lt;br /&gt;
Start your RCP-app again, click in the 3d window and move around your fancy box.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SWTBaseGame is an abstract class so you will have to extend it.&amp;lt;br/&amp;gt;&lt;br /&gt;
SWTKeyInput and SWTMouseInput are already registered, just add your Controller and you are good to go.&amp;lt;br/&amp;gt;&lt;br /&gt;
The SWTBaseGame is multithreaded. The values updateResolution and renderResolution are used by the threads to define how often they run.&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread works good but I will add some timing related tweaks soon.&amp;lt;br/&amp;gt;&lt;br /&gt;
Have Fun :)&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T14:59:47Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* How to use it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package test;&lt;br /&gt;
 &lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.math.Vector3f;&lt;br /&gt;
 import com.jme.scene.shape.Box;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * &lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - Jun 2, 2008&lt;br /&gt;
  * &lt;br /&gt;
  */&lt;br /&gt;
 public class MyGame extends SWTBaseGame {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param updateResolution&lt;br /&gt;
 	 * @param renderResolution&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 * @param parent&lt;br /&gt;
 	 * @param single&lt;br /&gt;
 	 */&lt;br /&gt;
 	public MyGame(String name, int updateResolution, int renderResolution,&lt;br /&gt;
 			int width, int height, Composite parent, boolean single) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent,&lt;br /&gt;
 				single);&lt;br /&gt;
 		// TODO Auto-generated constructor stub&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		Box myBox=new Box(&amp;quot;boxxy&amp;quot;, Vector3f.ZERO.clone(), 2f, 2f, 2f);&lt;br /&gt;
 		myBox.setRandomColors();&lt;br /&gt;
 		getRootNode().attachChild(myBox);&lt;br /&gt;
 		getRootNode().updateRenderState();&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating this game instantiated it in your createPartControl method and hit the start() method after creating it.&amp;lt;br/&amp;gt;&lt;br /&gt;
 MyGame my=new MyGame(&amp;quot;gamy&amp;quot;,10,20,640,480,parent,true);&lt;br /&gt;
 my.start();&lt;br /&gt;
* The first parameter is a name for the game.&lt;br /&gt;
* The second one is the amount of msecs between two updates.&lt;br /&gt;
* The third one is the amount of msecs between two render runs.&lt;br /&gt;
* four and five are start width and height.&lt;br /&gt;
* number six is the parent composite for the glCanas.&lt;br /&gt;
* the seventh and last one states if this is the only SWTGame running.&lt;br /&gt;
The game is now running.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SWTBaseGame is an abstract class so you will have to extend it.&amp;lt;br/&amp;gt;&lt;br /&gt;
SWTKeyInput and SWTMouseInput are already registered, just add your Controller and you are good to go.&amp;lt;br/&amp;gt;&lt;br /&gt;
The SWTBaseGame is multithreaded. The values updateResolution and renderResolution are used by the threads to define how often they run.&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread works good but I will add some timing related tweaks soon.&amp;lt;br/&amp;gt;&lt;br /&gt;
Have Fun :)&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T14:55:09Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* How to use it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package test;&lt;br /&gt;
 &lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.math.Vector3f;&lt;br /&gt;
 import com.jme.scene.shape.Box;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * &lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - Jun 2, 2008&lt;br /&gt;
  * &lt;br /&gt;
  */&lt;br /&gt;
 public class MyGame extends SWTBaseGame {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param updateResolution&lt;br /&gt;
 	 * @param renderResolution&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 * @param parent&lt;br /&gt;
 	 * @param single&lt;br /&gt;
 	 */&lt;br /&gt;
 	public MyGame(String name, int updateResolution, int renderResolution,&lt;br /&gt;
 			int width, int height, Composite parent, boolean single) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent,&lt;br /&gt;
 				single);&lt;br /&gt;
 		// TODO Auto-generated constructor stub&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		Box myBox=new Box(&amp;quot;boxxy&amp;quot;, Vector3f.ZERO.clone(), 2f, 2f, 2f);&lt;br /&gt;
 		myBox.setRandomColors();&lt;br /&gt;
 		getRootNode().attachChild(myBox);&lt;br /&gt;
 		getRootNode().updateRenderState();&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating this game instantiated it in your createPartControl method and hit the start() method after creating it.&amp;lt;br/&amp;gt;&lt;br /&gt;
The game is now running.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SWTBaseGame is an abstract class so you will have to extend it.&amp;lt;br/&amp;gt;&lt;br /&gt;
SWTKeyInput and SWTMouseInput are already registered, just add your Controller and you are good to go.&amp;lt;br/&amp;gt;&lt;br /&gt;
The SWTBaseGame is multithreaded. The values updateResolution and renderResolution are used by the threads to define how often they run.&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread works good but I will add some timing related tweaks soon.&amp;lt;br/&amp;gt;&lt;br /&gt;
Have Fun :)&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T14:55:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* How to use it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package test;&lt;br /&gt;
&lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.math.Vector3f;&lt;br /&gt;
 import com.jme.scene.shape.Box;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * &lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - Jun 2, 2008&lt;br /&gt;
  * &lt;br /&gt;
  */&lt;br /&gt;
 public class MyGame extends SWTBaseGame {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param updateResolution&lt;br /&gt;
 	 * @param renderResolution&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 * @param parent&lt;br /&gt;
 	 * @param single&lt;br /&gt;
 	 */&lt;br /&gt;
 	public MyGame(String name, int updateResolution, int renderResolution,&lt;br /&gt;
 			int width, int height, Composite parent, boolean single) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent,&lt;br /&gt;
 				single);&lt;br /&gt;
 		// TODO Auto-generated constructor stub&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		Box myBox=new Box(&amp;quot;boxxy&amp;quot;, Vector3f.ZERO.clone(), 2f, 2f, 2f);&lt;br /&gt;
 		myBox.setRandomColors();&lt;br /&gt;
 		getRootNode().attachChild(myBox);&lt;br /&gt;
 		getRootNode().updateRenderState();&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating this game instantiated it in your createPartControl method and hit the start() method after creating it.&amp;lt;br/&amp;gt;&lt;br /&gt;
The game is now running.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SWTBaseGame is an abstract class so you will have to extend it.&amp;lt;br/&amp;gt;&lt;br /&gt;
SWTKeyInput and SWTMouseInput are already registered, just add your Controller and you are good to go.&amp;lt;br/&amp;gt;&lt;br /&gt;
The SWTBaseGame is multithreaded. The values updateResolution and renderResolution are used by the threads to define how often they run.&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread works good but I will add some timing related tweaks soon.&amp;lt;br/&amp;gt;&lt;br /&gt;
Have Fun :)&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T14:44:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* How to use it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package org.rifidi.designer.ide.converter.editor.game;&lt;br /&gt;
 &lt;br /&gt;
 import org.eclipse.swt.events.KeyListener;&lt;br /&gt;
 import org.eclipse.swt.events.MouseListener;&lt;br /&gt;
 import org.eclipse.swt.events.MouseMoveListener;&lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.input.FirstPersonHandler;&lt;br /&gt;
 import com.jme.input.InputHandler;&lt;br /&gt;
 import com.jme.input.KeyInput;&lt;br /&gt;
 import com.jme.input.MouseInput;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * Game for the Collada editor.&lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - May 27, 2008&lt;br /&gt;
  * &lt;br /&gt;
 */&lt;br /&gt;
 public class EditorGame extends SWTBaseGame {&lt;br /&gt;
 	protected InputHandler input;&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * Constructor.&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 */&lt;br /&gt;
 	public EditorGame(String name, int width, int height, Composite parent, int updateResolution, int renderResolution) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent, false);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		getGlCanvas().addKeyListener((KeyListener) KeyInput.get());&lt;br /&gt;
 		getGlCanvas()&lt;br /&gt;
 				.addMouseMoveListener((MouseMoveListener) MouseInput.get());&lt;br /&gt;
 		getGlCanvas().addMouseListener((MouseListener) MouseInput.get());&lt;br /&gt;
 		FirstPersonHandler firstPersonHandler = new FirstPersonHandler(display&lt;br /&gt;
 				.getRenderer().getCamera(), 50, 1);&lt;br /&gt;
 		input = firstPersonHandler;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#update(float)&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void update(float interpolation) {&lt;br /&gt;
 		super.update(interpolation);&lt;br /&gt;
 		input.update(interpolation);&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The SWTBaseGame is an abstract class so you will have to extend it.&amp;lt;br/&amp;gt;&lt;br /&gt;
SWTKeyInput and SWTMouseInput are already registered, just add your Controller and you are good to go.&amp;lt;br/&amp;gt;&lt;br /&gt;
The SWTBaseGame is multithreaded. The values updateResolution and renderResolution are used by the threads to define how often they run.&amp;lt;br/&amp;gt;&lt;br /&gt;
The RenderThread works good but I will add some timing related tweaks soon.&amp;lt;br/&amp;gt;&lt;br /&gt;
Have Fun :)&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T14:42:11Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* How to use it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;br /&gt;
I assume that you are an Eclipse RCP developer so I will just skip the details for creating an RCP projhect.&amp;lt;br/&amp;gt;&lt;br /&gt;
After creating the project add org.rifidi.jmeswt to your dependencies.&amp;lt;br/&amp;gt;&lt;br /&gt;
Now create your custom game:&amp;lt;br/&amp;gt;&lt;br /&gt;
 package org.rifidi.designer.ide.converter.editor.game;&lt;br /&gt;
 &lt;br /&gt;
 import org.eclipse.swt.events.KeyListener;&lt;br /&gt;
 import org.eclipse.swt.events.MouseListener;&lt;br /&gt;
 import org.eclipse.swt.events.MouseMoveListener;&lt;br /&gt;
 import org.eclipse.swt.widgets.Composite;&lt;br /&gt;
 import org.rifidi.jmeswt.SWTBaseGame;&lt;br /&gt;
 &lt;br /&gt;
 import com.jme.input.FirstPersonHandler;&lt;br /&gt;
 import com.jme.input.InputHandler;&lt;br /&gt;
 import com.jme.input.KeyInput;&lt;br /&gt;
 import com.jme.input.MouseInput;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * Game for the Collada editor.&lt;br /&gt;
  * &lt;br /&gt;
  * @author Jochen Mader - jochen@pramari.com - May 27, 2008&lt;br /&gt;
  * &lt;br /&gt;
 */&lt;br /&gt;
 public class EditorGame extends SWTBaseGame {&lt;br /&gt;
 	protected InputHandler input;&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * Constructor.&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @param name&lt;br /&gt;
 	 * @param width&lt;br /&gt;
 	 * @param height&lt;br /&gt;
 	 */&lt;br /&gt;
 	public EditorGame(String name, int width, int height, Composite parent, int updateResolution, int renderResolution) {&lt;br /&gt;
 		super(name, updateResolution, renderResolution, width, height, parent, false);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#simpleInitGame()&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void simpleInitGame() {&lt;br /&gt;
 		getGlCanvas().addKeyListener((KeyListener) KeyInput.get());&lt;br /&gt;
 		getGlCanvas()&lt;br /&gt;
 				.addMouseMoveListener((MouseMoveListener) MouseInput.get());&lt;br /&gt;
 		getGlCanvas().addMouseListener((MouseListener) MouseInput.get());&lt;br /&gt;
 		FirstPersonHandler firstPersonHandler = new FirstPersonHandler(display&lt;br /&gt;
 				.getRenderer().getCamera(), 50, 1);&lt;br /&gt;
 		input = firstPersonHandler;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*&lt;br /&gt;
 	 * (non-Javadoc)&lt;br /&gt;
 	 * &lt;br /&gt;
 	 * @see org.rifidi.jmeswt.SWTBaseGame#update(float)&lt;br /&gt;
 	 */&lt;br /&gt;
 	@Override&lt;br /&gt;
 	protected void update(float interpolation) {&lt;br /&gt;
 		super.update(interpolation);&lt;br /&gt;
 		input.update(interpolation);&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T14:37:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;br /&gt;
==How to use it==&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	<entry>
		<id>https://wiki.rifidi.net/index.php/Rifidi:jmeswt</id>
		<title>Rifidi:jmeswt</title>
		<link rel="alternate" type="text/html" href="https://wiki.rifidi.net/index.php/Rifidi:jmeswt"/>
				<updated>2008-06-02T14:37:27Z</updated>
		
		<summary type="html">&lt;p&gt;Jochen: /* What's in it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jMonkey SWT bindings=&lt;br /&gt;
==Overview==&lt;br /&gt;
Within this entry we will introduce you to the jmeswt plugin that allows developers to get the jMonkey engine into there app.&amp;lt;br/&amp;gt;&lt;br /&gt;
All our code is release under the LGPL. The contained libraries are compatible with this license (if we overlooked something please inform us).&amp;lt;br/&amp;gt;&lt;br /&gt;
Included libraries are:&amp;lt;br/&amp;gt;&lt;br /&gt;
* [http://lwjgl.org/ lwjgl]&lt;br /&gt;
* [https://jmephysics.dev.java.net/ jmephysics]&lt;br /&gt;
* [http://jmonkeyengine.com/ jmonkey]&lt;br /&gt;
This whole library has come from tons of forum posts and a lot of hard work.&amp;lt;br/&amp;gt;&lt;br /&gt;
Most notably we included the OffscreenRenderer from Olivier Sambourg and Joshua Slack.&amp;lt;br/&amp;gt;&lt;br /&gt;
==Installation==&lt;br /&gt;
We have our own update site right now to make it as convenient as possible to use the plugin: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://rifidi.org/update http://rifidi.org/update Rifidi update site]&amp;lt;br/&amp;gt;&lt;br /&gt;
Just add this site in Help-&amp;gt;Software Updates-&amp;gt;find and install ...&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding it just select org.rifidi.jmeswt:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Screenshot-Updates.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Yoiu can also add the second plugin in the list, it's a (alpha!!!!) editor for .dae (collada) files.&amp;lt;br/&amp;gt;&lt;br /&gt;
After adding the editor a doubleclick on a file ending with .dae will bring up a 3d view that displays the contents of the file. It's just a little demo app that will be enhanced as we progress on our ide for RifidiDesigner.&amp;lt;br/&amp;gt;&lt;br /&gt;
The sourccde to this plugin is availabel from our puplic repository.&amp;lt;br/&amp;gt;&lt;br /&gt;
==What's in it==&lt;br /&gt;
The plug-in contain two things:&amp;lt;nr/&amp;gt;&lt;br /&gt;
* A jar with the system provider: This is required as jmonkey uses the old service stuff from sun that requires some MANIFEST magic that apparently doesn't go well with the OSGi classloaders.&lt;br /&gt;
* The classes that actually form the layer between SWT and jMonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTKeyInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.SWTMouseInput: This is the KeyInput provider to be used with the different handlers of jmonkey.&lt;br /&gt;
** org.rifidi.jmeswt.input.Mapping: This is a static class to provide a fast and extensible way of mapping the different SWT events to LWJGL events. It's about 90% complete with only some minor things missing.&lt;br /&gt;
** org.rifidi.jmeswt.SWTBaseGame: This is the starting point for SWT based jmonkey games (See next chapter).&lt;/div&gt;</summary>
		<author><name>Jochen</name></author>	</entry>

	</feed>