From 49d9c15d375942997692f7fccfb697665d0cb59e Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sun, 20 Oct 2019 15:27:50 -0400 Subject: [PATCH] Sort by size --- ObjEditor.java | 17 ++- CameraPane.java | 24 +++- GroupEditor.java | 17 ++ Object3D.java | 192 ++++++++++++++++++++++++++++--------- 4 files changed, 185 insertions(+), 65 deletions(-) diff --git a/CameraPane.java b/CameraPane.java index d89ccad..1d52f4a 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -2190,9 +2190,18 @@ //SwitchCameras(); } + cVector origin = new cVector(); + void RevertCamera() { - SwapCamera(1, 0); + if (lightMode) + { + CreateSelectedPoint(); + selectedpoint.GetOrigin(origin); + lightCamera.setAim(new cVector(3,4,5), origin); + } + else + SwapCamera(1, 0); //SwitchCameras(); } @@ -15024,9 +15033,9 @@ // if (isVR) // manipCamera.RotateInterest(0, speed); // else - if (isVR) - ViewAngle(-speed*delta*scale); - else + //if (isVR) + // ViewAngle(-speed*delta*scale); + //else manipCamera.Translate(0, -speed*delta*scale, getWidth()); } else @@ -15068,9 +15077,9 @@ // if (isVR) // manipCamera.RotateInterest(0, -speed); // else - if (isVR) - ViewAngle(speed*delta*scale); - else + //if (isVR) + // ViewAngle(speed*delta*scale); + //else manipCamera.Translate(0, speed*delta*scale, getWidth()); } else @@ -15823,6 +15832,7 @@ { //PrintMemory(); ToggleImageFlip(); + repaint(); break; } case 'M': diff --git a/GroupEditor.java b/GroupEditor.java index 2ec45ad..e5d255d 100644 --- a/GroupEditor.java +++ b/GroupEditor.java @@ -3699,7 +3699,7 @@ } ResetModel(); - refreshContents(); + refreshContents(true); } else if (source == sortbynameItem) { @@ -3711,7 +3711,7 @@ } ResetModel(); - refreshContents(); + refreshContents(true); } else if (source == attachPigmentItem) { @@ -4322,7 +4322,7 @@ ResetTransform(-1); } - void ScaleSelection(int scale) + void ScaleSelection(float scale) { Object3D obj; for (Enumeration e = group.selection.elements(); e.hasMoreElements();) @@ -4330,7 +4330,10 @@ obj = (Object3D)e.nextElement(); if (obj.toParent == null) - continue; + { + obj.toParent = LA.newMatrix(); + obj.fromParent = LA.newMatrix(); + } obj.Scale(scale); @@ -5429,6 +5432,11 @@ SetPinStates(tps != null && tps.length > 0); + this.muteSlider = true; + scaleSlider.setInteger(1); + scaleInvSlider.setInteger(1); + this.muteSlider = false; + refreshContents(); //return true; } @@ -5471,6 +5479,7 @@ { objEditor.ClearInfo(); // .GetMaterial()); + if (group.selection.Size() < 100) for (int i=0; i < group.selection.Size(); i++) { Object3D child = (Object3D) group.selection.get(i); diff --git a/ObjEditor.java b/ObjEditor.java index 23230d5..1c24b4b 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -474,7 +474,7 @@ importOBJItem.addActionListener(this); import3DSItem = menu.add(new MenuItem("3DS file...")); import3DSItem.addActionListener(this); - if (Globals.ADVANCED) + //if (Globals.ADVANCED) { importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D file...")); importVRMLX3DItem.addActionListener(this); @@ -1761,9 +1761,14 @@ transformPanel.add(resetTransformPanel); - cGridBag scalePanel = AddSlider(transformPanel, "Scale", 1, 10, 1); + cGridBag scalePanel = AddSlider(transformPanel, "Inflate", 1, 10, 1); scalePanel.preferredHeight = 2; scaleSlider = (cNumberSlider)scalePanel.getComponent(1); + transformPanel.add(scalePanel); + + scalePanel = AddSlider(transformPanel, "Deflate", 1, 10, 1); + scalePanel.preferredHeight = 2; + scaleInvSlider = (cNumberSlider)scalePanel.getComponent(1); transformPanel.add(scalePanel); transformPanel.add(XYZPanel); @@ -5545,8 +5550,9 @@ cNumberSlider versionField; // selection (off) cNumberSlider scaleSlider; + cNumberSlider scaleInvSlider; - void ScaleSelection(int scale) + void ScaleSelection(float scale) { } @@ -5596,9 +5602,10 @@ return; } - if (e.getSource() == scaleSlider) + if (!muteSlider && (e.getSource() == scaleSlider || e.getSource() == scaleInvSlider)) { - int scale = scaleSlider.getInteger(); + float scale = scaleSlider.getInteger(); + scale /= scaleInvSlider.getInteger(); ScaleSelection(scale); return; diff --git a/Object3D.java b/Object3D.java index 31964db..54f9cd8 100644 --- a/Object3D.java +++ b/Object3D.java @@ -45,6 +45,20 @@ ScriptNode scriptnode; + void GetOrigin(cVector o) + { + o.x = this.toParent[3][0]; + o.y = this.toParent[3][1]; + o.z = this.toParent[3][2]; + } + + void SetOrigin(cVector o) + { + this.toParent[3][0] = o.x; + this.toParent[3][1] = o.y; + this.toParent[3][2] = o.z; + } + void deepCopyNode(Object3D other) { other.skyboxname = skyboxname; @@ -659,27 +673,74 @@ return this; } + class SizeCompare implements Comparable + { + int size; + Object3D child; + + SizeCompare(Object3D c) + { + child = c; + size = c.MemorySize(); + } + + public int compareTo(Object o) + { + SizeCompare comp = (SizeCompare) o; + + return comp.size < size ? 1 : -1; + } + } + + transient SizeCompare[] sizecompare = null; + void SortBySize() { - boolean sorted = false; +// boolean sorted = false; +// +// while (!sorted) +// { +// sorted = true; +// +// for (int i=0; i<Size()-1; i++) +// { +// Object3D obji = get(i); +// Object3D objj = get(i+1); +// +// if (obji.MemorySize() < objj.MemorySize()) +// { +// set(i, objj); +// set(i+1, obji); +// +// sorted = false; +// } +// } +// } + + int count = Size(); - while (!sorted) + if (sizecompare == null || sizecompare.length != count) { - sorted = true; - - for (int i=0; i<Size()-1; i++) + sizecompare = new SizeCompare[count]; + + for (int k=0; k<count; k++) { - Object3D obji = get(i); - Object3D objj = get(i+1); - - if (obji.MemorySize() < objj.MemorySize()) - { - set(i, objj); - set(i+1, obji); - - sorted = false; - } + sizecompare[k] = new SizeCompare(get(k)); } + } + else + { + for (int k=0; k<count; k++) + { + sizecompare[k].size = get(k).MemorySize(); + } + } + + java.util.Arrays.sort(sizecompare); + + for (int i=0; i<count; i++) + { + set(i, sizecompare[i].child); } } @@ -711,34 +772,59 @@ int MemorySize() { - if (memorysize == 0) +// if (memorysize == 0) +// { +// try +// { +// Object3D obj = this; +// +// Object3D parent = obj.parent; +// obj.parent = null; +// Object3D support = obj.support; +// obj.support = null; +// +// java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); +// java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(baos); +// +// out.writeObject(obj); +// +// obj.parent = parent; +// obj.support = support; +// +// memorysize = baos.toByteArray().length; +// } +// catch (Exception e) +// { +// e.printStackTrace(); +// } +// } +// +// return memorysize; + + if (blockloop) { - try - { - Object3D obj = this; + return 0; + } - Object3D parent = obj.parent; - obj.parent = null; - Object3D support = obj.support; - obj.support = null; - - java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); - java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(baos); - - out.writeObject(obj); - - obj.parent = parent; - obj.support = support; - - memorysize = baos.toByteArray().length; - } - catch (Exception e) - { - e.printStackTrace(); - } + int memory = 0; + + if (bRep != null) + { + memory = bRep.VertexCount(); } - return memorysize; + blockloop = true; + + for (int i = 0; i < Size(); i++) + { + Object3D obj = (Object3D) Children().get(i); + + memory += obj.MemorySize(); + } + + blockloop = false; + + return memory; } void Slower() @@ -6193,6 +6279,8 @@ static cVector maxima = new cVector(); static javax.vecmath.Point3d center = new javax.vecmath.Point3d(); + boolean compiling; + void Draw(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked) { Invariants(); // june 2013 @@ -6278,7 +6366,8 @@ boolean usecalllists = !IsDynamic() && IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !Link2Support()); // !(this instanceof cSpring) && !(this instanceof BezierPatch); - //boolean usecalllists = false; //!IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch); + + //usecalllists = false; //!IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch); //usecalllists &= display.DrawMode() == display.DEFAULT; // Don't compute list in shadow pass. @@ -6332,7 +6421,9 @@ display.NewList(bRep.displaylist); } + compiling = true; CallList(display, root, selected, blocked); + compiling = false; // compiled = true; if (usecalllists && bRep.displaylist > 0) @@ -6807,14 +6898,17 @@ void DrawNode(iCameraPane display, Object3D /*Composite*/ root, boolean selected) { - if (display.DrawMode() == display.SHADOW && projectedVertices != null && projectedVertices.length > 2 && projectedVertices[2].y >= 10000) - return; // no shadow for transparent objects - - if (display.DrawMode() == iCameraPane.SELECTION && dontselect) - return; - - if (hide) - return; + if (!compiling) + { + if (display.DrawMode() == display.SHADOW && projectedVertices != null && projectedVertices.length > 2 && projectedVertices[2].y >= 10000) + return; // no shadow for transparent objects + + if (display.DrawMode() == iCameraPane.SELECTION && dontselect) + return; + + if (hide) + return; + } if (scriptnode != null) { @@ -8351,7 +8445,7 @@ objname = name + " " + System.identityHashCode(this) + " (" + parent.name + " " + System.identityHashCode(parent) + ")"; } else { - objname = GetName() + (Math.abs(count) == 1000 ? (count == 1000 ? " " : " * ") : (" (" + (count - 1) + ")")) + /*(IsSelected()?"(selected) ":"") + (touched?"(touched) ":"") */ ""; + objname = GetName() + (Math.abs(count) == 1000 ? (count == 1000 ? " " : " * ") : (" (" + ((bRep==null)?(count - 1):bRep.VertexCount()) + ")")) + /*(IsSelected()?"(selected) ":"") + (touched?"(touched) ":"") */ ""; } // + super.toString(); //return name + " (" + (SizeOf.deepSizeOf(this)/1024) + "K) " + this.getClass().getName(); -- Gitblit v1.6.2