add simulation's setting funcion
parent
14640b9bb3
commit
7999cc07a1
|
@ -59,6 +59,12 @@ app.py ----服务器的主程序
|
||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
|
||||||
|
* 2021年2月9号,前端更新
|
||||||
|
|
||||||
|
* 发现bug: 当schematic中没有组件时,spice的parse函数抛出错误
|
||||||
|
* 待解决:如何将spice网表和simulation同时传入服务器
|
||||||
|
* 新增:仿真的参数设置
|
||||||
|
* ![avatar](./doc/schematic6.png)
|
||||||
* 2021年2月8号,前端更新
|
* 2021年2月8号,前端更新
|
||||||
|
|
||||||
* 新增在弹出窗口里嵌入bokehjs代码的功能
|
* 新增在弹出窗口里嵌入bokehjs代码的功能
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 98 KiB |
|
@ -0,0 +1,52 @@
|
||||||
|
|
||||||
|
function openMode(evt, tabMode) {
|
||||||
|
var i, tabcontent, tablinks;
|
||||||
|
tabcontent = document.getElementsByClassName("tabcontent");
|
||||||
|
for (i = 0; i < tabcontent.length; i++) {
|
||||||
|
tabcontent[i].style.display = "none";
|
||||||
|
}
|
||||||
|
tablinks = document.getElementsByClassName("tablinks");
|
||||||
|
for (i = 0; i < tablinks.length; i++) {
|
||||||
|
tablinks[i].className = tablinks[i].className.replace(" active", "");
|
||||||
|
}
|
||||||
|
document.getElementById(tabMode).style.display = "block";
|
||||||
|
evt.currentTarget.className += " active";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
function Simulation(sim_type){
|
||||||
|
|
||||||
|
var properties = [];
|
||||||
|
var sel = $("#"+sim_type+" input");
|
||||||
|
|
||||||
|
sel.each(function(){
|
||||||
|
var new_element = {};
|
||||||
|
var n = $(this)[0].name;
|
||||||
|
var v = $(this)[0].value;
|
||||||
|
new_element[n] = v ;
|
||||||
|
properties.push(new_element);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var data = new Object();
|
||||||
|
data["type"] = sim_type;
|
||||||
|
data["properties"] = properties;
|
||||||
|
// data['spice'] = spice;
|
||||||
|
// alert(spice);
|
||||||
|
|
||||||
|
// for(var i=0; i<properties.length; i++){
|
||||||
|
// var key = Object.keys(properties[i])[0];
|
||||||
|
// var val = Object.values(properties[i])[0];
|
||||||
|
// alert(key + " "+ val);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// $.ajax({
|
||||||
|
// type: 'POST',
|
||||||
|
// url: "/simulation",
|
||||||
|
// data: data,
|
||||||
|
// success: function (response) {
|
||||||
|
// alert(response);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
}
|
|
@ -15,6 +15,8 @@
|
||||||
<!-- Loads and initializes the library -->
|
<!-- Loads and initializes the library -->
|
||||||
<script type="text/javascript" src="static/schematic/src/js/mxClient.js"></script>
|
<script type="text/javascript" src="static/schematic/src/js/mxClient.js"></script>
|
||||||
|
|
||||||
|
<link href="static/schematic/css/tab.css" rel="stylesheet" type="text/css"/>
|
||||||
|
|
||||||
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-2.2.3.min.js"></script>
|
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-2.2.3.min.js"></script>
|
||||||
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.2.3.min.js"></script>
|
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.2.3.min.js"></script>
|
||||||
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.2.3.min.js"></script>
|
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.2.3.min.js"></script>
|
||||||
|
@ -22,6 +24,8 @@
|
||||||
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-api-2.2.3.min.js"></script>
|
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-api-2.2.3.min.js"></script>
|
||||||
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
|
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Example code -->
|
<!-- Example code -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
// Program starts here. Creates a sample graph in the
|
// Program starts here. Creates a sample graph in the
|
||||||
|
@ -718,6 +722,17 @@ function ExtractSpice_2(circuit){
|
||||||
return spice;
|
return spice;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function get_spice(graph){
|
||||||
|
|
||||||
|
var node = ParseSpice(graph.getModel());
|
||||||
|
var circuit = NormalizeXML(node);
|
||||||
|
let spice = ExtractSpice_2(circuit);
|
||||||
|
return spice;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
@ -1119,7 +1134,106 @@ function showOutline(graph)
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
document.body.appendChild(mxUtils.button('wnd test', function()
|
document.body.appendChild(mxUtils.button('simulator', function(){
|
||||||
|
|
||||||
|
// let spice = get_spice(graph);
|
||||||
|
|
||||||
|
var frame = document.createElement('div');
|
||||||
|
frame.setAttribute('id','bokeh_02');
|
||||||
|
|
||||||
|
var div_tab = document.createElement('div');
|
||||||
|
div_tab.setAttribute('class','tab');
|
||||||
|
|
||||||
|
let sim_mode = ['transient', 'dc', 'ac'];
|
||||||
|
|
||||||
|
let sim_mode_content = {
|
||||||
|
'transient': {
|
||||||
|
"key" :[ 'step_time', 'end_time', 'start_time','max_time','use_initial_condition'],
|
||||||
|
"value" :[ '', '', '0', 'None', 'False']
|
||||||
|
},
|
||||||
|
'dc': {
|
||||||
|
"key" :[ "src","start","stop","step"],
|
||||||
|
"value" :[ "","","",""]
|
||||||
|
},
|
||||||
|
'ac': {
|
||||||
|
"key" :[ "variation", "number_of_points", "start_frequency", "stop_frequency"],
|
||||||
|
"value" :[ "","","",""]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for(var i=0; i<sim_mode.length; i++){
|
||||||
|
var div_mode = document.createElement('button');
|
||||||
|
div_mode.setAttribute('class',"tablinks");
|
||||||
|
div_mode.setAttribute('onclick',"openMode(event, '"+ sim_mode[i] +"')");
|
||||||
|
|
||||||
|
div_mode.innerHTML = sim_mode[i] ;
|
||||||
|
div_tab.appendChild(div_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
frame.appendChild(div_tab);
|
||||||
|
|
||||||
|
for(var i=0; i<sim_mode.length; i++){
|
||||||
|
var div_mode = document.createElement('div');
|
||||||
|
div_mode.setAttribute('class',"tabcontent");
|
||||||
|
div_mode.setAttribute('id',sim_mode[i]);
|
||||||
|
|
||||||
|
var div_h3 = document.createElement('h3');
|
||||||
|
div_h3.innerHTML = sim_mode[i];
|
||||||
|
div_mode.appendChild(div_h3);
|
||||||
|
|
||||||
|
var table = document.createElement('table');
|
||||||
|
|
||||||
|
var the_mode = sim_mode_content[sim_mode[i]];
|
||||||
|
for(var j=0; j<the_mode['key'].length; j++ ){
|
||||||
|
var form_div = document.createElement('tr');
|
||||||
|
|
||||||
|
var td_name = document.createElement('td');
|
||||||
|
td_name.innerHTML = the_mode['key'][j] ;
|
||||||
|
form_div.appendChild(td_name);
|
||||||
|
|
||||||
|
var td_input = document.createElement('td');
|
||||||
|
|
||||||
|
var input = document.createElement('input');
|
||||||
|
input.setAttribute('name', the_mode['key'][j]);
|
||||||
|
input.setAttribute("class","simulator_input")
|
||||||
|
input.setAttribute('type', "text");
|
||||||
|
input.setAttribute('value', the_mode['value'][j] );
|
||||||
|
td_input.appendChild(input);
|
||||||
|
|
||||||
|
form_div .appendChild(td_input);
|
||||||
|
|
||||||
|
table.appendChild(form_div);
|
||||||
|
}
|
||||||
|
var confirm = document.createElement('button');
|
||||||
|
confirm.setAttribute("type","submit");
|
||||||
|
confirm.setAttribute('onclick',"Simulation('"+sim_mode[i] +"')");
|
||||||
|
confirm.innerHTML = "Confirm";
|
||||||
|
|
||||||
|
table.appendChild(confirm);
|
||||||
|
|
||||||
|
div_mode.appendChild(table);
|
||||||
|
|
||||||
|
frame.appendChild(div_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
var x = document.createElement('script');
|
||||||
|
x.setAttribute('src','static/spice/bokeh_02.js');
|
||||||
|
|
||||||
|
frame.appendChild(x);
|
||||||
|
|
||||||
|
var w = document.body.clientWidth;
|
||||||
|
var h = (document.body.clientHeight || document.documentElement.clientHeight);
|
||||||
|
var wnd = new mxWindow('Title', frame, (w-200)/2, (h-200)/3, 400, 400, true, true);
|
||||||
|
|
||||||
|
wnd.setVisible(true);
|
||||||
|
wnd.setScrollable(true);
|
||||||
|
wnd.setResizable(true);
|
||||||
|
wnd.setVisible(true);
|
||||||
|
wnd.setClosable(true);
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
|
document.body.appendChild(mxUtils.button('show result', function()
|
||||||
{
|
{
|
||||||
|
|
||||||
var frame = document.createElement('div');
|
var frame = document.createElement('div');
|
||||||
|
@ -1142,80 +1256,7 @@ function showOutline(graph)
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Shows XML for debugging the actual model
|
|
||||||
// document.body.appendChild(mxUtils.button('Show XML', function()
|
|
||||||
// {
|
|
||||||
// var encoder = new mxCodec();
|
|
||||||
// var node = encoder.encode(graph.getModel());
|
|
||||||
// mxUtils.popup(mxUtils.getPrettyXml(node), true);
|
|
||||||
// }));
|
|
||||||
|
|
||||||
// // Extract SPICE model
|
|
||||||
// document.body.appendChild(mxUtils.button('Show Info', function()
|
|
||||||
// {
|
|
||||||
// let content = '';
|
|
||||||
// var node = ParseSpice(graph.getModel());
|
|
||||||
// for(var i=0; i<node['elements'].length; i++){
|
|
||||||
// content += "id " + node['elements'][i]['id'] + '\t';
|
|
||||||
// content += "Name " + node['elements'][i]['value']['Name'] + '\t';
|
|
||||||
// content += "shape " + node['elements'][i]['style']['shape'] + '\t';
|
|
||||||
// if("Value" in node['elements'][i]['value']){
|
|
||||||
// content += "Value " + node['elements'][i]['value']['Value'] + '\t';
|
|
||||||
// }
|
|
||||||
// if("Length" in node['elements'][i]['value']){
|
|
||||||
// content += "Length " + node['elements'][i]['value']['Length'] + '\t';
|
|
||||||
// }
|
|
||||||
// if("Width" in node['elements'][i]['value']){
|
|
||||||
// content += "Width " + node['elements'][i]['value']['Width'] + '\t';
|
|
||||||
// }
|
|
||||||
// content += "\n" ;
|
|
||||||
// };
|
|
||||||
|
|
||||||
// for(var i=0; i<node['wires'].length; i++){
|
|
||||||
// content += "id " + node['wires'][i]['id'] + '\t';
|
|
||||||
// content += "source " + node['wires'][i]['source'] + '\t';
|
|
||||||
// content += "sourcePort " + node['wires'][i]['style']['sourcePort'] +'\t';
|
|
||||||
// content += "target " + node['wires'][i]['target'] + '\t';
|
|
||||||
// content += "targetPort " ;
|
|
||||||
// if("targetPort" in node['wires'][i]['style']){
|
|
||||||
// content += node['wires'][i]['style']['targetPort'] + '\n';
|
|
||||||
// }
|
|
||||||
// else{
|
|
||||||
// content += "null" +'\n';
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
// mxUtils.popup(content, true);
|
|
||||||
// }));
|
|
||||||
|
|
||||||
|
|
||||||
// document.body.appendChild(mxUtils.button('Create toolbar entry from selection', function()
|
|
||||||
// {
|
|
||||||
// if (!graph.isSelectionEmpty())
|
|
||||||
// {
|
|
||||||
// // Creates a copy of the selection array to preserve its state
|
|
||||||
// var cells = graph.getSelectionCells();
|
|
||||||
// var bounds = graph.getView().getBounds(cells);
|
|
||||||
|
|
||||||
// // Function that is executed when the image is dropped on
|
|
||||||
// // the graph. The cell argument points to the cell under
|
|
||||||
// // the mousepointer if there is one.
|
|
||||||
// var funct = function(graph, evt, cell)
|
|
||||||
// {
|
|
||||||
// graph.stopEditing(false);
|
|
||||||
|
|
||||||
// var pt = graph.getPointForEvent(evt);
|
|
||||||
// var dx = pt.x - bounds.x;
|
|
||||||
// var dy = pt.y - bounds.y;
|
|
||||||
|
|
||||||
// graph.setSelectionCells(graph.importCells(cells, dx, dy, cell));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Creates the image which is used as the drag icon (preview)
|
|
||||||
// var img = toolbar.addMode(null, 'editors/images/outline.gif', funct);
|
|
||||||
// mxUtils.makeDraggable(img, graph, funct);
|
|
||||||
// }
|
|
||||||
// }));
|
|
||||||
|
|
||||||
// Wire-mode
|
// Wire-mode
|
||||||
var checkbox = document.createElement('input');
|
var checkbox = document.createElement('input');
|
||||||
|
|
Loading…
Reference in New Issue