import "metex-demo.zs"; metex = new Metex; hour = 0; millisecond = 200; // top sizer must be create before main frame for callback access topsizer = view = date_label = null; // main frame window frame = wxframe("frame_handler"); // use timer to control animation frame = wxcast(frame); frame.size(900, 700); // panel in the main frame panel = frame.panel(); panel.bgcolor(255, 255, 255); panel.font(12); // layout with sizers topsizer = panel.sizer("verbox"); // three panels sizer1 = topsizer.sizer("verbox", "aligncenter", 12); sizer2 = topsizer.sizer("herbox", "expand", 60); sizer3 = topsizer.sizer("verbox", "aligncenter", 10); // panel-1: title and date-time label label = panel.statictext("\nMETEX 表示システム ・ NCEP 再解析データ\n曾  継 業", 0); label.fgcolor(0, 0, 225); sizer1.add(label, "aligncenter"); label = panel.statictext("地球環境研究センター ・ 国立環境研究所\n", 0); label.font(10); label.fgcolor(0, 0, 225); sizer1.add(label, "aligncenter"); // panel-2: three sub panels sizer21 = sizer2.sizer("verbox", "aligncenter", 12); sizer22 = sizer2.sizer("herbox", "expand", 60); sizer23 = sizer2.sizer("verbox", "aligncenter", 15); // latitude and longitude control sizer = sizer21.sizer("herbox", "aligncenter"); label = panel.statictext("緯\n度"); sizer.add(label, "aligncenter"); sizer.add(10, 10); lat_slider = panel.slider("right", -90, 90, 30); lat_slider.push("slider_handler", "mouse"); sizer.add(lat_slider, "aligncenter"); sizer21.add(10, 20); lon_slider = panel.slider("top", 0, 360, 130); lon_slider.push("slider_handler", "mouse"); sizer21.add(10, 10); sizer21.add(lon_slider, "aligncenter"); label = panel.statictext("経度"); sizer21.add(label, "aligncenter"); sizer21.add(10, 50); button = panel.button("一時停止"); button.push("pause_handler", "mouse"); sizer21.add(button, "aligncenter"); sizer21.add(10, 10); button = panel.button(" スタート "); button.push("resume_handler", "mouse"); sizer21.add(button, "aligncenter"); // graph view window view = panel.panel(); view.bgcolor(0, 0, 0); sizer22.add(view, "expand", 60); // options and date control opt_wind = panel.radiobutton("風向ベクトル", true); opt_wind.push("option_handler", "mouse"); sizer23.add(opt_wind, "aligncenter"); sizer23.add(10, 10); opt_traj = panel.radiobutton("後方流跡線 "); opt_traj.push("option_handler", "mouse"); sizer23.add(opt_traj, "aligncenter"); label = panel.statictext("(5日前迄)"); sizer23.add(label, "aligncenter"); sizer23.add(10, 50); sizer = sizer23.sizer("herbox", "aligncenter"); year_slider = panel.slider("left", 1990, 2005, 2000); year_slider.push("slider_handler", "mouse"); sizer.add(year_slider, "aligncenter"); sizer.add(10, 10); label = panel.statictext("年"); sizer.add(label, "aligncenter"); sizer.add(10, 10); sizer23.add(10, 20); sizer = sizer23.sizer("herbox", "aligncenter"); month_slider = panel.slider("left", 1, 12, 1); month_slider.push("slider_handler", "mouse"); sizer.add(month_slider, "aligncenter"); sizer.add(10, 10); label = panel.statictext("月"); sizer.add(label, "aligncenter"); sizer.add(10, 10); sizer23.add(10, 20); sizer = sizer23.sizer("herbox", "aligncenter"); day_slider = panel.slider("left", 1, 31, 1); day_slider.push("slider_handler", "mouse"); sizer.add(day_slider, "aligncenter"); sizer.add(10, 10); label = panel.statictext("日"); sizer.add(label, "aligncenter"); sizer.add(10, 10); // panel-3: longitude control sizer3.add(10, 20); date_label = panel.statictext(" 2000年1月1日 0時 ", 0); sizer3.add(date_label, "aligncenter"); // start the timer for realtime animation //wxtimer(millisecond); // callback functions function frame_handler(event, p1, p2) { try { if (event == "timer") { wxtimer(0); metex_update(); wxtimer(millisecond); return; } if (event == "size") { if (!isnull(topsizer)) { topsizer.update(); } return; } } catch (error) { wxtimer(0); wxmsg(error); } } function slider_handler(event, p1, p2, p3, p4, p5) { try { if (event == 1) { wxtimer(0); return; } } catch (error) { wxtimer(0); wxmsg(error); } } function pause_handler(event, p1, p2, p3, p4, p5) { try { if (event == 1) { wxtimer(0); return; } } catch (error) { wxtimer(0); wxmsg(error); } } function resume_handler(event, p1, p2, p3, p4, p5) { try { if (event == 2) { wxtimer(millisecond); return; } } catch (error) { wxtimer(0); wxmsg(error); } } function option_handler(event, x, y, ctrl, shift, alt) { try { if (event == 2) { if (opt_wind.get() == true) { opt_wind.set(false); opt_traj.set(true); } else { opt_wind.set(true); opt_traj.set(false); } } } catch (error) { wxtimer(0); wxmsg(error); } } function metex_update() { if (isnull(view)) return; [width, height] = view.size(); if (width < 100 || height < 100) return; metex.setView(width, height, lon_slider.get(), lat_slider.get()); jul = cal2jul(year_slider.get(), month_slider.get(), day_slider.get(), hour+6); if (jul < metex.julian1) jul = metex.julian1; if (jul > metex.julian2) jul = metex.julian1; cal = jul2cal(jul); if (opt_wind.get() != 0) { metex.windfield(cal.year, cal.month, cal.day, cal.hour); } else { metex.trajectory(cal.year, cal.month, cal.day, cal.hour); } hwnd = view.hwnd(); metex.render.towindow(hwnd); year_slider.set(cal.year); month_slider.set(cal.month); day_slider.set(cal.day); global:hour = cal.hour; date_label.set(""+cal.year+"年"+cal.month+"月"+cal.day+"日 "+cal.hour+"時"); }