Sweet Home 3D JS Online

This topic has been viewed 846892 times and has 51 replies
Thread status: Active
Test the features and bug fixes of future versions [img]http://www.sweethome3d.com/images/flags/en_small.gif[/img]
son87a
Posts: 12
Joined: Thu Oct 28, 2021 7:35 am

Re: Sweet Home 3D JS Online

Post by son87a »

I tried edit code after google. Wrap try in {}
Its working but I don't know write in finally statement.
Sorry, I'm working with PHP, and don't know Java.
Can you fix that ?

Code: Select all

 try {InputStream input = new FileInputStream(homeFile);
              ByteArrayOutputStream output = new ByteArrayOutputStream();
           byte[] buffer = new byte[8096];
           int size;
           while ((size = input.read(buffer)) != -1) {
             output.write(buffer, 0, size);
           }
           homeFileContent = output.toByteArray();
         }
        finally{
           // write something here ?
         }

Code: Select all

try {OutputStream servletOut = response.getOutputStream();
       servletOut.write(homeFileContent);
     }
     finally{
     // write something here ?
    }
User avatar
Puybaret
Posts: 9440
Joined: Mon Nov 07, 2005 12:00 pm
Country: Paris, France
Contact:

Re: Sweet Home 3D JS Online

Post by Puybaret »

You don't have to write anything in [font=courier new]finally[/font] blocks (note that they don't even exist in the released version of readHome.jsp). I guess you should learn Java before going further...
Emmanuel Puybaret, Sweet Home 3D creator
son87a
Posts: 12
Joined: Thu Oct 28, 2021 7:35 am

Re: Sweet Home 3D JS Online

Post by son87a »

Thank you for your time !
User avatar
Puybaret
Posts: 9440
Joined: Mon Nov 07, 2005 12:00 pm
Country: Paris, France
Contact:

Re: Sweet Home 3D JS Online

Post by Puybaret »

A new version of Sweet Home 3D JS Online was released last week-end with many new features. See this blog post for more information.
Emmanuel Puybaret, Sweet Home 3D creator
xato
Posts: 1
Joined: Thu Apr 28, 2022 9:25 am
Country: United Kingdom

Re: Sweet Home 3D JS Online

Post by xato »

Hi, first time forum poster, couldn't see a search option to ask about this, I love your software!!

I was just wondering if there was a reason why it runs soo much faster in the browser than natively.

Is there anything I can do on my M1 Mac to speed it up? Is this a Java issue?
User avatar
Puybaret
Posts: 9440
Joined: Mon Nov 07, 2005 12:00 pm
Country: Paris, France
Contact:

Re: Sweet Home 3D JS Online

Post by Puybaret »

For your information, I just changed the user interface of the Online version for large touch devices like tablets, to take profit of the additional space they propose. It now shows the 4 classical resizable panes of the desktop version and a larger choice of models in the catalog, either in landscape format:

Image

or in portrait format:

Image

Note also that from the release of version 7.0, it's now possible to modify openings in Sweet Home 3D JS Online and to select a material directly in the 3D model preview in the furniture materials modification dialog box.

Image

I was just wondering if there was a reason why it runs soo much faster in the browser than natively.
I wonder on which particular point you see such a performance difference because I didn't notice it that much.
Loading 3D models is slower with the Online version because Java threads are more efficient than JavaScript workers when there are a lot of data to retrieve (finally I even didn't use JavaScript workers).
The 3D view might run faster at a given size at screen, probably because the WebGL rendering I programmed is simpler than the Java 3D / JOGL / OpenGL layers.
But I also noticed that computing window holes in the walls is much slower in JavaScript and wonder if it's because JavaScript proposes only high precision decimal numbers (you can see this difference when you try to change level in the large building examples of this tip).
Emmanuel Puybaret, Sweet Home 3D creator
Paul6552
Posts: 2
Joined: Wed Nov 02, 2022 10:25 am
Country: Österreich

Re: Sweet Home 3D JS Online

Post by Paul6552 »

I plan everything in the online editor but what is incredibly annoying is that the windows (walkthrough and sketch) cannot be placed in their own tabs.

Please separate these two views so that the sketch is on one screen and the rendering (virtual walkthrough of the house) on the other.

Will this feature be available in the next version?
User avatar
Puybaret
Posts: 9440
Joined: Mon Nov 07, 2005 12:00 pm
Country: Paris, France
Contact:

Re: Sweet Home 3D JS Online

Post by Puybaret »

Sorry, I don’t think so. You can already change their size with the separator between them.
Emmanuel Puybaret, Sweet Home 3D creator
TwistedLincoln
Posts: 29
Joined: Tue Jan 18, 2011 3:11 pm
Contact:

Re: Sweet Home 3D JS Online

Post by TwistedLincoln »

I was able to compile the .war file and get it to run properly using Tomcat. It's fantastic, and incredibly fast! However I can't seem to figure out how to add additional furniture on the server side. Any guidance would be greatly appreciated.
User avatar
Puybaret
Posts: 9440
Joined: Mon Nov 07, 2005 12:00 pm
Country: Paris, France
Contact:

Re: Sweet Home 3D JS Online

Post by Puybaret »

Here are the instructions you can use to add more furniture to the Online version.
First, gather the additional 3D models you want in a SH3F file with the Furniture Library Editor. Let's say you called it additionalLibrary.sh3f.
Then you should use the PropertiesToJson tool included in SweetHome3DJS source code to convert .properties files to their equivalent .json files and extract 3D model and icon files:
- Compile the [font=courier new]com.eteks.sweethome3d.json.PropertiesToJson[/font] class in SweetHome3DJS root folder with the following command:

Code: Select all

javac -cp tools/json/lib/json-20190722.jar -d tools/json/src tools/json/src/com/eteks/sweethome3d/json/PropertiesToJson.java
- In the same folder, run PropertiesToJson with the following command (in one line):

Code: Select all

java -cp tools/json/lib/json-20190722.jar:tools/json/src com.eteks.sweethome3d.json.PropertiesToJson 
/path/to/the/folder/where/is/stored/additionalLibrary 
additionalLibrary.sh3f 
/path/to/apache-tomcat-folder/webapps/SweetHome3DJS-7.1/lib/resources 
additionalLibrary 
/path/to/apache-tomcat-folder/webapps/SweetHome3DJS-7.1/lib/resources/models/additionalLibrary 
lib/resources/models/additionalLibrary
true
PropertiesToJson requires the 7 following arguments:
1. the folder where you stored [font=courier new]additionalLibrary.sh3f[/font]
2. [font=courier new]additionalLibrary.sh3f[/font], the furniture library file to convert
3. the output folder where the .json files will be saved (if you used Tomcat to test the war file, it should be the subfolder [font=courier new]webapps/SweetHome3DJS-7.1/lib/resources[/font] of Tomcat installation folder, but this could be also the subfolder [font=courier new]deploy/lib/resources[/font] of SweetHome3DJS root folder).
4. [font=courier new]additionalLibrary[/font], the base name of the .json files
5. the folder where 3D models and icons will extracted (I recommend to use a subfolder to avoid conflicts with some other libraries stored in [font=courier new]models[/font])
6. the path of the 3D models and icons relative to [font=courier new]index.jsp[/font] (the folder where 3D models can be found from the [font=courier new]furnitureResourcesURLBase[/font] property added to [font=courier new]index.jsp[/font] in the following instructions)
7. true (it indicates that 3D models and icons should be extracted, using [font=courier new]false[/font] won't extract them)

For example, if you try with [font=courier new]BlendSwap-CC-0.sh3f[/font] available here saved in SweetHome3DJS root folder and Tomcat installation folder in [font=courier new]/Applications/apache-tomcat-9.0.41[/font], you'll get the following command:

Code: Select all

java -cp tools/json/lib/json-20190722.jar:tools/json/src com.eteks.sweethome3d.json.PropertiesToJson . BlendSwap-CC-0.sh3f /Applications/apache-tomcat-9.0.41/webapps/SweetHome3DJS-7.1/lib/resources BlendSwap-CC-0 /Applications/apache-tomcat-9.0.41/webapps/SweetHome3DJS-7.1/lib/resources/models/BlendSwap-CC-0 lib/resources/models/BlendSwap-CC-0 true


Once, your .json, 3D models and icons files are ready, you'll have to tell the Online version to take them into account with the two following changes:
- around the end of [font=courier new]index.jsp[/font], add [font=courier new]furnitureCatalogURLs[/font] and [font=courier new]furnitureResourcesURLBase[/font] properties to JavaScript [font=courier new]application[/font] configuration, to specify the list of furniture catalogs and the base URL for their 3D models and icons.
For example, the beginning of [font=courier new]application[/font] declaration:

Code: Select all

var application = new SweetHome3DJSApplication(
    {readHomeURL: urlBase + "/readHome.jsp?home=%s",

should become:

Code: Select all

var application = new SweetHome3DJSApplication(
    {furnitureCatalogURLs: [urlBase + "/lib/resources/DefaultFurnitureCatalog.json", 
                            urlBase + "/lib/resources/additionalLibrary.json"],
     furnitureResourcesURLBase: urlBase + "/",
     readHomeURL: urlBase + "/readHome.jsp?home=%s",

And if you try with BlendSwap-CC-0 library, it will become:

Code: Select all

var application = new SweetHome3DJSApplication(
    {furnitureCatalogURLs: [urlBase + "/lib/resources/DefaultFurnitureCatalog.json", 
                            urlBase + "/lib/resources/BlendSwap-CC-0.json"],
     furnitureResourcesURLBase: urlBase + "/",
     readHomeURL: urlBase + "/readHome.jsp?home=%s",

(citing [font=courier new]DefaultFurnitureCatalog.json[/font] isn't mandatory if you don't want to keep the default library).

- The additional library managed by user preferences in [font=courier new]writeHomeEdits.jsp[/font] should be added in the declaration of [font=courier new]serverUserPreferences[/font] instance.
Therefore, the following declaration:

Code: Select all

serverUserPreferences = new ServerUserPreferences(
    new URL [] {new URL(serverBaseUrl, "lib/resources/DefaultFurnitureCatalog.json")}, serverBaseUrl,
    new URL [] {new URL(serverBaseUrl, "lib/resources/DefaultTexturesCatalog.json")}, serverBaseUrl);

should become:

Code: Select all

serverUserPreferences = new ServerUserPreferences(
    new URL [] {new URL(serverBaseUrl, "lib/resources/DefaultFurnitureCatalog.json"), 
                new URL(serverBaseUrl, "lib/resources/additionalLibrary.json")}, serverBaseUrl,
    new URL [] {new URL(serverBaseUrl, "lib/resources/DefaultTexturesCatalog.json")}, serverBaseUrl);


And for BlendSwap-CC-0 library, it will become:

Code: Select all

serverUserPreferences = new ServerUserPreferences(
    new URL [] {new URL(serverBaseUrl, "lib/resources/DefaultFurnitureCatalog.json"), 
                new URL(serverBaseUrl, "lib/resources/BlendSwap-CC-0.json")}, serverBaseUrl,
    new URL [] {new URL(serverBaseUrl, "lib/resources/DefaultTexturesCatalog.json")}, serverBaseUrl);
Hope you can handle it.
There are other way to generate .json files without a SH3F file, but it depends on your furniture library configuration.
Emmanuel Puybaret, Sweet Home 3D creator
Post Reply New Topic

Who is online

Users browsing this forum: No registered users and 1 guest