From 1e61e487c0f1d99bd48331cf102b7c156619437f Mon Sep 17 00:00:00 2001 From: Evren Ozkan Date: Mon, 9 Nov 2015 11:49:31 -0500 Subject: [PATCH] Bug fixing: nonTarget tool rendering problem when measurements of a row are activated --- .../lesiontracker/compatibility/lesionTool.js | 17 +- .../compatibility/measurementManagerDAL.js | 1 + .../compatibility/nonTargetTool.js | 154 ++++++++++-------- .../components/lesionTable/lesionTable.js | 10 +- .../lesionTableRow/lesionTableRow.html | 2 +- 5 files changed, 96 insertions(+), 88 deletions(-) diff --git a/Packages/lesiontracker/compatibility/lesionTool.js b/Packages/lesiontracker/compatibility/lesionTool.js index 059a77f63..e0ca51471 100644 --- a/Packages/lesiontracker/compatibility/lesionTool.js +++ b/Packages/lesiontracker/compatibility/lesionTool.js @@ -125,21 +125,21 @@ var cornerstoneTools = (function($, cornerstone, cornerstoneMath, cornerstoneToo return; } - updateLesions(toolData, eventData, e.currentTarget); + updateLesions(toolData, eventData); } - function updateLesions(toolData, eventData, currentElement) { + function updateLesions(toolData, eventData) { // we have tool data for this element - iterate over each one and draw it var context = eventData.canvasContext.canvas.getContext('2d'); context.setTransform(1, 0, 0, 1, 0, 0); for (var i = 0; i < toolData.data.length; i++) { renderLesion(toolData.data[i], context, eventData); - updateLesionCollection(toolData.data[i], currentElement); + updateLesionCollection(toolData.data[i]); } } - function updateLesionCollection(lesionData, currentElement) { + function updateLesionCollection(lesionData) { if (lesionData.active) { if (lesionData.timepointID !== undefined && lesionData.timepointID !== "") { @@ -254,7 +254,7 @@ var cornerstoneTools = (function($, cornerstone, cornerstoneMath, cornerstoneToo var start = new Date(); var enabledElement = eventObject.enabledElement; - var isTarget = eventObject.isTarget; + var isTarget = eventObject.lesionData.isTarget; var lesionNumber = eventObject.lesionData.lesionNumber; var type = eventObject.type; @@ -272,7 +272,7 @@ var cornerstoneTools = (function($, cornerstone, cornerstoneMath, cornerstoneToo var data = toolData.data[i]; //When click a row of table measurements, measurement will be active and color will be green - if (data.lesionNumber === eventObject.lesionNumber && eventObject.type !== "active") { + if (data.lesionNumber === eventObject.lesionNumber && eventObject.type !== "active" && isTarget) { data.visible = false; deletedDataIndex = i; } @@ -285,7 +285,7 @@ var cornerstoneTools = (function($, cornerstone, cornerstoneMath, cornerstoneToo for (var i = 0; i < toolData.data.length; i++) { var data = toolData.data[i]; //When click a row of table measurements, measurement will be active and color will be green - if (data.lesionNumber === eventObject.lesionData.lesionNumber && eventObject.type === "active") { + if (data.lesionNumber === eventObject.lesionData.lesionNumber && eventObject.type === "active" && isTarget) { data.active = true; } else { data.active = false; @@ -299,9 +299,6 @@ var cornerstoneTools = (function($, cornerstone, cornerstoneMath, cornerstoneToo } } - - enabledElement.image.render(enabledElement, true); - var context = enabledElement.canvas.getContext('2d'); var end = new Date(); diff --git a/Packages/lesiontracker/compatibility/measurementManagerDAL.js b/Packages/lesiontracker/compatibility/measurementManagerDAL.js index 39a465cf2..28a46eef1 100644 --- a/Packages/lesiontracker/compatibility/measurementManagerDAL.js +++ b/Packages/lesiontracker/compatibility/measurementManagerDAL.js @@ -55,6 +55,7 @@ var measurementManagerDAL = (function() { var lesionDataObject = { lesionUID: uuid.v4(), + number: Measurements.find().count() + 1, lesionNumber: lesionData.lesionNumber, isTarget: typeof lesionData.isTarget !== 'undefined'?lesionData.isTarget:true, locationUID: lesionData.locationUID, diff --git a/Packages/lesiontracker/compatibility/nonTargetTool.js b/Packages/lesiontracker/compatibility/nonTargetTool.js index 4855417c1..dfc3dcb84 100644 --- a/Packages/lesiontracker/compatibility/nonTargetTool.js +++ b/Packages/lesiontracker/compatibility/nonTargetTool.js @@ -185,7 +185,7 @@ context.fill(); } - function suscribenonTargetToolModifiedEvent(element) { + function suscribeNonTargetToolModifiedEvent(element) { var elementEvents = $._data(element, "events"); var index = Object.keys(elementEvents).indexOf("nonTargetToolModified"); if (index < 0) { @@ -197,7 +197,7 @@ ///////// BEGIN IMAGE RENDERING /////// function onImageRendered(e, eventData) { - suscribenonTargetToolModifiedEvent(e.currentTarget); + suscribeNonTargetToolModifiedEvent(e.currentTarget); // if we have no toolData for this element, return immediately as there is nothing to do var toolData = cornerstoneTools.getToolState(e.currentTarget, toolType); @@ -205,93 +205,105 @@ return; } + updateLesions(toolData, eventData); + } + + function updateLesions(toolData, eventData) { // we have tool data for this element - iterate over each one and draw it var context = eventData.canvasContext.canvas.getContext('2d'); context.setTransform(1, 0, 0, 1, 0, 0); + for (var i = 0; i < toolData.data.length; i++) { + renderLesion(toolData.data[i], context, eventData); + } + } + + function renderLesion(lesion, context, eventData) { + context.save(); + var color; var lineWidth = cornerstoneTools.toolStyle.getToolWidth(); var font = cornerstoneTools.textStyle.getFont(); var config = cornerstoneTools.nonTarget.getConfiguration(); - for (var i = 0; i < toolData.data.length; i++) { - context.save(); + // configurable shadow from CornerstoneTools + if (config && config.shadow) { + context.shadowColor = '#000000'; + context.shadowOffsetX = +1; + context.shadowOffsetY = +1; + } - var data = toolData.data[i]; + if (lesion.active) { + color = cornerstoneTools.toolColors.getActiveColor(); + } else { + color = cornerstoneTools.toolColors.getToolColor(); + } - if (data.active) { - color = cornerstoneTools.toolColors.getActiveColor(); - } else { - color = cornerstoneTools.toolColors.getToolColor(); - } + // Draw the arrow + var handleStartCanvas = cornerstone.pixelToCanvas(eventData.element, lesion.handles.start); + var handleEndCanvas = cornerstone.pixelToCanvas(eventData.element, lesion.handles.end); - // Draw the arrow - var handleStartCanvas = cornerstone.pixelToCanvas(eventData.element, data.handles.start); - var handleEndCanvas = cornerstone.pixelToCanvas(eventData.element, data.handles.end); + if (config.arrowFirst) { + drawArrow(context, handleEndCanvas, handleStartCanvas, color, lineWidth); + } else { + drawArrow(context, handleStartCanvas, handleEndCanvas, color, lineWidth); + } - if (config.arrowFirst) { - drawArrow(context, handleEndCanvas, handleStartCanvas, color, lineWidth); - } else { - drawArrow(context, handleStartCanvas, handleEndCanvas, color, lineWidth); - } + if (config.drawHandles) { + cornerstoneTools.drawHandles(context, eventData, lesion.handles, color); + } else if (config.drawHandlesOnHover && lesion.handles.start.active) { + cornerstoneTools.drawHandles(context, eventData, [ lesion.handles.start ], color); + } else if (config.drawHandlesOnHover && lesion.handles.end.active) { + cornerstoneTools.drawHandles(context, eventData, [ lesion.handles.end ], color); + } - if (config.drawHandles) { - cornerstoneTools.drawHandles(context, eventData, data.handles, color); - } else if (config.drawHandlesOnHover && data.handles.start.active) { - cornerstoneTools.drawHandles(context, eventData, [ data.handles.start ], color); - } else if (config.drawHandlesOnHover && data.handles.end.active) { - cornerstoneTools.drawHandles(context, eventData, [ data.handles.end ], color); - } + //Set coordinates of text + var linkedTextStartCanvas = cornerstone.pixelToCanvas(eventData.element, lesion.linkedTextCoords.start); + if (!lesion.linkedTextCoords.init) { + lesion.linkedTextCoords.start.x = lesion.handles.start.x + 50; + lesion.linkedTextCoords.start.y = lesion.handles.start.y + 40; + linkedTextStartCanvas = cornerstone.pixelToCanvas(eventData.element, lesion.linkedTextCoords.start); - //Set coordinates of text - var linkedTextStartCanvas = cornerstone.pixelToCanvas(eventData.element, data.linkedTextCoords.start); - var linkedTextEndCanvas = cornerstone.pixelToCanvas(eventData.element, data.linkedTextCoords.end); - if (!data.linkedTextCoords.init) { - data.linkedTextCoords.start.x = data.handles.start.x + 50; - data.linkedTextCoords.start.y = data.handles.start.y + 40; - linkedTextStartCanvas = cornerstone.pixelToCanvas(eventData.element, data.linkedTextCoords.start); + //Set end point of linkedTextCoords + lesion.linkedTextCoords.end.x = lesion.linkedTextCoords.start.x + 50; + lesion.linkedTextCoords.end.y = lesion.linkedTextCoords.start.y + 30; - //Set end point of linkedTextCoords - data.linkedTextCoords.end.x = data.linkedTextCoords.start.x + 50; - data.linkedTextCoords.end.y = data.linkedTextCoords.start.y + 30; - linkedTextEndCanvas = cornerstone.pixelToCanvas(eventData.element, data.linkedTextCoords.end); + //initialized coordinates of text + lesion.linkedTextCoords.init = true; + } - //initialized coordinates of text - data.linkedTextCoords.init = true; - } + //Draw linked line as dashed + context.setLineDash([2, 3]); + context.beginPath(); + context.strokeStyle = color; + context.lineWidth = 1 / eventData.viewport.scale; + var mid = { + x: (handleStartCanvas.x + handleEndCanvas.x) / 2, + y: (handleStartCanvas.y + handleEndCanvas.y) / 2 + }; - //Draw linked line as dashed - context.setLineDash([2, 3]); - context.beginPath(); - context.strokeStyle = color; - context.lineWidth = 1 / eventData.viewport.scale; - var mid = { - x: (handleStartCanvas.x + handleEndCanvas.x) / 2, - y: (handleStartCanvas.y + handleEndCanvas.y) / 2 + context.moveTo(mid.x, mid.y); + context.lineTo(linkedTextStartCanvas.x + 20, linkedTextStartCanvas.y); + context.stroke(); + + + // Draw the text + if (lesion.text && lesion.text !== '') { + context.font = font; + + var textCoords = { + x: linkedTextStartCanvas.x, + y: linkedTextStartCanvas.y }; - context.moveTo(mid.x, mid.y); - context.lineTo(linkedTextStartCanvas.x + 20, linkedTextStartCanvas.y); - context.stroke(); - - - // Draw the text - if (data.text && data.text !== '') { - context.font = font; - - var textCoords = { - x: linkedTextStartCanvas.x, - y: linkedTextStartCanvas.y - }; - - cornerstoneTools.drawTextBox(context, data.text, textCoords.x, textCoords.y, color); - } - - - context.restore(); + cornerstoneTools.drawTextBox(context, lesion.text, textCoords.x, textCoords.y, color); } + + + context.restore(); + } - // ---- Touch tool ---- + // ---- Touch tool ---- ///////// BEGIN ACTIVE TOOL /////// function addNewMeasurementTouch(touchEventData) { @@ -401,7 +413,7 @@ var data = toolData.data[i]; //When click a row of table measurements, measurement will be active and color will be green - if (data.lesionNumber === eventObject.lesionNumber && eventObject.type !== "active") { + if (data.lesionNumber === eventObject.lesionNumber && eventObject.type !== "active" && !isTarget) { data.visible = false; deletedDataIndex = i; } @@ -414,7 +426,7 @@ for (var i = 0; i < toolData.data.length; i++) { var data = toolData.data[i]; //When click a row of table measurements, measurement will be active and color will be green - if (data.lesionNumber === eventObject.lesionData.lesionNumber && eventObject.type === "active") { + if (data.lesionNumber === eventObject.lesionData.lesionNumber && eventObject.type === "active" && !isTarget) { data.active = true; } else { data.active = false; @@ -428,9 +440,6 @@ } } - - enabledElement.image.render(enabledElement, true); - var context = enabledElement.canvas.getContext('2d'); var end = new Date(); @@ -446,6 +455,7 @@ measurementText: "", renderTimeInMs: diff, lesionNumber: lesionNumber, + isTarget: isTarget, type: type //Holds image will be deleted or active }; diff --git a/Packages/lesiontracker/components/lesionTable/lesionTable.js b/Packages/lesiontracker/components/lesionTable/lesionTable.js index 472a732f7..615de2e8e 100644 --- a/Packages/lesiontracker/components/lesionTable/lesionTable.js +++ b/Packages/lesiontracker/components/lesionTable/lesionTable.js @@ -12,17 +12,16 @@ function nonTargetToolAdded(e, eventData, lesionData) { // location is selected and disable select location in dialog lesionData.locationUID = locationUID; var locationName = measurementManagerDAL.getLocationName(locationUID); - var locationIndex; + $("#selectNonTargetLesionLocation option").each(function() { if ($(this).text() === locationName) { - locationIndex = $(this).index(); + // Select location in locations dropdown list + $("#selectNonTargetLesionLocation option").eq($(this).index()).attr("selected", "selected"); return; } }); - // Select location in locations dropdown list - $("#selectNonTargetLesionLocation option").eq(locationIndex).attr("selected", "selected"); $("#selectNonTargetLesionLocation").attr("disabled", "disabled"); } else{ @@ -30,7 +29,7 @@ function nonTargetToolAdded(e, eventData, lesionData) { $("#selectNonTargetLesionLocation").removeAttr("disabled"); } - // Save lesionData in Session to use after location and response are selected in nonTargetLesionDialog + // Save lesionData in Session to use after location and response are selected Session.set("nonTargetLesionData", lesionData); var dialogPointsOnPage = eventData.currentPoints.page; @@ -81,6 +80,7 @@ function updateLesions(e) { if(!isTarget) { $(element).trigger("nonTargetToolModified", eventData); + return; } $(element).trigger("LesionToolModified", eventData); diff --git a/Packages/lesiontracker/components/lesionTableRow/lesionTableRow.html b/Packages/lesiontracker/components/lesionTableRow/lesionTableRow.html index 8d3e51071..3796d05b8 100644 --- a/Packages/lesiontracker/components/lesionTableRow/lesionTableRow.html +++ b/Packages/lesiontracker/components/lesionTableRow/lesionTableRow.html @@ -1,6 +1,6 @@