2 //フォームから入力された顕微鏡のIPアドレス、ポート番号、メーカー、顕微鏡名を記憶
3 function UserSetting(){
4 var ipAddress = document.getElementById("ip_address").value;
5 var port_number = document.getElementById("port_number").value;
6 var manufacturer = document.getElementById("manufacturer").value;
7 var em_name = document.getElementById("em_name").value;
8 //console.log(ipAddress+","+port_number+","+manufacturer+","+em_name);
15 ajax = new XMLHttpRequest();
22 //URLからパラメーターを取得 => URLの引数からパラメータをキーとデータに分けたオブジェクト
23 function GetUrlElement(){
24 var argument = new Object();
25 var key_data = location.search.substring(1).split('&');//頭に?がつくから2文字目から文字列を扱う
26 for(var i=0; i<key_data.length; i++) {
27 var value = key_data[i].split('=');
28 argument[value[0]] = value[1];//value[0]->key, value[1]->data
31 GetUrlElementInstance: function() {
37 //URLのメーカーまでの生成 =>URLの頭 ex) http://192.168.4.146:9090/fei/
38 function MakeUrlHead(){
39 var userSetting = new GetUrlElement();
40 var urlElement = userSetting.GetUrlElementInstance();
42 var urlHead = "http://";
43 urlHead += urlElement['sendIpAddress'];
45 urlHead += urlElement['sendPortNumber'];
47 urlHead += urlElement['sendManufacturer'];
60 URL:http://localhost:9090/fei/get
61 返り値:{"x":0,"y":1,"z":1,"a":1,"spotSizeIndex":0,"MagIndex":0}
64 var url = MakeUrlHead();
67 var on_off = document.getElementsByName("all_params_switch");//返り値は配列
71 if(on_off[0].checked){
72 console.log("on(allparams)");
75 ajax.open('GET', url);
78 ajax.addEventListener('readystatechange', function(){
79 if(ajax.readyState === 4 && ajax.status === 200){
80 console.log(ajax.responseText);
85 console.log("off(allparams)");
87 var show_url = document.getElementById("all_params_url");
88 show_url.innerHTML = url;
90 var show_return = document.getElementById("all_params_return");
91 show_return.innerHTML = "...";
98 var movex = document.getElementById("movex").value;
99 var movey = document.getElementById("movey").value;
100 var movez = document.getElementById("movez").value;
102 var on_off = document.getElementsByName("move_stage_switch");
106 # /:emname/set/stagea
107 parameters x, y, z, a
110 http://localhost:9090/fei/set/stagea?x=1&&y=0&&z=2&&a=0
113 {"x”:"1","y”:"0","z”:"2","a”:"0"}
116 var url = MakeUrlHead();
120 //url += encodeURIComponent(movex);
123 //url += encodeURIComponent(movey);
126 //url += encodeURIComponent(movez);
129 //url += encodeURIComponent(movez);
131 if(on_off[0].checked){
132 console.log("on(setStage)");
134 var ajax = getAjax();
135 ajax.open('GET', url);
138 ajax.addEventListener('readystatechange', function(){
139 if(ajax.readyState === 4 && ajax.status === 200){
140 console.log(ajax.responseText);
144 console.log("off(setStage)");
146 var show_url = document.getElementById("move_stage_url");
147 show_url.innerHTML = url;
149 var show_return = document.getElementById("move_stage_return");
150 show_return.innerHTML = "...";
156 function ClickMove(direction){
158 var movingDistance = document.getElementById('movingDistance').value;
160 var movex = document.getElementById("movex").value;
161 var movey = document.getElementById("movey").value;
162 var movez = document.getElementById("movez").value;
168 value = parseInt(movex) + parseInt(movingDistance);
169 document.getElementById("movex").value = value;
173 value = parseInt(movex) - parseInt(movingDistance);
174 document.getElementById("movex").value = value;
178 value = parseInt(movey) + parseInt(movingDistance);
179 document.getElementById("movey").value = value;
183 value = parseInt(movey) - parseInt(movingDistance);
184 document.getElementById("movey").value = value;
189 setStage();//通信部を内包したステージ移動の関数を呼び出す
193 var on_off = document.getElementsByName("move_stage_switch");
195 var url = MakeUrlHead();
199 //url += encodeURIComponent(movex);
202 //url += encodeURIComponent(movey);
205 //url += encodeURIComponent(movez);
208 //url += encodeURIComponent(movez);
210 if(on_off[0].checked){
211 console.log("on(ClickMove)");
213 var ajax = getAjax();
214 ajax.open('GET', url);
217 ajax.addEventListener('readystatechange', function(){
218 if(ajax.readyState === 4 && ajax.status === 200){
219 console.log(ajax.responseText);
224 console.log("off(ClickMove)");
226 var show_url = document.getElementById("move_stage_url");
227 show_url.innerHTML = url;
229 var show_return = document.getElementById("move_stage_return");
230 show_return.innerHTML = "...";
235 function setSpotsize(){
239 # /:emname/set/spotsizea
243 http://localhost:9090/fei/set/spotsizea?sps=3
246 {"spotSizeIndex":"3"}
249 # /:emname/set/spotsizer
253 http://localhost:9090/fei/set/spotsizer?sps=3
256 {"spotSizeIndex":"3"}
259 var on_off = document.getElementsByName("spotsize_switch");
260 var spotsize = document.getElementById("Spotsize").value;
262 var url = MakeUrlHead();
263 url += "set/spotsizea";
267 if(on_off[0].checked){
268 console.log("on(setSpotsize)");
270 var ajax = getAjax();
271 ajax.open('GET', url);
274 ajax.addEventListener('readystatechange', function(){
275 if(ajax.readyState === 4 && ajax.status === 200){
276 console.log(ajax.responseText);
280 console.log("off(setStage)");
282 var show_url = document.getElementById("spotsize_url");
283 show_url.innerHTML = url;
285 var show_return = document.getElementById("spotsize_return");
286 show_return.innerHTML = "...";
291 function setMagnificationA(){
294 # /:emname/set/magnificationa
298 http://localhost:9090/fei/set/magnificationa?mag=1
303 var on_off = document.getElementsByName("magnification_abs_switch");
304 var mag = document.getElementById("magnificationa").value;
306 var url = MakeUrlHead();
307 url += "set/magnificationa";
311 if(on_off[0].checked){
312 console.log("on(setMagnificationA)");
314 var ajax = getAjax();
315 ajax.open('GET', url);
318 ajax.addEventListener('readystatechange', function(){
319 if(ajax.readyState === 4 && ajax.status === 200){
320 console.log(ajax.responseText);
324 console.log("off(setMagnificationA)");
326 var show_url = document.getElementById("magnification_abs_url");
327 show_url.innerHTML = url;
329 var show_return = document.getElementById("magnification_abs_return");
330 show_return.innerHTML = "...";
334 function setMagnificationR(){
337 # /:emname/set/magnificationr
341 http://localhost:9090/fei/set/magnificationr?mag=1
346 var on_off = document.getElementsByName("magnification_rel_switch");
347 var mag = document.getElementById("magnificationr").value;
349 var url = MakeUrlHead();
350 url += "set/magnificationr";
354 if(on_off[0].checked){
355 console.log("on(setMagnificationR)");
357 var ajax = getAjax();
358 ajax.open('GET', url);
361 ajax.addEventListener('readystatechange', function(){
362 if(ajax.readyState === 4 && ajax.status === 200){
363 console.log(ajax.responseText);
367 console.log("off(setMagnificationR)");
369 var show_url = document.getElementById("magnification_rel_url");
370 show_url.innerHTML = url;
372 var show_return = document.getElementById("magnification_rel_return");
373 show_return.innerHTML = "...";
380 # /:emname/set/defocusr
384 http://localhost:9090/fei/set/defocusr?defocus=1
390 var on_off = document.getElementsByName("focus_rel_switch");
391 var defocus = document.getElementById("focusr").value;
393 var url = MakeUrlHead();
394 url += "set/defocusr";
398 if(on_off[0].checked){
399 console.log("on(defocus)");
401 var ajax = getAjax();
402 ajax.open('GET', url);
405 ajax.addEventListener('readystatechange', function(){
406 if(ajax.readyState === 4 && ajax.status === 200){
407 console.log(ajax.responseText);
411 console.log("off(defocus)");
413 var show_url = document.getElementById("focus_rel_url");
414 show_url.innerHTML = url;
416 var show_return = document.getElementById("focus_rel_return");
417 show_return.innerHTML = "...";
421 function resetFocus(){
424 # /:emname/set/reset_defocus
428 http://localhost:9090/fei/set/reset_defocus
434 var on_off = document.getElementsByName("focus_reset_switch");
436 var url = MakeUrlHead();
437 url += "set/reset_defocus";
439 if(on_off[0].checked){
440 console.log("on(resetFocus)");
442 var ajax = getAjax();
443 ajax.open('GET', url);
446 ajax.addEventListener('readystatechange', function(){
447 if(ajax.readyState === 4 && ajax.status === 200){
448 console.log(ajax.responseText);
452 console.log("off(resetFocus)");
454 var show_url = document.getElementById("focus_reset_url");
455 show_url.innerHTML = url;
457 var show_return = document.getElementById("focus_reset_return");
458 show_return.innerHTML = "...";
462 function settingCam(){
464 # 撮影条件の設定(ビニング, 露光時間, 画像サイズ)
465 # /:emname/set/acq_init
466 parameters bng, exp, size
469 http://localhost:9090/fei/set/acq_init?bng=2&&exp=0.25&&size=0
472 露光時間 :exp 1:0.25:0.07(推奨)
473 画像サイズ:size 0, 1, 2 (0:full,1:half,2:quarter)
476 var on_off = document.getElementsByName("set_condition_switch");
477 var bng = document.getElementById("binning").value;
478 var exp = document.getElementById("exptime").value;
479 var size = document.getElementById("image_size").value;
481 var url = MakeUrlHead();
482 url += "set/acq_init";
490 if(on_off[0].checked){
491 console.log("on(settingCam)");
493 var ajax = getAjax();
494 ajax.open('GET', url);
497 ajax.addEventListener('readystatechange', function(){
498 if(ajax.readyState === 4 && ajax.status === 200){
499 console.log(ajax.responseText);
503 console.log("off(settingCam)");
505 var show_url = document.getElementById("set_condition_url");
506 show_url.innerHTML = url;
508 var show_return = document.getElementById("set_condition_return");
509 show_return.innerHTML = "...";
518 {"type":"connection", "data":"open"}
521 {"type":"img", "data":画像の配列}
526 {"type":"req", "data":"img"}
529 function connectWebSocket(){
530 var button_value = document.getElementById("ws_button");
532 var userSetting = new GetUrlElement();
533 var urlElement = userSetting.GetUrlElementInstance();
535 if(button_value.value == "close"){
537 console.log('closed');
538 //document.getElementById("wsConnectBtn").value = "websocket start";
539 button_value.value = "close";
542 button_value.value = "start";
543 ws = new WebSocket("ws://"+urlElement['sendIpAddress']+":3001");
544 ws.onopen = function(){
545 console.log('websocket connected');
548 //document.getElementById("wsConnectBtn").value = "websocket close";
549 ws.onmessage = function(ture){
550 data = JSON.parse(ture.data);//parseでオブジェクトに変換
551 console.log('server:' + data["type"]);
552 switch(data["type"]){
560 ws.send('{"type":"req", "data":"img"}');
562 drawMycrograph(data.data);
569 switch(toggleSwitch){
581 //URLを投げるスイッチ? vem docにはないが、開発段階のwitsに存在 (そのまま移植)
582 function connectApi(){
584 var url = MakeUrlHead();
587 var button = document.getElementById("api_button");
588 if(button.value == "close"){//closeする処理分岐
589 var ajax = getAjax();
590 ajax.open('GET', url);
593 ajax.addEventListener('readystatechange', function(){
594 if(ajax.readyState === 4 && ajax.status === 200){
595 console.log(ajax.responseText);
598 button.value = "start";
600 var ajax = getAjax();
601 ajax.open('GET', url);
604 ajax.addEventListener('readystatechange', function(){
605 if(ajax.readyState === 4 && ajax.status === 200){
606 console.log(ajax.responseText);
612 switch(toggleSwitch){
619 url:"http://" +UrlElement['sendIpAddress']+
620 ":"+UrlElement['sendPortNumber']+"/"+UrlElement['sendManufacturer']+
622 success: function(data){
623 console.log(data);//string型
626 document.getElementById("apiConnectBtn").value = "API close";
634 url:"http://" +UrlElement['sendIpAddress']+
635 ":"+UrlElement['sendPortNumber']+"/"+UrlElement['sendManufacturer']+
637 success: function(data){
638 console.log(data);//string型
641 document.getElementById("apiConnectBtn").value = "API start";
649 function takePhoto(){
655 http://localhost:9090/fei/acq
661 var on_off = document.getElementsByName("capture_switch");
663 var url = MakeUrlHead();
666 if(on_off[0].checked){
667 console.log("on(settingCam)");
669 var ajax = getAjax();
670 ajax.open('GET', url);
673 ajax.addEventListener('readystatechange', function(){
674 if(ajax.readyState === 4 && ajax.status === 200){
675 console.log(ajax.responseText);
679 console.log("off(settingCam)");
681 var show_url = document.getElementById("capture_url");
682 show_url.innerHTML = url;
684 var show_return = document.getElementById("capture_return");
685 show_return.innerHTML = "...";
690 function drawMycrograph(ddata){
691 var canvas = document.getElementById("em_capture");
695 data = JSON.parse(ddata);
697 // context.scale(0.5,0.5);
698 if(!canvas || !canvas.getContext){
701 else if(canvas.getContext){
702 context=canvas.getContext('2d')
705 length = data.length;
707 var imgData = context.createImageData(length,length);
709 for (var i=0;i<length;i++){
710 for (var j=0;j<length;j++){
711 var n = j*4+i*length*4;
712 var pixel = data[i][j];
713 imgData.data[n] = pixel;
714 imgData.data[n+1] = pixel;
715 imgData.data[n+2] = pixel;
716 imgData.data[n+3] = 255;
719 context.putImageData(imgData, 0, 0);