Search Unity

Unified Coordinate System for String and QCAR

Discussion in 'Scripting' started by Elecman, Oct 15, 2011.

  1. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    Hi Elecman,

    I'm using Vuforia in Unity3.5 iOs Pro.

    I read here in the manual :

    " -Import UniFileBrowser.unitypackage (optional)
    -Import VectrosityCore.unitypackage (optional but recommended)
    -Import ObjReader.unitypackage (optional)
    "

    I tried loading UCS without these packages but just got loads of errors, so I'm guessing I at least require Vectrosity for it to operate smoothly out of the box ... yes ?

    Qs.
    Will it run smoothly without ObjReader UniFile ?

    Is there a way to turn Off GUI buttons Vectorosity lines once UCS is running ?


    Mick
     
    Last edited: Aug 31, 2012
  2. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Hi Mick,

    If you do not want to use the StarScene software packages, you have to disable the applicable preprocessors to prevent any compile errors. This is in the manual but I changed the location now to the install procedure to make it a bit more obvious. Anyway, this is the entry I am referring to;

    UCS will run just fine without ObjReader and UniFileBrowser. These are only required if you want to load OBJ files. However, it is not recommended you disable Vectrosity. If you don't use the geometry building feature of UCS, it still works pretty well. But if you do want to build geometry, you really need Vectrosity.

    You can turn off the GUI buttons in Game Mode by pressing the "Close Menu" button. To display them again, tap three fingers on the screen. You can disable the Vectrosity lines by disabling the "#define VECTROSITY" preprocessor in the applicable files.

    Let me know if it works.
     
  3. Vrice

    Vrice

    Joined:
    Aug 4, 2012
    Posts:
    3
    Hi Elecman,

    This plugin looks very nice:D
    I have a slight problem though, I cannot get it to work on my Android phone.
    I followed all the steps in the manual pdf, and built it to my phone.
    I use the FrameMarkers scene, with the frameMarker_Sample images.
    The problem is that it does not treat all images individually, it only shows an outline on 1 image at a time.
    If I set a reference marker and I put another image in view, this one will also have a bold outline
    The result of this is that it treats this as if it were a normal AR project.
    If I place another marker in view the object that is displayed will just jump to the other marker.
    Have you encountered this problem before, and do you know how to solve it?

    Vrice
     
  4. thaFreakazoid

    thaFreakazoid

    Joined:
    Oct 11, 2012
    Posts:
    8
    Hey elecman
    I am pretty new at all this so I am not totally sure if my problem is with your system or just a general unity problem.
    I am having problems getting everything working, I followed the instructions in the manual on installation but it just keeps telling me that it cant find type or namespace VectorLines. in the installation you write that i should import the package from the vectrosity folder named VectrosityCore, there is no such package however there is one called VectrositySource, so i assume that that is the one to include. the vectrosity package puts its scripts in the standardassetsfolder and i guess that is why markerRecorder.cs cant find it but if i move VectorLines.cs to the scripts folder vectrosity causes problems how can i get it to recognize the file Vectorlines.cs?
    kind regards
     
  5. Philostastically

    Philostastically

    Joined:
    Oct 12, 2012
    Posts:
    4
    Hi elecman,

    I've been using your system for a day or so now and it seems great. I was wondering if you can use a combination of markers in the ucs and other markers which can be moved freely and are independent? You seem to allude to them in the manual with geometry and tracking markers. However I'm not sure how to specify which ones are which. To describe my situation I've got one big model which is often hard to fit on the same screen as the marker, hence why I want to use ucs, and a couple of smaller models on handheld markers. I already have this project working with qcar framemarkers and would rather not change it too much.
    Any help would be great thanks,

    Alex
     
  6. Vrice

    Vrice

    Joined:
    Aug 4, 2012
    Posts:
    3
    Hi theFreakazoid,
    I have had the same problem. What you want to do here is open another unity project and import the VectrocitySources.
    When you do this you will have VectrocityCore.UnityPackage in your Project folder.
    Find this new project on your pc and copy this unitypackage to a place where you can find it again.
    Then open up the project you were working on, and import the VectrocityCore.
    This solved the problem for me:)
    Vrice
     
  7. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    @Vrice,
    I have never heard of that problem before. However, it sounds like you are using multiple printed markers, but they are all exactly the same. By definition this will fail to work. Think about it, if all your markers look exactly the same, how can UCS know which marker is located where? Please print out the markers supplied by UCS in the folder Print->Vuforia Frame Markers. Print out each file only once.

    In case my analysis is incorrect, please provide the following information:
    -Which UCS version are you using?
    -Which Vectrosity version are you using?
    -Can you try the markers that come with UCS, does it work OK with that?
    -Does it run ok in the editor, using FrameMarkersManual scene?
    -What phone are you using?
    -Do you have access to another android, does it run ok on that one?
    -Do not press the debug buttons. These are configured to switch off marker recognition of certain markers. This is for debugging only.


    @thaFreakazoid,
    -VectrosityCore is renamed to VectrositySource Use VectrositySource instead. You were right about that one. Thanks for picking this up. I have changed it in the manual now.
    -Don't move the location of the scripts. Please put them back.
    -The name space error is caused by an update by Vectrosity. You can fix all the errors by adding this line at the top of the file (below the other "using ...;" lines)
    Code (csharp):
    1. using Vectrosity;
    You will have to put this line in every file which throws an error. I will fix it in the next update. Thanks for alerting me to this bug.


    @Philostastically,
    What you want to do can be done but you will have to dig into the code. I will make a system which makes this much easier to do (no coding required) but I am not sure when I will finish it.

    Anyway, indeed it has to do with geometry markers and tracking markers. Tracking markers are markers which are in view during recording and have been successful been incorporated in the Unified Coordinate System of the recording. You can not move these markers around in the scene. They must be static. You can remove them once the recording is finished though, just not change their location. All other markers are geometry markers. They can be freely moved around in the scene and have a red outline in geometry mode and in game mode if the outlines are set to Force-ON.
     
    Last edited: Oct 12, 2012
  8. Vrice

    Vrice

    Joined:
    Aug 4, 2012
    Posts:
    3
    ah thanks Elecman, this was obviously the problem:)
     
  9. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    @Philostastically
    On second thought, this is already possible using merged scenes. I have added a detailed description to the manual for the next version. Here is it:

    Multiple scene setup
    The multiple scene setup method is used if you have markers which move in relation to each other. For example, markers glued to each side of a milk box and a serial box. Or you can have single markers moving around. Or a combination of boxes (with markers) and single freely movable markers, all placed on a static table with markers glued to it.

    -Let's say you have a serial box with a marker glued to each side. We also have a table with a marker glued to each corner. And we have one marker which is free to move around. In the Editor, in the Hierarchy, Create these empty game objects: MilkBox, GroundPlane, Marker1, and MergedScenes.

    -Put the 3d content you want to attach to the milk box, table, and separate marker into the applicable empty game object using parenting. Disable all content, including the empty parent game objects. Do not place any content in the MergedScenes game object, but do disable it.

    -Drag each of the parent game objects (including the MergedScenes object) onto an empty slot of the Scene Objects array on MarkerRecorder.cs (in the Inspector). Buttons based on this array will be automatically created during runtime in the Save, Load, and Merge scenes menu.

    -Start recording the first coordinate system for example MilkBox. Only bring in view the markers which belong to MilkBox. If you accidentally bring a marker in view belonging to, say, GroundPlane, press Reset All and start again. When finished recording, select a reference marker (will be the origin of the 3d content belonging to MilkBox) and press Stop Recording. At the Save menu, select the MilkBox button.

    -Repeat the recording process for GroundPlane and Marker1 as well. Note that Marker1 has only one marker but it still needs to be recorded and saved. Do not save anything to MergedScenes yet.

    -When finished recording and saving all scenes, press Merge Scenes (not the MergedScenes button, but the Merge Scenes system menu). Select all the scenes you want to merge into a single scene. A solid circle icon will appear next to the last button pressed. This button is the scene which will never rotate or translate and can thus be used for physics or can be used as a reference plane for the other scenes. It is called the World Center Scene. A ring icon will appear next to all other buttons pressed. To de-select a scene, press the button again. In this case, select MilkBox, Marker1, and GroundPlane. Make sure that GroundPlane has the solid circle as we want to make the table the reference for the physics (gravity). Do not select the MergedScenes button yet. When finished, press Home.

    -At the Home screen, press Save Scene and now select the button you created to store the merged scenes, which is called MergedScenes in this case.

    -Now Game Mode can be entered and the MilkBox and GroundPlane 3d content will be visible as long as one or more of its tracking markers are in view. Since Marker1 only consists out of one marker, that marker must be in view in order to display it's attached 3d content.

    -If you want to load the scene containing MilBox, GroundPlane, and Marker1, just load the MergedScenes scene via the Load menu.

    -Note that adding geometry only can be done when only one scene is loaded. Also note that lights attached to any scene will also light objects in all the other scenes. If you want a light to only affect the scene it belongs to, you have to work with layers and masks. See the Unity documentation for more information on this.

    This all sounds like a lot of work but it only has to be done by the developer once. The save file can be distributed to the end user.


    Single scene setup
    The single scene setup method is used if your markers are all static (tracking markers) with none of the markers moving around. For example, markers glued to each corner of a table.

    -In the Editor, in the Hierarchy, make a separate empty game object for each coordinate system you want to use. For example: Box1, Box2, and GroundPlane when you want to merge scenes together, or just for example "GroundPlane" if you only want to use only one scene. If you want to merge scenes together, also make an additional game object for the merged scenes, for example Box1Box2Groundplane.

    -Fill all of the game objects you created with your 3d content (parenting it to the empty game object) and disable all content, including the parent game object. When using merged scenes, do not place any content in the game object used for the merged scenes, but do disable it.

    -Drag each of the empty game objects (including the merged scenes object, if used) with its children onto the empty slots of the Scene Objects array on MarkerRecorder.cs on the Inspector. Increase the size of the Scene Objects array as needed using the Inspector. Buttons based on this array will be automatically created during runtime in the Save, Load, and Merge scenes menu.
     
    Last edited: Oct 13, 2012
  10. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    New version uploaded.

    Most notable changes:
    -More accurate rotational averaging when multiple markers are in view.
    -Fixed compatibility issue with Vectrosity.
     
  11. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    Hi Elecman, (where is MarkerRecorder.cs ? )
    note: I posted a similar message on the Vuforia Forum too.

    I have purchased vecterosity, loaded Unity-1.5.9 iOS, UCS into a new project.

    The UCS setup for vuforia states:

    " Click on any script in the Unity3d editor and select "Execution order" in the top right Inspector window. Then modify the script execution order so that QCARBehaviour.cs is executed first, and MarkerRecorder.cs second. Then click Apply.

    I have placed QCARBehavior first ....... but there is no MarkerRecorder.cs script. I only see MarkerEditor, MarkerBehaviour or MarkerAccessor.

    note: I have a printed copy of the manual that comes with the UCS download.

    Michael
     
    Last edited: Oct 20, 2012
  12. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    I have fixed that now. Please download the new version again.
     
  13. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    Hi Elecman,

    Ok, will download the new version now.

    just to confirm.. I'm navigating to the first post from this thread on this forum to download the updated version.

    yes ?
     
    Last edited: Oct 20, 2012
  14. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Yes, indeed. Currently, 0.9a is the latest version.
     
  15. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    Do I import VectrositySource or Vectrosity_Unity3.unitypackage ??

    the UCS manual states " VectrosityCore " but this does not exist.

    Mick
     
  16. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    VectrositySource
    I will fix it in the manual. Sorry for the inconvenience. I should have checked these things more thoroughly.
     
  17. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    That's fine ... you can use me as a guinnea pig... User Testing experience (take a few notes ) and then after all goes well simply iron out the set-up issues

    I'll keep putting my experience in this post as I go along.. any tips would be appreciated ...

    So onwards and upwards .....
     
  18. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    now the update() looks like this

    " void Update()
    Camera.main.transform.position = Vector3.zero;
    Camera.main.transform.rotation = Quaternion.identity;
    {
    if (!mIsInitialized)
    return;
    "

    CORRECT ??

    note: when I copied the lines from the manual it actually grabs two other lines looks like this when I first paste it...

    Camera.main.transform.position = Vector3.zero;
    #define VECTROSITY
    #define OBJREADER
    Camera.main.transform.rotation = Quaternion.identity;

    I have removed
    "
    #define VECTROSITY
    #define OBJREADER

    "
    yes ?
     
    Last edited: Oct 20, 2012
  19. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Ok, thanks. I uploaded version 0.9b but the only change is that VectrosityCore thing in the manual, so no need to download that version again.

    Tips:
    -Read the manually carefully, especially the chapters "Scene setup..." and "...Installation". UCS isn't particularly plug and play as it is middle-middle ware designed for developers.
    -If you want to use the car from version 0.7 be sure not to use any of the UCS logic of that version but just use the car assets and scripts. Also keep in mind that the car is not really designed for small scales (I got it from a Unity demo project) and it doesn't drive well. I just used it for the youtube demo. It is not suitable for a game.
     
  20. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    I just changed the execution order, no problem

    CQAR = 1st
    MarkerRecorder = 2nd

    now moving into
    Layers:
    BackGround Camera
    videScreen
    Main Camera etc....
     
  21. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    I will use the car purely to test the scene. Then load my own assets I have a few 3D models I created i.e.. The bear you see in my profile pic. He is part of a game I am creating .. I'll send you a Youtube video once I get him operating with UCS. I would like to see him run about on the ground. I have all animation loaded into a scene but only with keyboard navigation.. will port to iOS using Playmaker. Finger Gestures.

    one thing I am uncertain about in the setup manual is the Checking Layers section

    " -Main camera should have culling mask: everything except vidScreen. -RayCastLayerMask in the Inspector on MarkerRecorder.cs should have: everything except "ignore raycast" and vidScreen. "
     
  22. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    The first part of the Update() function in QCARBehaviour.cs should be changed from this:

    Code (csharp):
    1.  
    2. void Update()
    3. {
    4.     if (!mIsInitialized)
    5.  
    To this:

    Code (csharp):
    1.  
    2. void Update()
    3. {
    4.     Camera.main.transform.position = Vector3.zero;
    5.     Camera.main.transform.rotation = Quaternion.identity;
    6.  
    7.     if (!mIsInitialized)
    8.  
    Just leave the layers thing for now. It should work automatically but someone said it didn't apply the layers properly by default so I added a checking routine to the manual. Just get it to run first.
     
    Last edited: Oct 20, 2012
  23. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    Ah.... of course, inside the update { }


    oK i changed

    HINT_IMAGE_TARGET_MILLISECONDS_PER_MULTI_FRAME = 5,
     
    Last edited: Oct 20, 2012
  24. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    I'm conducting all this aboard a boat !
    I am on a Canal Boat in London .... cruising up the Grand Union Canal. :p
     
  25. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Cool stuff. I am in Vietnam now where it is currently midnight. So get it up and running and I go to sleep B-)
     
  26. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    HA-HA Sleep.. you know programmers never sleep ... burning the midnight Oil again ...

    ok just finished

    void OnWillRenderObject () {
    if(m_vectorLine != null){
    m_vectorLine.active = true;
    VectorManager.DrawArrayLine2 (m_objectNumber.i);
    }
    }
     
  27. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    Now it just says.... Unity Build Settings

    FILE> etc ...

    DO I have to open a scene first ? which one ???
     
  28. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    p.s I am using ipad2 and have done many builds on this so this should be fine with X-code
     
  29. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    void OnWillRenderObject () {
    if(m_vectorLine != null){
    m_vectorLine.active = true;
    VectorManager.DrawArrayLine2 (m_objectNumber.i);
    }
    }

    hhmm... strange ?

    says theline:29
    if(m_vectorLine != null){

    expects ' ?? '
     
    Last edited: Oct 20, 2012
  30. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Maybe the copying from the PDF to the source code went wrong. I see some weird characters in your forum posts as well. Never open any code file with a normal text editor! This is asking for trouble as it will add all sorts of unsupported characters and information (such as highlighting, bold text, etc). Open it only in the text editors which come with Unity such as MonoDevelop.

    Also, first run UCS with the FrameMarkersManual scene and see if everything works ok. That is the only scene which works in the Editor. If you want to export to your iPad, then it doesn't matter which scene is currently active as one of the scripts takes care of the proper scene loading.
     
    Last edited: Oct 20, 2012
  31. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    I opened it in MonoDev

    All editing is via MonoDev.
     
  32. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    MonDev does not like empty space..

    Last error is in MarkerRecorder.cs

    is in line 4784:

    " foreach(Result result in results){ "


    unity error = "Result " could not be found ... are you missing a using directive or an assembly reference ?
     
    Last edited: Oct 20, 2012
  33. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Can you provide some more information of the error in foreach?

    Edit:
    Ah, I get it. Refer to this entry in the manual:

    It seems that you did not install ObjReader. So in MarkerRecorder.cs change

    Code (csharp):
    1.  
    2. #define OBJREADER
    3.  
    to
    Code (csharp):
    1.  
    2. //#define OBJREADER
    3.  
     
    Last edited: Oct 20, 2012
  34. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    unity error = "Result " could not be found ... are you missing a using directive or an assembly reference ?

    I'm guessing this is stating there are two instances of Result here

    as I get the same error later where there there is " Result result "

    eg. Line 4794

    foreach(Result result in results){
     
    Last edited: Oct 20, 2012
  35. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    Ah ok I get ya ... of course ;)
     
  36. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    error: Unexpected symbol in line 4157 "public "


    public void SaveFile(string pathToFile){ //tag: closeFile, CloseFile, saveFile


    next errors: Assets/Scripts/MarkerRecorder.cs(3873,17): warning CS0642: Possible mistaken empty statement

    Assets/Scripts/MarkerRecorder.cs(3873,17): warning CS0642: Possible mistaken empty statement

    Assets/Scripts/MarkerRecorder.cs(4161,22): error CS0136: A local variable named `merged' cannot be declared in this scope because it would give a different meaning to `merged', which is already used in a `child' scope to denote something else

    Assets/Scripts/MarkerRecorder.cs(4247,42): error CS0136: A local variable named `n' cannot be declared in this scope because it would give a different meaning to `n', which is already used in a `parent' scope to denote something else
     
    Last edited: Oct 20, 2012
  37. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    I think those other errors are caused by the first error. It seems you have one of those invalid characters in your code again. Please fetch a fresh version of MarkerRecorder.cs and don't copy and paste anything to that file. If you want to change something, then type it manually.
     
  38. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    ok will replace MarkerRecorder.cs with fresh copy
     
  39. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    The image file doesn't work as the FTP server needs a password. Can you send me your MarkerRecorder.cs file?
     
  40. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    To which address ??
     
    Last edited: Oct 20, 2012
  41. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    I send you an email with the MarkerRecorder.cs file. Email me yours as well so I can have a look what's wrong.

    By the way, if you want to get an original file from the unitypackage, you can just click that file and Unity will detect that only MarkerRecorder has changed and will offer you to overwrite only that one.
     
  42. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    O k I sent it....

    I will replace it with the one you sent yes..
     
  43. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    1. Assets/Scripts/MarkerRecorder.cs(4157,14): error CS1525: Unexpected symbol `public'

    2. Assets/Scripts/MarkerRecorder.cs(3873,17): warning CS0642: Possible mistaken empty statement

    3. Assets/Scripts/MarkerRecorder.cs(4160,24): error CS0128: A local variable named `sceneName' is already defined in this scope

    4. Assets/Scripts/MarkerRecorder.cs(4161,22): error CS0136: A local variable named `merged' cannot be declared in this scope because it would give a different meaning to `merged', which is already used in a `child' scope to denote something else

    5. Assets/Scripts/MarkerRecorder.cs(4247,42): error CS0136: A local variable named `n' cannot be declared in this scope because it would give a different meaning to `n', which is already used in a `parent' scope to denote something else
     
    Last edited: Oct 20, 2012
  44. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    Oops, that is a bug in my code, caused by disabling ObjReader. I emailed you the fixed version.
     
  45. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    ok will take a look now... was enjoying reading your comments section in MarketRecorder.cs wow some amazing ideas you have there.. piece of wall breaks apart and still contains the texture..Cool !!!

    I would love to see the possibility of having a hidden hole that opens when object is nearby. hole looks just like the ground.
     
    Last edited: Oct 20, 2012
  46. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    OK all errors are gone..... Amazing !!! Nice One
     
  47. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    SO which Scene shall I load to test ??

    I read somewhere not to use FrameMarkersManual (that's only for special testing yes.. )
     
  48. Elecman

    Elecman

    Joined:
    May 5, 2011
    Posts:
    1,374
    On MAC or PC, ONLY use FrameMarkersManual. This is for testing only.

    On IOS or Android, do NOT use FrameMarkersManual. But this is automatically disabled anyway.

    Here is an example of using a texture from the camera:
    https://www.youtube.com/watch?v=kEMDgvfFUcI
    Look at they character jumping off the table onto the floor.

    I will call it a day now. See you tomorrow.
     
  49. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    SO I tried ImageTargetRuntime and it loaded .. all buttons etc.. are there and I hit record "red light flashing "

    So now I just have to read over the instructions.. yes ?? learn how to run this baby...
     
  50. Mickman

    Mickman

    Joined:
    May 9, 2012
    Posts:
    153
    I really appreciate you walking me through all that Elecman.

    Seriously appreciated...

    Hope I can create something fun.

    Mick