ting.yin 4 éve
szülő
commit
c1b67f448d

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspected.jsp

@@ -204,7 +204,7 @@
             server: imageServer,
             flush: true,
             strict: false,
-            split: [${properties['slice.split.config']}]
+            split: [0,1]
         }).combine(picUrls, canvas, config, function () {
 
         })

+ 45 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/studentTrack.jsp

@@ -54,10 +54,54 @@
         }
 
         for (var i = 0; i < tags.length; i++) {
-            renderGroup(tags[i], images)
+            renderTags(tags[i], images)
         }
     }
+    function renderTags(group, images) {
+        var configs = group.config;
+        var tags = group.tags;
+        if (tags.length == 0) {
+            return;
+        }
 
+        var maxWidth = 0;
+        var totalHeight = 0;
+        // 计算评卷分组拼接图的总高度与最大宽度
+        for (var i = 0; i < configs.length; i++) {
+            var config = configs[i];
+            //直接使用整张裁切图
+                var image = images[config.i - 1];
+                if (image != undefined) {
+                    config.w = image.width;
+                    config.h = image.height;
+                }
+        }
+
+        // 遍历所有显示元素
+        for (var i = 0; i < tags.length; i++) {
+            var tag = tags[i];
+            // 计算显示元素在拼接图内的绝对位置
+            var left = tag.offsetX;
+            var top = tag.offsetY;
+            var start = 0;
+            for (var j = 0; j < configs.length; j++) {
+                var config = configs[j];
+                if (config.w > 0 && config.h > 0) {
+                    var image = images[config.i - 1];
+                    if (top <= (config.h + start) && image != undefined) {
+                        // 根据绝对高度判断显示元素是否落在当前拼接块
+                        ctx.font = "60px Arial";
+                        ctx.fillStyle = 'red';
+                        ctx.fillText(tag.content, Math.max(60, left + config.x + image.left), Math.max(60, top - start + config.y + image.top));
+                        break;
+                    } else {
+                        start += config.h;
+                    }
+                }
+            }
+        }
+    }
+    
     function renderGroup(group, images) {
         var configs = group.config;
         var tags = group.tags;

+ 8 - 1
stmms-web/src/main/webapp/static/mark-new/js/modules/specialTag.js

@@ -15,11 +15,18 @@ function SpecialTag(option) {
         this.task = undefined;
         this.reset();
     });
-    this.markControl.on('task.get.success', this, function (event, context, eventObject) {
+    this.markControl.on('task.load.finish', this, function (event, context, eventObject) {
         this.task = context.task;
         if (this.task.tagList == undefined) {
             this.task.tagList = [];
         }
+        for (var i = 0; i < this.task.tagList.length; i++) {
+            this.markControl.trigger('mark.tag.show', {
+                content: this.task.tagList[i].tagName,
+                positionX: this.task.tagList[i].positionX,
+                positionY: this.task.tagList[i].positionY
+            });
+        }
         this.markControl.trigger('special.tag.disable');
     });
     this.markControl.on('task.get.none', this, function (event, context, eventObject) {

+ 8 - 7
stmms-web/src/main/webapp/static/mark-track/js/modules/single-image-view.js

@@ -59,17 +59,18 @@ SingleImageView.prototype.init = function () {
 
     $(this.canvas).click(function (event) {
         if (self.task != undefined) {
+        	let scale = self.image.width / self.canvas.width
             let left = event.pageX - $(self.canvas).offset().left
             let top = event.pageY - $(self.canvas).offset().top
-            let offsetX = left
-            let offsetY = top
+            let offsetX = left*scale
+            let offsetY = top*scale
             let offsetIndex = 1
             for (let i = 0; i < self.task.imageLayout.length; i++) {
                 let layout = self.task.imageLayout[i]
-                if (top > layout.top && top <= layout.bottom) {
+                if (offsetY > layout.top && offsetY <= layout.bottom) {
                     offsetIndex = layout.config.i
-                    offsetX = left / layout.ratio + layout.config.x
-                    offsetY = (top - layout.top) / layout.ratio + layout.config.y
+                    offsetX = offsetX / layout.ratio + layout.config.x
+                    offsetY = (offsetY - layout.top) / layout.ratio + layout.config.y
                     break
                 }
             }
@@ -77,8 +78,8 @@ SingleImageView.prototype.init = function () {
                 positionX: (left / $(self.canvas).width()).toFixed(3),
                 positionY: (top / $(self.canvas).height()).toFixed(3),
                 offsetIndex: offsetIndex,
-                offsetX: offsetX,
-                offsetY: offsetY
+                offsetX: parseInt(offsetX),
+                offsetY: parseInt(offsetY)
             });
         }
     });