diff --git a/src-windows/org/lwjgl/opengl/swt/PlatformWin32GLCanvas.java b/src-windows/org/lwjgl/opengl/swt/PlatformWin32GLCanvas.java index a4c6c897f..c08b320f1 100644 --- a/src-windows/org/lwjgl/opengl/swt/PlatformWin32GLCanvas.java +++ b/src-windows/org/lwjgl/opengl/swt/PlatformWin32GLCanvas.java @@ -140,7 +140,8 @@ public void resetStyle(Composite parent) { public long create(GLCanvas canvas, GLData attribs, GLData effective) { Canvas dummycanvas = new Canvas(canvas.getParent(), checkStyle(canvas.getParent(), canvas.getStyle())); long context = 0L; - MemoryStack stack = MemoryStack.stackGet(); int ptr = stack.getPointer(); + MemoryStack stack = MemoryStack.stackGet(); + int ptr = stack.getPointer(); try { context = create(canvas.handle, dummycanvas.handle, attribs, effective); } catch (SWTException e) { diff --git a/src/org/nschmidt/ldparteditor/data/GData2.java b/src/org/nschmidt/ldparteditor/data/GData2.java index 6c35adc7f..19fbae1bb 100644 --- a/src/org/nschmidt/ldparteditor/data/GData2.java +++ b/src/org/nschmidt/ldparteditor/data/GData2.java @@ -912,7 +912,7 @@ int insertDistanceMeter(Vertex[] v, float[] lineData, int lineIndex) { GL33Helper.pointAt7(0, v[0].x, v[0].y, v[0].z, lineData, lineIndex); GL33Helper.pointAt7(1, v[1].x, v[1].y, v[1].z, lineData, lineIndex); - GL33Helper.colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, lineData, lineIndex); + GL33Helper.colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, lineData, lineIndex); return 4; } diff --git a/src/org/nschmidt/ldparteditor/data/GData3.java b/src/org/nschmidt/ldparteditor/data/GData3.java index 43ae3682a..0e7459892 100644 --- a/src/org/nschmidt/ldparteditor/data/GData3.java +++ b/src/org/nschmidt/ldparteditor/data/GData3.java @@ -1600,7 +1600,7 @@ void drawProtractorGL20(boolean selected, Composite3D c3d, BigDecimal x1c, BigDe GL11.glLineWidth(View.lineWidthGL); if (selected) { - GL11.glColor4f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 1f); + GL11.glColor4f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 1f); GL11.glBegin(GL11.GL_LINES); GL11.glVertex3f(x1, y1, z1); GL11.glVertex3f(x2, y2, z2); @@ -1838,13 +1838,13 @@ int insertProtractor(Vertex[] v, float[] lineData, int lineIndex) { GL33Helper.pointAt7(0, v[0].x, v[0].y, v[0].z, lineData, lineIndex); GL33Helper.pointAt7(1, v[1].x, v[1].y, v[1].z, lineData, lineIndex); - GL33Helper.colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, lineData, lineIndex); + GL33Helper.colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, lineData, lineIndex); lineIndex += 2; GL33Helper.pointAt7(0, v[0].x, v[0].y, v[0].z, lineData, lineIndex); GL33Helper.pointAt7(1, v[2].x, v[2].y, v[2].z, lineData, lineIndex); - GL33Helper.colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, lineData, lineIndex); + GL33Helper.colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, lineData, lineIndex); lineIndex += 2; diff --git a/src/org/nschmidt/ldparteditor/data/GDataCSG.java b/src/org/nschmidt/ldparteditor/data/GDataCSG.java index 7a6886509..4589ebe9e 100644 --- a/src/org/nschmidt/ldparteditor/data/GDataCSG.java +++ b/src/org/nschmidt/ldparteditor/data/GDataCSG.java @@ -80,6 +80,7 @@ public final class GDataCSG extends GData { final CSGType type; static volatile Lock staticLock = new ReentrantLock(); + static volatile Lock selectionLock = new ReentrantLock(); private static final ThreadsafeHashMap> linkedCSG = new ThreadsafeHashMap<>(); private static final ThreadsafeHashMap> idToGDataCSG = new ThreadsafeHashMap<>(); @@ -1051,7 +1052,7 @@ private synchronized boolean isSelected(DatFile df) { static synchronized void drawSelectionCSG(Composite3D c3d) { final Set selectedTriangles = selectedTrianglesMap.putIfAbsent(c3d.getLockableDatFileReference(), new HashSet<>()); if (!selectedTriangles.isEmpty()) { - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); GL11.glBegin(GL11.GL_LINES); for (GData3 tri : selectedTriangles) { GL11.glVertex3f(tri.x1, tri.y1, tri.z1); @@ -1159,15 +1160,24 @@ public static synchronized Set getSelection(DatFile df) { static synchronized void selectAll(DatFile df) { clearSelection(df); - Set newSelection = new HashSet<>(registeredData.putIfAbsent(df, new HashSet<>())); - for (Iterator it = newSelection.iterator(); it.hasNext();) { - final GDataCSG g = it.next(); - if (g != null && g.canSelect()) { - continue; + GDataCSG.staticLock.lock(); + try { + Set newSelection = new HashSet<>(registeredData.putIfAbsent(df, new HashSet<>())); + for (Iterator it = newSelection.iterator(); it.hasNext();) { + final GDataCSG g = it.next(); + if (g != null && g.canSelect()) { + continue; + } + it.remove(); } - it.remove(); + selectedBodyMap.get(df).addAll(newSelection); + for (GDataCSG csg : newSelection) { + csg.drawAndParse(null, df, false); + } + GDataCSG.rebuildSelection(df); + } finally { + GDataCSG.staticLock.unlock(); } - selectedBodyMap.get(df).addAll(newSelection); } synchronized boolean canSelect() { diff --git a/src/org/nschmidt/ldparteditor/data/GL33ModelRenderer.java b/src/org/nschmidt/ldparteditor/data/GL33ModelRenderer.java index 5b448ab62..f7395316a 100644 --- a/src/org/nschmidt/ldparteditor/data/GL33ModelRenderer.java +++ b/src/org/nschmidt/ldparteditor/data/GL33ModelRenderer.java @@ -375,6 +375,17 @@ private void renderThread() { // Skip render mode 5 if (renderMode != 5) try { staticLock.lock(); + final boolean bfcMode = renderMode == 2 || renderMode == 3 || renderMode == 6; + + if (bfcMode) { + Colour.vertexSelectedTmpColourR = Colour.vertexSelectedBfcColourR; + Colour.vertexSelectedTmpColourG = Colour.vertexSelectedBfcColourG; + Colour.vertexSelectedTmpColourB = Colour.vertexSelectedBfcColourB; + } else { + Colour.vertexSelectedTmpColourR = Colour.vertexSelectedColourR; + Colour.vertexSelectedTmpColourG = Colour.vertexSelectedColourG; + Colour.vertexSelectedTmpColourB = Colour.vertexSelectedColourB; + } // First we have to get links to the sets from the model final DatFile df = c3d.getLockableDatFileReference(); @@ -544,7 +555,8 @@ private void renderThread() { // CSG Selection int csgSelectionVertexSize = 0; final float[] tmpCsgSelectionData; - { + GDataCSG.selectionLock.lock(); + try { int csgSelectionIndex = 0; Set selection = GDataCSG.getSelectionData(df); csgSelectionVertexSize += selection.size() * 6; @@ -556,9 +568,11 @@ private void renderThread() { pointAt7(3, gd3.x1, gd3.y1, gd3.z1, tmpCsgSelectionData, csgSelectionIndex); pointAt7(4, gd3.x3, gd3.y3, gd3.z3, tmpCsgSelectionData, csgSelectionIndex); pointAt7(5, gd3.x2, gd3.y2, gd3.z2, tmpCsgSelectionData, csgSelectionIndex); - colourise7(0, 6, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, tmpCsgSelectionData, csgSelectionIndex); + colourise7(0, 6, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, tmpCsgSelectionData, csgSelectionIndex); csgSelectionIndex += 6; } + } finally { + GDataCSG.selectionLock.unlock(); } if (calculateCSG.compareAndSet(true, false)) { @@ -593,7 +607,13 @@ private void renderThread() { csgSolidVertexCount += size[1]; csgTransVertexCount += size[2]; } - GDataCSG.rebuildSelection(df); + GDataCSG.selectionLock.lock(); + try { + GDataCSG.rebuildSelection(df); + } finally { + GDataCSG.selectionLock.unlock(); + } + int csgIndex = 0; int transparentCSGindex = csgSolidVertexCount; float[] tmpCsgData = new float[csgDataSize]; @@ -1081,9 +1101,9 @@ private void renderThread() { final float r = Colour.vertexColourR; final float g = Colour.vertexColourG; final float b = Colour.vertexColourB; - final float r2 = Colour.vertexSelectedColourR; - final float g2 = Colour.vertexSelectedColourG; - final float b2 = Colour.vertexSelectedColourB; + final float r2 = Colour.vertexSelectedTmpColourR; + final float g2 = Colour.vertexSelectedTmpColourG; + final float b2 = Colour.vertexSelectedTmpColourB; int i = 0; if (smoothVertices) { @@ -1183,7 +1203,7 @@ private void renderThread() { Vertex v2 = verts.get(i); pointAt7(0, v1.x, v1.y, v1.z, selectionLineData, selectionLineIndex); pointAt7(1, v2.x, v2.y, v2.z, selectionLineData, selectionLineIndex); - colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex); + colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex); selectionLineIndex += 2; } } @@ -1243,7 +1263,7 @@ private void renderThread() { case 2: pointAt7(0, v[0].x, v[0].y, v[0].z, selectionLineData, selectionLineIndex); pointAt7(1, v[1].x, v[1].y, v[1].z, selectionLineData, selectionLineIndex); - colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex); + colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex); selectionLineIndex += 2; break; case 3: @@ -1254,9 +1274,9 @@ private void renderThread() { pointAt7(4, v[2].x, v[2].y, v[2].z, selectionLineData, selectionLineIndex); pointAt7(5, v[0].x, v[0].y, v[0].z, selectionLineData, selectionLineIndex); if (((GData3) gd).isTriangle) { - colourise7(0, 6, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex); + colourise7(0, 6, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex); } else { - colourise7(0, 4, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex); + colourise7(0, 4, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex); } selectionLineIndex += 6; break; @@ -1269,7 +1289,7 @@ private void renderThread() { pointAt7(5, v[3].x, v[3].y, v[3].z, selectionLineData, selectionLineIndex); pointAt7(6, v[3].x, v[3].y, v[3].z, selectionLineData, selectionLineIndex); pointAt7(7, v[0].x, v[0].y, v[0].z, selectionLineData, selectionLineIndex); - colourise7(0, 8, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex); + colourise7(0, 8, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex); selectionLineIndex += 8; break; case 5: @@ -1279,7 +1299,7 @@ private void renderThread() { pointAt7(3, v[2].x, v[2].y, v[2].z, selectionLineData, selectionLineIndex); pointAt7(4, v[0].x, v[0].y, v[0].z, selectionLineData, selectionLineIndex); pointAt7(5, v[3].x, v[3].y, v[3].z, selectionLineData, selectionLineIndex); - colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex); + colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex); colourise7(2, 2, Colour.condlineSelectedColourR, Colour.condlineSelectedColourG, Colour.condlineSelectedColourB, 7f, selectionLineData, selectionLineIndex); colourise7(4, 2, Colour.condlineSelectedColourR / 2f, Colour.condlineSelectedColourG / 2f, Colour.condlineSelectedColourB / 2f, 7f, selectionLineData, selectionLineIndex); selectionLineIndex += 6; diff --git a/src/org/nschmidt/ldparteditor/data/VertexManager.java b/src/org/nschmidt/ldparteditor/data/VertexManager.java index 9ac5aaf18..03094ae59 100644 --- a/src/org/nschmidt/ldparteditor/data/VertexManager.java +++ b/src/org/nschmidt/ldparteditor/data/VertexManager.java @@ -172,7 +172,7 @@ final synchronized void drawGL20(final Composite3D c3d) { GL11.glLineWidth(2f); if (c3d.isShowingVertices()) { GL11.glBegin(GL11.GL_POINTS); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); for (Vertex vertex : selectedVertices) { GL11.glVertex3f(vertex.x, vertex.y, vertex.z); } @@ -262,7 +262,7 @@ final synchronized void drawGL20(final Composite3D c3d) { new GData3(triverts2[0], triverts2[1], triverts2[2], null, new GColour(16, gd3.r, gd3.g, gd3.b, 0f), false).drawProtractorGL20(true, c3d, triverts[0].xp, triverts[0].yp, triverts[0].zp, triverts[1].xp, triverts[1].yp, triverts[1].zp, triverts[2].xp, triverts[2].yp, triverts[2].zp); GL11.glMultMatrixf(matrix); GL11.glBegin(GL11.GL_LINES); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); GL11.glVertex3f(triverts[0].x, triverts[0].y, triverts[0].z); GL11.glVertex3f(triverts[1].x, triverts[1].y, triverts[1].z); GL11.glVertex3f(triverts[2].x, triverts[2].y, triverts[2].z); @@ -345,9 +345,9 @@ final synchronized void drawGL20(final Composite3D c3d) { } if (!gd2.isLine) { GL11.glMultMatrixf(matrixInv); - new GData2(lineverts2[0], lineverts2[1], null, new GColour(16, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 0f), false).drawDistanceGL20(c3d, lineverts[0].xp, lineverts[0].yp, lineverts[0].zp, lineverts[1].xp, lineverts[1].yp, lineverts[1].zp); + new GData2(lineverts2[0], lineverts2[1], null, new GColour(16, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 0f), false).drawDistanceGL20(c3d, lineverts[0].xp, lineverts[0].yp, lineverts[0].zp, lineverts[1].xp, lineverts[1].yp, lineverts[1].zp); GL11.glBegin(GL11.GL_LINES); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); GL11.glVertex3f(lineverts2[0].x, lineverts2[0].y, lineverts2[0].z); GL11.glVertex3f(lineverts2[1].x, lineverts2[1].y, lineverts2[1].z); GL11.glColor3f(Colour.vertexColourR, Colour.vertexColourG, Colour.vertexColourB); @@ -355,7 +355,7 @@ final synchronized void drawGL20(final Composite3D c3d) { GL11.glMultMatrixf(matrix); } GL11.glBegin(GL11.GL_LINES); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); GL11.glVertex3f(lineverts[0].x, lineverts[0].y, lineverts[0].z); GL11.glVertex3f(lineverts[1].x, lineverts[1].y, lineverts[1].z); GL11.glColor3f(Colour.vertexColourR, Colour.vertexColourG, Colour.vertexColourB); @@ -384,7 +384,7 @@ final synchronized void drawGL20(final Composite3D c3d) { new GData3(triverts2[0], triverts2[1], triverts2[2], null, new GColour(16, gd3.r, gd3.g, gd3.b, 0f), false).drawProtractorGL20(true, c3d, triverts[0].xp, triverts[0].yp, triverts[0].zp, triverts[1].xp, triverts[1].yp, triverts[1].zp, triverts[2].xp, triverts[2].yp, triverts[2].zp); GL11.glMultMatrixf(matrix); GL11.glBegin(GL11.GL_LINES); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); GL11.glVertex3f(triverts[0].x, triverts[0].y, triverts[0].z); GL11.glVertex3f(triverts[1].x, triverts[1].y, triverts[1].z); GL11.glVertex3f(triverts[2].x, triverts[2].y, triverts[2].z); @@ -404,7 +404,7 @@ final synchronized void drawGL20(final Composite3D c3d) { GL11.glVertex3f(triverts[1].x, triverts[1].y, triverts[1].z); GL11.glEnd(); GL11.glBegin(GL11.GL_LINES); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); GL11.glVertex3f(triverts[0].x, triverts[0].y, triverts[0].z); GL11.glVertex3f(triverts[1].x, triverts[1].y, triverts[1].z); @@ -461,7 +461,7 @@ final synchronized void drawGL20(final Composite3D c3d) { GL11.glVertex3f(quadverts[1].x, quadverts[1].y, quadverts[1].z); GL11.glEnd(); GL11.glBegin(GL11.GL_LINES); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); GL11.glVertex3f(quadverts[0].x, quadverts[0].y, quadverts[0].z); GL11.glVertex3f(quadverts[1].x, quadverts[1].y, quadverts[1].z); @@ -487,7 +487,7 @@ final synchronized void drawGL20(final Composite3D c3d) { } } GL11.glBegin(GL11.GL_LINES); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); GL11.glVertex3f(condverts[0].x, condverts[0].y, condverts[0].z); GL11.glVertex3f(condverts[1].x, condverts[1].y, condverts[1].z); GL11.glColor3f(Colour.vertexColourR, Colour.vertexColourG, Colour.vertexColourB); @@ -501,7 +501,7 @@ final synchronized void drawGL20(final Composite3D c3d) { } } else if (c3d.isShowingVertices() && !OpenGLRenderer.getSmoothing().get()) { GL11.glBegin(GL11.GL_POINTS); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); for (Vertex vertex : selectedVertices) { if (tmpHiddenVertices.contains(vertex)) continue; @@ -518,7 +518,7 @@ final synchronized void drawGL20(final Composite3D c3d) { GL11.glDisable(GL11.GL_LIGHTING); GL11.glBegin(GL11.GL_POINTS); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); Object[] obj = getSmoothedVertices(selectedVertices); @SuppressWarnings("unchecked") List verts = (List) obj[0]; @@ -534,7 +534,7 @@ final synchronized void drawGL20(final Composite3D c3d) { GL11.glLineWidth(2f); GL11.glBegin(GL11.GL_LINES); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); for (Vertex vertex : verts) { if (adjacency.containsKey(indmap.get(vertex))) { @@ -650,7 +650,7 @@ final synchronized void drawGL20(final Composite3D c3d) { if (!modifiedManipulator) GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_LIGHTING); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); Vertex[] dataVerts = new Vertex[4]; int i = 0; if (!selectedLines.isEmpty()) { @@ -679,8 +679,8 @@ final synchronized void drawGL20(final Composite3D c3d) { lineverts[i1] = new Vertex(res.x, res.y, res.z); } GL11.glMultMatrixf(matrixInv); - new GData2(dataVerts[0], dataVerts[1], null, new GColour(16, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 0f), false).drawDistanceGL20(c3d, lineverts[0].xp, lineverts[0].yp, lineverts[0].zp, lineverts[1].xp, lineverts[1].yp, lineverts[1].zp); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + new GData2(dataVerts[0], dataVerts[1], null, new GColour(16, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 0f), false).drawDistanceGL20(c3d, lineverts[0].xp, lineverts[0].yp, lineverts[0].zp, lineverts[1].xp, lineverts[1].yp, lineverts[1].zp); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); GL11.glMultMatrixf(matrix); } GL11.glBegin(GL11.GL_LINES); @@ -738,7 +738,7 @@ final synchronized void drawGL20(final Composite3D c3d) { } } GL11.glEnd(); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); } if (!selectedTriangles.isEmpty()) { GL11.glLineWidth(2f); @@ -770,7 +770,7 @@ final synchronized void drawGL20(final Composite3D c3d) { new GData3(dataVerts[0], dataVerts[1], dataVerts[2], null, new GColour(16, tri.r, tri.g, tri.b, 0f), false).drawProtractorGL20(true, c3d, lineverts[0].xp, lineverts[0].yp, lineverts[0].zp, lineverts[1].xp, lineverts[1].yp, lineverts[1].zp, lineverts[2].xp, lineverts[2].yp, lineverts[2].zp); GL11.glMultMatrixf(matrix); GL11.glBegin(GL11.GL_LINES); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); GL11.glVertex3f(dataVerts[0].x, dataVerts[0].y, dataVerts[0].z); GL11.glVertex3f(dataVerts[1].x, dataVerts[1].y, dataVerts[1].z); GL11.glVertex3f(dataVerts[2].x, dataVerts[2].y, dataVerts[2].z); @@ -806,7 +806,7 @@ final synchronized void drawGL20(final Composite3D c3d) { } } GL11.glEnd(); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); } } if (!selectedQuads.isEmpty()) { @@ -830,7 +830,7 @@ final synchronized void drawGL20(final Composite3D c3d) { } } GL11.glEnd(); - GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB); + GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB); } GL11.glEnable(GL11.GL_DEPTH_TEST); diff --git a/src/org/nschmidt/ldparteditor/dialog/options/OptionsDesign.java b/src/org/nschmidt/ldparteditor/dialog/options/OptionsDesign.java index 4f4004160..47801e0fc 100644 --- a/src/org/nschmidt/ldparteditor/dialog/options/OptionsDesign.java +++ b/src/org/nschmidt/ldparteditor/dialog/options/OptionsDesign.java @@ -810,6 +810,7 @@ protected void buildColourTree(final UserSettingState userSettings, TreeItem trt registerColour(trtmEditor3D, I18n.COLOUR_VERTEX_COLOUR, ColourType.OPENGL_COLOUR, new Object[]{Colour.vertexColourR, Colour.vertexColourG, Colour.vertexColourB}, (r, g, b) -> { Colour.vertexColourR = r; Colour.vertexColourG = g; Colour.vertexColourB = b;}); registerColour(trtmEditor3D, I18n.COLOUR_SELECTED_VERTEX_COLOUR, ColourType.OPENGL_COLOUR, new Object[]{Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB}, (r, g, b) -> { Colour.vertexSelectedColourR = r; Colour.vertexSelectedColourG = g; Colour.vertexSelectedColourB = b;}); + registerColour(trtmEditor3D, I18n.COLOUR_SELECTED_VERTEX_BFC_COLOUR, ColourType.OPENGL_COLOUR, new Object[]{Colour.vertexSelectedBfcColourR, Colour.vertexSelectedBfcColourG, Colour.vertexSelectedBfcColourB}, (r, g, b) -> { Colour.vertexSelectedBfcColourR = r; Colour.vertexSelectedBfcColourG = g; Colour.vertexSelectedBfcColourB = b;}); registerColour(trtmEditor3D, I18n.COLOUR_SELECTED_CONDLINE_COLOUR, ColourType.OPENGL_COLOUR, new Object[]{Colour.condlineSelectedColourR, Colour.condlineSelectedColourG, Colour.condlineSelectedColourB}, (r, g, b) -> { Colour.condlineSelectedColourR = r; Colour.condlineSelectedColourG = g; Colour.condlineSelectedColourB = b;}); registerColour(trtmEditor3D, I18n.COLOUR_SELECTED_MANIPULATOR_COLOUR, ColourType.OPENGL_COLOUR, new Object[]{Colour.manipulatorSelectedColourR, Colour.manipulatorSelectedColourG, Colour.manipulatorSelectedColourB}, (r, g, b) -> { Colour.manipulatorSelectedColourR = r; Colour.manipulatorSelectedColourG = g; Colour.manipulatorSelectedColourB = b;}); registerColour(trtmEditor3D, I18n.COLOUR_RUBBERBAND_COLOUR, ColourType.OPENGL_COLOUR, new Object[]{Colour.rubberBandColourR, Colour.rubberBandColourG, Colour.rubberBandColourB}, (r, g, b) -> { Colour.rubberBandColourR = r; Colour.rubberBandColourG = g; Colour.rubberBandColourB = b;}); diff --git a/src/org/nschmidt/ldparteditor/enumtype/Colour.java b/src/org/nschmidt/ldparteditor/enumtype/Colour.java index 64c1849d1..a10f8c448 100644 --- a/src/org/nschmidt/ldparteditor/enumtype/Colour.java +++ b/src/org/nschmidt/ldparteditor/enumtype/Colour.java @@ -39,10 +39,18 @@ public enum Colour { public static volatile float vertexColourG = 0.565f; public static volatile float vertexColourB = 1f; + public static volatile float vertexSelectedTmpColourR = 0.75f; + public static volatile float vertexSelectedTmpColourG = 0.05f; + public static volatile float vertexSelectedTmpColourB = 0.05f; + public static volatile float vertexSelectedColourR = 0.75f; public static volatile float vertexSelectedColourG = 0.05f; public static volatile float vertexSelectedColourB = 0.05f; + public static volatile float vertexSelectedBfcColourR = 0f; + public static volatile float vertexSelectedBfcColourG = 1f; + public static volatile float vertexSelectedBfcColourB = 1f; + public static volatile float condlineSelectedColourR = 0.75f; public static volatile float condlineSelectedColourG = 0.35f; public static volatile float condlineSelectedColourB = 0.05f; @@ -154,11 +162,11 @@ public enum Colour { public static float textColourR = 0f; public static float textColourG = 0f; public static float textColourB = 0f; - + public static float textColourAltR = 1.0f; public static float textColourAltG = 0.5019608f; public static float textColourAltB = 0f; - + public static float textColourDefaultR = 0f; public static float textColourDefaultG = 0f; public static float textColourDefaultB = 0f; diff --git a/src/org/nschmidt/ldparteditor/i18n/Colour.properties b/src/org/nschmidt/ldparteditor/i18n/Colour.properties index 56af61387..52e1f50cb 100644 --- a/src/org/nschmidt/ldparteditor/i18n/Colour.properties +++ b/src/org/nschmidt/ldparteditor/i18n/Colour.properties @@ -45,6 +45,7 @@ PRIMITVE_SIGN_FG_COLOUR = Primitve Area 1 RUBBERBAND_COLOUR = Selection Rubber Band SELECTED_CONDLINE_COLOUR = Selected Conditional Line SELECTED_MANIPULATOR_COLOUR = Selected Manipulator +SELECTED_VERTEX_BFC_COLOUR = Selected Vertex (BFC Mode) SELECTED_VERTEX_COLOUR = Selected Vertex SHOWN_CONDLINE_COLOUR = Shown Cond. Line (Cond. Line Mode) TEXT_COLOUR_1 = Text (Default) diff --git a/src/org/nschmidt/ldparteditor/i18n/I18n.java b/src/org/nschmidt/ldparteditor/i18n/I18n.java index e14494b80..a8c77e571 100644 --- a/src/org/nschmidt/ldparteditor/i18n/I18n.java +++ b/src/org/nschmidt/ldparteditor/i18n/I18n.java @@ -227,6 +227,7 @@ private static void adjust() { // Calculate line offset public static final String COLOUR_RUBBERBAND_COLOUR = COLOUR.getString(getProperty()); public static final String COLOUR_SELECTED_CONDLINE_COLOUR = COLOUR.getString(getProperty()); public static final String COLOUR_SELECTED_MANIPULATOR_COLOUR = COLOUR.getString(getProperty()); + public static final String COLOUR_SELECTED_VERTEX_BFC_COLOUR = COLOUR.getString(getProperty()); public static final String COLOUR_SELECTED_VERTEX_COLOUR = COLOUR.getString(getProperty()); public static final String COLOUR_SHOWN_CONDLINE_COLOUR = COLOUR.getString(getProperty()); public static final String COLOUR_TEXT_COLOUR_1 = COLOUR.getString(getProperty()); diff --git a/src/org/nschmidt/ldparteditor/opengl/EmptySubfileRenderer.java b/src/org/nschmidt/ldparteditor/opengl/EmptySubfileRenderer.java index 7c474755b..ba4c20933 100644 --- a/src/org/nschmidt/ldparteditor/opengl/EmptySubfileRenderer.java +++ b/src/org/nschmidt/ldparteditor/opengl/EmptySubfileRenderer.java @@ -38,9 +38,9 @@ static float[] calculateEmptySubfileBoxes(DatFile df, Manipulator mani) { // Prefer an in-line solution over extracted methods for (GData1 subfile : subs) { final boolean selected = vm.getSelectedSubfiles().contains(subfile); - final float r = selected ? Colour.vertexSelectedColourR : Colour.originColourR; - final float g = selected ? Colour.vertexSelectedColourG : Colour.originColourG; - final float b = selected ? Colour.vertexSelectedColourB : Colour.originColourB; + final float r = selected ? Colour.vertexSelectedTmpColourR : Colour.originColourR; + final float g = selected ? Colour.vertexSelectedTmpColourG : Colour.originColourG; + final float b = selected ? Colour.vertexSelectedTmpColourB : Colour.originColourB; Matrix4f m = subfile.getProductMatrix(); if (mani.isModified() && selected) { diff --git a/src/org/nschmidt/ldparteditor/opengl/OpenGLRenderer20.java b/src/org/nschmidt/ldparteditor/opengl/OpenGLRenderer20.java index b296ec417..de1837ae9 100644 --- a/src/org/nschmidt/ldparteditor/opengl/OpenGLRenderer20.java +++ b/src/org/nschmidt/ldparteditor/opengl/OpenGLRenderer20.java @@ -243,8 +243,20 @@ public void drawScene() { final long start = System.currentTimeMillis(); final UserSettingState userSettings = WorkbenchManager.getUserSettingState(); + final int renderMode = c3d.getRenderMode(); final boolean negDet = c3d.hasNegDeterminant(); - final boolean raytraceMode = c3d.getRenderMode() == 5; + final boolean raytraceMode = renderMode == 5; + final boolean bfcMode = renderMode == 2 || renderMode == 3 || renderMode == 6; + + if (bfcMode) { + Colour.vertexSelectedTmpColourR = Colour.vertexSelectedBfcColourR; + Colour.vertexSelectedTmpColourG = Colour.vertexSelectedBfcColourG; + Colour.vertexSelectedTmpColourB = Colour.vertexSelectedBfcColourB; + } else { + Colour.vertexSelectedTmpColourR = Colour.vertexSelectedColourR; + Colour.vertexSelectedTmpColourG = Colour.vertexSelectedColourG; + Colour.vertexSelectedTmpColourB = Colour.vertexSelectedColourB; + } final GLCanvas canvas = c3d.getCanvas(); @@ -2300,10 +2312,10 @@ else if (zoom > 1.0E-2) // Draw arrows for cursor-on-border-scrolling if (userSettings.isTranslatingViewByCursor() && c3d.hasMouse() && c3d.equals(Project.getFileToEdit().getLastSelectedComposite())) { - final float duration = Math.max(10f, Math.min(1000, System.currentTimeMillis() - start)); - final float speed = 0.05f / duration / zoom; + final float duration = Math.max(10f, Math.min(1000, System.currentTimeMillis() - start)); + final float speed = 0.05f / duration / zoom; - // TOP + // TOP GL11.glColor3f(Colour.textColourR, Colour.textColourG, Colour.textColourB); if (Math.abs(bounds.width / 2f - mp.x) > 75f || mp.y > 25f) { GL11.glColor3f(Colour.textColourR, Colour.textColourG, Colour.textColourB); diff --git a/src/org/nschmidt/ldparteditor/workbench/UserSettingState.java b/src/org/nschmidt/ldparteditor/workbench/UserSettingState.java index bc3aa6d69..04884c78d 100644 --- a/src/org/nschmidt/ldparteditor/workbench/UserSettingState.java +++ b/src/org/nschmidt/ldparteditor/workbench/UserSettingState.java @@ -153,6 +153,7 @@ public class UserSettingState implements Serializable { private float[] bfcUncertifiedColour = null; private float[] vertexColour = null; private float[] vertexSelectedColour = null; + private float[] vertexSelectedBfcColour = null; private float[] condlineSelectedColour = null; private float[] lineColour = null; private float[] meshlineColour = null; @@ -707,6 +708,7 @@ void saveColours() { vertexColour = new float[] {Colour.vertexColourR,Colour.vertexColourG,Colour.vertexColourB}; vertexSelectedColour = new float[] {Colour.vertexSelectedColourR,Colour.vertexSelectedColourG,Colour.vertexSelectedColourB}; + vertexSelectedBfcColour = new float[] {Colour.vertexSelectedBfcColourR,Colour.vertexSelectedBfcColourG,Colour.vertexSelectedBfcColourB}; condlineSelectedColour = new float[] {Colour.condlineSelectedColourR,Colour.condlineSelectedColourG,Colour.condlineSelectedColourB}; @@ -843,6 +845,15 @@ public void loadColourSettings() { Colour.vertexSelectedColourR = vertexSelectedColour[0]; Colour.vertexSelectedColourG = vertexSelectedColour[1]; Colour.vertexSelectedColourB = vertexSelectedColour[2]; + Colour.vertexSelectedTmpColourR = Colour.vertexSelectedColourR; + Colour.vertexSelectedTmpColourG = Colour.vertexSelectedColourG; + Colour.vertexSelectedTmpColourB = Colour.vertexSelectedColourB; + } + + if (vertexSelectedBfcColour != null) { + Colour.vertexSelectedBfcColourR = vertexSelectedBfcColour[0]; + Colour.vertexSelectedBfcColourG = vertexSelectedBfcColour[1]; + Colour.vertexSelectedBfcColourB = vertexSelectedBfcColour[2]; } if (condlineSelectedColour != null) {