From 40f408aaee14abd85d391008b4d22977dc586b50 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sun, 21 Jul 2019 16:45:10 -0400
Subject: [PATCH] Prepare bimtexture.

---
 CameraPane.java |  346 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 215 insertions(+), 131 deletions(-)

diff --git a/CameraPane.java b/CameraPane.java
index 9699e8e..1364b89 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -60,7 +60,7 @@
     //boolean REDUCETEXTURE = true;
     boolean CACHETEXTURE = true;
     boolean CLEANCACHE = false; // true;
-    boolean MIPMAP = false; // true;
+    boolean MIPMAP = true; // false; // true;
     boolean COMPRESSTEXTURE = false;
     boolean KOMPACTTEXTURE = false; // true;
     boolean RESIZETEXTURE = false;
@@ -2298,10 +2298,17 @@
         HANDLES ^= true;
     }
 
+    Object3D paintFolder;
+    
     void TogglePaint()
     {
         PAINTMODE ^= true;
         paintcount = 0;
+        
+        if (PAINTMODE)
+        {
+            paintFolder = GetFolder();
+        }
     }
 
     void SwapCamera(int a, int b)
@@ -2415,9 +2422,10 @@
     /**/
     
 // TEXTURE	static Texture texture;
-    static public java.util.Hashtable<String, CacheTexture/*com.sun.opengl.util.texture.Texture*/> textures
-            = new java.util.Hashtable<String, CacheTexture/*com.sun.opengl.util.texture.Texture*/>();
-    static public java.util.Hashtable<String, String> usedtextures = new java.util.Hashtable<String, String>();
+    static public java.util.Hashtable<String, CacheTexture> textures = new java.util.Hashtable<String, CacheTexture>();
+    static public java.util.Hashtable<BufferedImage, CacheTexture> bimtextures = new java.util.Hashtable<BufferedImage, CacheTexture>();
+    static public java.util.HashSet<String> usedtextures = new java.util.HashSet<String>();
+    
     int pigmentdepth = 0;
     public com.sun.opengl.util.texture.Texture[] pigmentstack = new com.sun.opengl.util.texture.Texture[65536];
     int bumpdepth = 0;
@@ -2439,6 +2447,33 @@
                     true,
                     com.sun.opengl.util.texture.TextureIO.PNG);
         } catch (java.io.IOException e)
+        {
+            throw new javax.media.opengl.GLException(e);
+        }
+
+        if (bump)
+            texturedata = ConvertBump(texturedata, false);
+            
+        com.sun.opengl.util.texture.Texture texture =
+                com.sun.opengl.util.texture.TextureIO.newTexture(texturedata);
+        
+        texture.setTexParameteri(javax.media.opengl.GL.GL_TEXTURE_WRAP_S, javax.media.opengl.GL.GL_REPEAT);
+        texture.setTexParameteri(javax.media.opengl.GL.GL_TEXTURE_WRAP_T, javax.media.opengl.GL.GL_REPEAT);
+        
+        return texture;
+    }
+    
+    com.sun.opengl.util.texture.Texture GetBimTexture(BufferedImage name, boolean bump)
+    {
+        TextureData texturedata = null;
+
+        try
+        {
+            texturedata =
+                    com.sun.opengl.util.texture.TextureIO.newTextureData(
+                    name,
+                    true);
+        } catch (Exception e)
         {
             throw new javax.media.opengl.GLException(e);
         }
@@ -3525,6 +3560,8 @@
 
             System.out.println("LOADING TEXTURE : " + name);
 
+            Object x = texturedata.getMipmapData(); // .getBuffer();
+            
         // 
         if (false) // compressbit > 0)
         {
@@ -7923,7 +7960,7 @@
         String pigment = Object3D.GetPigment(tex);
         String bump = Object3D.GetBump(tex);
 
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("RELEASE  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -7957,7 +7994,7 @@
         
         String pigment = Object3D.GetPigment(tex);
 
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("RELEASE  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -7986,7 +8023,7 @@
         
         String bump = Object3D.GetBump(tex);
 
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("RELEASE  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -8105,47 +8142,50 @@
 
     /*boolean*/ public void BindTextures(cTexture tex, int resolution) throws Exception // INTERFACE
     {
-        if (// DrawMode() != 0 || /*tex == null ||*/
-                ambientOcclusion ) // || !textureon)
-        {
-            return; // false;
-        }
-
-        if (tex == null)
-        {
-            BindTexture(null,false,resolution);
-            BindTexture(null,true,resolution);
-            return;
-        }
+//        if (// DrawMode() != 0 || /*tex == null ||*/
+//                ambientOcclusion ) // || !textureon)
+//        {
+//            return; // false;
+//        }
+//
+//        if (tex == null)
+//        {
+//            BindTexture(null,false,resolution);
+//            BindTexture(null,true,resolution);
+//            return;
+//        }
+//        
+//        String pigment = Object3D.GetPigment(tex);
+//        String bump = Object3D.GetBump(tex);
+//
+//        usedtextures.add(pigment);
+//        usedtextures.add(bump);
+//        
+//        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+//        {
+//        //    System.out.print("BIND  +++++++++++++++  pigment = " + pigment);
+//        //    System.out.println("; bump = " + bump);
+//        }
+//        
+//        if (bump.equals(""))
+//        {
+//            bump = null;
+//        }
+//        if (pigment.equals(""))
+//        {
+//            pigment = null;
+//        }
+//        
+//        GetGL().glActiveTexture(GetGL().GL_TEXTURE0);
+//        BindTexture(pigment, false, resolution);
+//        GetGL().glActiveTexture(GetGL().GL_TEXTURE2);
+//        BindTexture(bump, true, resolution);
+//        GetGL().glActiveTexture(GetGL().GL_TEXTURE0);
+//            
+//        return; // true;
         
-        String pigment = Object3D.GetPigment(tex);
-        String bump = Object3D.GetBump(tex);
-
-        usedtextures.put(pigment, pigment);
-        usedtextures.put(bump, bump);
-        
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
-        {
-        //    System.out.print("BIND  +++++++++++++++  pigment = " + pigment);
-        //    System.out.println("; bump = " + bump);
-        }
-        
-        if (bump.equals(""))
-        {
-            bump = null;
-        }
-        if (pigment.equals(""))
-        {
-            pigment = null;
-        }
-        
-        GetGL().glActiveTexture(GetGL().GL_TEXTURE0);
-        BindTexture(pigment, false, resolution);
-        GetGL().glActiveTexture(GetGL().GL_TEXTURE2);
-        BindTexture(bump, true, resolution);
-        GetGL().glActiveTexture(GetGL().GL_TEXTURE0);
-            
-        return; // true;
+        BindPigmentTexture(tex, resolution);
+        BindBumpTexture(tex, resolution);
     }
     
     /*boolean*/ public void BindPigmentTexture(cTexture tex, int resolution) throws Exception // INTERFACE
@@ -8158,15 +8198,15 @@
 
         if (tex == null)
         {
-            BindTexture(null,false,resolution);
+            BindTexture(null, null,false,resolution);
             return;
         }
         
         String pigment = Object3D.GetPigment(tex);
 
-        usedtextures.put(pigment, pigment);
+        usedtextures.add(pigment);
         
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("BIND  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -8178,7 +8218,7 @@
         }
         
         GetGL().glActiveTexture(GetGL().GL_TEXTURE0);
-        BindTexture(pigment, false, resolution);
+        BindTexture(tex.pigmenttexture, pigment, false, resolution);
     }
     
     /*boolean*/ public void BindBumpTexture(cTexture tex, int resolution) throws Exception // INTERFACE
@@ -8191,15 +8231,15 @@
 
         if (tex == null)
         {
-            BindTexture(null,true,resolution);
+            BindTexture(null, null,true,resolution);
             return;
         }
         
         String bump = Object3D.GetBump(tex);
 
-        usedtextures.put(bump, bump);
+        usedtextures.add(bump);
         
-        if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
+        //if (!tex.equals(":") && !tex.equals(DEFAULT_TEXTURES))
         {
         //    System.out.print("BIND  +++++++++++++++  pigment = " + pigment);
         //    System.out.println("; bump = " + bump);
@@ -8211,7 +8251,7 @@
         }
         
         GetGL().glActiveTexture(GetGL().GL_TEXTURE2);
-        BindTexture(bump, true, resolution);
+        BindTexture(tex.bumptexture, bump, true, resolution);
         GetGL().glActiveTexture(GetGL().GL_TEXTURE0);
     }
     
@@ -8235,9 +8275,9 @@
         return fileExists;
     }
     
-    CacheTexture GetCacheTexture(String tex, boolean bump, int resolution) throws Exception
+    CacheTexture GetCacheTexture(java.awt.image.BufferedImage bim, String tex, boolean bump, int resolution) throws Exception
     {
-        CacheTexture/*com.sun.opengl.util.texture.Texture*/ texture = null;
+        CacheTexture texturecache = null;
         
         if (tex != null)
         {
@@ -8257,12 +8297,22 @@
             }
             
             if (CACHETEXTURE)
-                texture = textures.get(texname); // TEXTURE CACHE
-
-            TextureData texturedata = null;
-            
-            if (texture == null || texture.resolution < resolution)
             {
+                if (bim == null)
+                    texturecache = textures.get(texname); // TEXTURE CACHE
+                else
+                    texturecache = bimtextures.get(bim); // TEXTURE CACHE
+            }
+
+            if (texturecache == null || texturecache.resolution < resolution)
+            {
+                TextureData texturedata = null;
+            
+                if (bim == null)
+                {
+                    
+                }
+                else
                 if (tex.equals("DEFAULT_TEXTURE")) // ||*/ tex.equals(""))
                 {
                     assert(!bump);
@@ -8274,19 +8324,19 @@
 //                    }
 //                    else
 //                    {
-                        texture = textures.get(tex);
-                        if (texture == null)
+                        texturecache = textures.get(tex);
+                        if (texturecache == null)
                         {
-                            texture = new CacheTexture(GetResourceTexture("default.png", bump),resolution);
+                            texturecache = new CacheTexture(GetResourceTexture("default.png", bump),resolution);
                         }
 //                    }
                 } else
                 if (tex.equals("DEFAULT_TEXTURE_BUMP")) // ||*/ tex.equals(""))
                 {
                     assert(bump);
-                    texture = textures.get(tex);
-                    if (texture == null)
-                        texture = new CacheTexture(GetResourceTexture("default.png", bump),resolution);
+                    texturecache = textures.get(tex);
+                    if (texturecache == null)
+                        texturecache = new CacheTexture(GetResourceTexture("default.png", bump),resolution);
                 } else
                 {
                     //if (tex.equals("IMMORTAL"))
@@ -8296,9 +8346,9 @@
                     //{
                         if (tex.equals("WHITE_NOISE"))
                         {
-                            texture = textures.get(tex);
-                            if (texture == null)
-                                texture = new CacheTexture(GetResourceTexture("whitenoise.png", bump),resolution);
+                            texturecache = textures.get(tex);
+                            if (texturecache == null)
+                                texturecache = new CacheTexture(GetResourceTexture("whitenoise.png", bump),resolution);
                         } else
                         {
                             if (textureon)
@@ -8357,19 +8407,19 @@
                                 if (texturedata == null)
                                     throw new Exception();
                                     
-                                    texture = new CacheTexture(com.sun.opengl.util.texture.TextureIO.newTexture(texturedata),resolution);
+                                    texturecache = new CacheTexture(com.sun.opengl.util.texture.TextureIO.newTexture(texturedata),resolution);
         //texture = GetTexture(tex, bump);
                             }
                         }
                     //}
                 }
 
-                if (/*CACHETEXTURE &&*/ texture != null && textureon)
+                if (/*CACHETEXTURE &&*/ texturecache != null && textureon)
                 {
                     //return false;
 
              //       System.out.println("CACHE  +++++++++++++++  TEXTURE : " + texname + " (" + texture.getEstimatedMemorySize() + ")");
-                    if (texturedata != null && (texname.endsWith(".jpg") || texname.endsWith(".JPG")))
+                    if (texturedata != null && texname.toLowerCase().endsWith(".jpg"))
                     {
 //                        String ext = "_highres";
 //                        if (REDUCETEXTURE)
@@ -8458,8 +8508,8 @@
                         textures.remove(texname);
                     }
                     
-                    texture.texturedata = texturedata;
-                    textures.put(texname, texture);
+                    //texture.texturedata = texturedata;
+                    textures.put(texname, texturecache);
 
            //         newtex = true;
                 }
@@ -8475,12 +8525,12 @@
             }
         }
         
-        return texture;
+        return texturecache;
     }
     
-    com.sun.opengl.util.texture.Texture GetTexture(String tex, boolean bump, int resolution) throws Exception
+    com.sun.opengl.util.texture.Texture GetTexture(java.awt.image.BufferedImage stream, String tex, boolean bump, int resolution) throws Exception
     {
-        CacheTexture texture = GetCacheTexture(tex, bump, resolution);
+        CacheTexture texture = GetCacheTexture(stream, tex, bump, resolution);
                 
         if (bump)
         {
@@ -8496,23 +8546,23 @@
         return texture!=null?texture.texture:null;
     }
     
-    public com.sun.opengl.util.texture.TextureData GetTextureData(String tex, boolean bump, int resolution) throws Exception
+    public com.sun.opengl.util.texture.TextureData GetTextureData(java.awt.image.BufferedImage stream, String tex, boolean bump, int resolution) throws Exception
     {
-        CacheTexture texture = GetCacheTexture(tex, bump, resolution);
+        CacheTexture texture = GetCacheTexture(stream, tex, bump, resolution);
                 
         return texture!=null?texture.texturedata:null;
     }
     
-    boolean BindTexture(String tex, boolean bump, int resolution) throws Exception
+    boolean BindTexture(java.awt.image.BufferedImage stream, String tex, boolean bump, int resolution) throws Exception
     {
         if (/*tex == null ||*/ ambientOcclusion ) // || !textureon)
         {
             return false;
         }
 
-        boolean newtex = false;
+        //boolean newtex = false;
 
-        com.sun.opengl.util.texture.Texture texture = GetTexture(tex, bump, resolution);
+        com.sun.opengl.util.texture.Texture texture = GetTexture(stream, tex, bump, resolution);
 
         if (texture == null)
             return false;
@@ -8542,7 +8592,7 @@
         texture.setTexParameteri(GetGL().GL_TEXTURE_WRAP_S, GetGL().GL_REPEAT);
         texture.setTexParameteri(GetGL().GL_TEXTURE_WRAP_T, GetGL().GL_REPEAT);
         
-        return newtex;
+        return true; // Warning: not used.
     }
     
     ShadowBuffer shadowPBuf;
@@ -10999,7 +11049,7 @@
             
     try
     {
-        BindTexture(NOISE_TEXTURE, false, 2);
+        BindTexture(null, NOISE_TEXTURE, false, 2);
     }
     catch (Exception e)
     {
@@ -11028,9 +11078,9 @@
 
             gl.glMatrixMode(GL.GL_MODELVIEW);
 
-//gl.glHint(gl.GL_POLYGON_SMOOTH_HINT, gl.GL_NICEST);
-//gl.glEnable(gl.GL_POLYGON_SMOOTH);
-//gl.glEnable(gl.GL_MULTISAMPLE);
+gl.glEnable(gl.GL_POLYGON_SMOOTH);
+gl.glHint(gl.GL_POLYGON_SMOOTH_HINT, gl.GL_NICEST);
+gl.glEnable(gl.GL_MULTISAMPLE);
         } else
         {
             //gl.glDisable(GL.GL_TEXTURE_2D);
@@ -11041,7 +11091,7 @@
         //System.out.println("BLENDING ON");
         gl.glEnable(GL.GL_BLEND);
         gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
-
+//        gl.glBlendFunc(GL.GL_SRC_ALPHA_SATURATE, GL.GL_ONE);
         gl.glMatrixMode(gl.GL_PROJECTION);
         gl.glLoadIdentity();
 
@@ -11664,7 +11714,7 @@
                     if (tex.equals("WHITE_NOISE"))
                         continue;
 
-                    if (!usedtextures.containsKey(tex))
+                    if (!usedtextures.contains(tex))
                     {
                //         System.out.println("DISPOSE  +++++++++++++++  " + tex);
                         textures.get(tex).texture.dispose();
@@ -14297,12 +14347,12 @@
     void GoDown(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
         manipCamera.RotatePosition(0, -speed);
         else
-        manipCamera.BackForth(0, -speed*delta, getWidth());
-         */
+        manipCamera.BackForth(0, -speed*delta, 0); // getWidth());
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode; // VR??
@@ -14318,12 +14368,12 @@
     void GoUp(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
         manipCamera.RotatePosition(0, speed);
         else
-        manipCamera.BackForth(0, speed*delta, getWidth());
-         */
+        manipCamera.BackForth(0, speed*delta, 0); // getWidth());
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode;
@@ -14339,12 +14389,12 @@
     void GoLeft(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
-        manipCamera.RotatePosition(speed, 0);
-        else
         manipCamera.Translate(speed*delta, 0, getWidth());
-         */
+        else
+        manipCamera.RotatePosition(speed, 0);
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode;
@@ -14360,12 +14410,12 @@
     void GoRight(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
-        manipCamera.RotatePosition(-speed, 0);
-        else
         manipCamera.Translate(-speed*delta, 0, getWidth());
-         */
+        else
+        manipCamera.RotatePosition(-speed, 0);
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode;
@@ -14946,7 +14996,9 @@
             case 'E' : COMPACT ^= true;
                 repaint();
                 break;
-            case 'W' : DEBUGHSB ^= true;
+            case 'W' : // Wide Window (fullscreen)
+                //DEBUGHSB ^= true;
+                ObjEditor.theFrame.ToggleFullScreen();
                 repaint();
                 break;
             case 'u' : Udebug ^= true; Vdebug = false; NORMALdebug = false; programInitialized = false; repaint(); break;
@@ -14972,13 +15024,7 @@
                 repaint();
                 break;
             case 'l':
-                lightMode ^= true;
-                Globals.lighttouched = true;
-                manipCamera = renderCamera = lightMode ? lightCamera : eyeCamera;
-                targetLookAt.set(manipCamera.lookAt);
-                repaint();
-                break;
-            case 'L':
+            //case 'L':
                 if (lightMode)
                 {
                     lightMode = false;
@@ -15125,7 +15171,10 @@
 //                kompactbit = 6;
 //                break;
             case ' ':
-                ObjEditor.theFrame.ToggleFullScreen();
+                lightMode ^= true;
+                Globals.lighttouched = true;
+                manipCamera = renderCamera = lightMode ? lightCamera : eyeCamera;
+                targetLookAt.set(manipCamera.lookAt);
                 repaint();
                 break;
             //case '`' :
@@ -15709,6 +15758,7 @@
                     info.bounds.y += (height - desired) / 2;
                 }
             }
+            
             info.g = gr;
             info.camera = renderCamera;
             /* 
@@ -15718,6 +15768,8 @@
              */
             if (!isRenderer)
             {
+                Grafreed.Assert(object != null);
+                Grafreed.Assert(object.selection != null);
                 if (object.selection.Size() > 0)
                 {
                     int hitSomething = object.selection.get(0).hitSomething;
@@ -16551,6 +16603,14 @@
         }
     }
     
+    private Object3D GetFolder()
+    {
+        Object3D folder = object.GetWindow().copy;
+        if (object.GetWindow().copy.selection.Size() > 0)
+            folder = object.GetWindow().copy.selection.elementAt(0);
+        return folder;
+    }
+
     class SelectBuffer implements GLEventListener
     {
 
@@ -16630,6 +16690,17 @@
 
             //gl.glDisable(GL.GL_POLYGON_OFFSET_FILL);
 
+                if (PAINTMODE)
+                {
+                    if (object.GetWindow().copy.selection.Size() > 0)
+                    {
+                        Object3D paintobj = object.GetWindow().copy.selection.elementAt(0);
+
+                        // Make what you paint not selectable.
+                        paintobj.ResetSelectable();
+                    }
+                }
+                
             //int tmp = selection_view;
             //selection_view = -1;
             int temp = DrawMode();
@@ -16641,6 +16712,17 @@
             //    temp = DEFAULT; // patch for selection debug
             Globals.drawMode = temp; // WARNING
 
+                if (PAINTMODE)
+                {
+                    if (object.GetWindow().copy.selection.Size() > 0)
+                    {
+                        Object3D paintobj = object.GetWindow().copy.selection.elementAt(0);
+
+                        // Revert.
+                        paintobj.RestoreSelectable();
+                    }
+                }
+                
             //gl.glBindTexture(GL.GL_TEXTURE_2D, selection_view);
 
             // trying different ways of getting the depth info over
@@ -16746,27 +16828,29 @@
                 if (!movingcamera && !PAINTMODE)
                     object.GetWindow().ScreenFitPoint(); // fev 2014
                 
-                if (PAINTMODE && Grafreed.clipboard.size() == 1) // object.editWindow.copy.selection.Size() > 0)
+                if (PAINTMODE) // && Grafreed.clipboard.size() == 1) // object.editWindow.copy.selection.Size() > 0)
                 {
-                    Object3D paintobj = Grafreed.clipboard.get(0); // object.editWindow.copy.selection.elementAt(0);
-                    
-                    Object3D group = new Object3D("inst" + paintcount++);
-                    
-                    group.CreateMaterial(); // use a void leaf to select instances
-                    
-                    group.add(paintobj); // link
-                    
-                    object.GetWindow().SnapObject(group);
-                    
-                    Object3D folder = object.GetWindow().copy;
+                    //Object3D paintobj; // = Grafreed.clipboard.get(0); // object.editWindow.copy.selection.elementAt(0);
                     
                     if (object.GetWindow().copy.selection.Size() > 0)
-                        folder = object.GetWindow().copy.selection.elementAt(0);
+                    {
+                        Object3D paintobj = object.GetWindow().copy.selection.elementAt(0);
                     
-                    folder.add(group);
-                    
-                    object.GetWindow().ResetModel();
-                    object.GetWindow().refreshContents();
+                        Object3D inst = new Object3D("inst" + paintcount++);
+
+                        inst.CreateMaterial(); // use a void leaf to select instances
+
+                        inst.add(paintobj); // link
+
+                        object.GetWindow().SnapObject(inst);
+
+                        Object3D folder = paintFolder; // GetFolder();
+
+                        folder.add(inst);
+
+                        object.GetWindow().ResetModel();
+                        object.GetWindow().refreshContents();
+                    }
                 }
                 else
                     paintcount = 0;

--
Gitblit v1.6.2