diff options
-rw-r--r-- | combined.js | 491 | ||||
-rw-r--r-- | data_structures_correct/INIMPL_f.js | 5 | ||||
-rw-r--r-- | data_structures_correct/IN_f.js | 6 | ||||
-rw-r--r-- | data_structures_correct/OUTIMPL_f.js | 5 | ||||
-rw-r--r-- | data_structures_correct/OUT_f.js | 5 | ||||
-rw-r--r-- | dependencies.js | 54 | ||||
-rw-r--r-- | images/flip.png | bin | 0 -> 540 bytes | |||
-rw-r--r-- | images/mirror.png | bin | 0 -> 581 bytes | |||
-rwxr-xr-x | index.html | 185 | ||||
-rw-r--r-- | orientation.js | 450 |
10 files changed, 1141 insertions, 60 deletions
diff --git a/combined.js b/combined.js index 5e0c942..ccecc33 100644 --- a/combined.js +++ b/combined.js @@ -6161,7 +6161,10 @@ function INIMPL_f() { var gr_i = new ScilabString(["xstringb(orig(1),orig(2),"INIMPL_f",sz(1),sz(2));"]);
this.x = new standard_define(new ScilabDouble([1, 1]), model, exprs, gr_i);
this.x.graphics.out_implicit = new ScilabString(["I"]);
- return new ImplicitInBlock(this.x);
+
+ this.implicitInBlock = new ImplicitInBlock(this.x);
+ this.displayParameter = [this.implicitInBlock.ordering];
+ return this.implicitInBlock;
}
INIMPL_f.prototype.details = function INIMPL_f() {
return this.x;
@@ -6366,7 +6369,11 @@ function IN_f () { var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"IN_f\",sz(1),sz(2));"]);
this.x = new standard_define(new ScilabDouble([1,1]),model,exprs,gr_i);
- return new ExplicitInBlock(this.x);
+
+ this.explicitInBlock = new ExplicitInBlock(this.x);
+ this.displayParameter = [this.explicitInBlock.ordering];
+ return this.explicitInBlock;
+
}
IN_f.prototype.details = function IN_f() {
@@ -6433,6 +6440,36 @@ function LOGBLK_f() { }
}
+function LOGIC() {
+
+ LOGIC.prototype.define = function LOGIC() {
+ this.mat = [[0],[0],[0],[1]];
+
+ var model = scicos_model();
+ model.sim = list(new ScilabString(["logic"]), new ScilabDouble([4]));
+ model.in = new ScilabDouble([1], [1]);
+ model.in2 = new ScilabDouble([1], [1]);
+ model.out = new ScilabDouble([1]);
+ model.out2 = new ScilabDouble([1]);
+ model.evtin = new ScilabDouble([1]);
+ model.intyp = new ScilabDouble([5, 5]);
+ model.outtyp = new ScilabDouble([5]);
+ model.opar = list(int8(...this.mat));
+ model.blocktype = new ScilabString(["c"]);
+ model.firing = new ScilabBoolean([false]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var exprs = new ScilabString([sci2exp(this.mat)], [sci2exp(0)]);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"LOGIC\",sz(1),sz(2));"]);
+ this.x = new standard_define(new ScilabDouble([2, 2]), model, exprs, gr_i);
+ return new BasicBlock(this.x);
+ }
+
+ LOGIC.prototype.details = function LOGIC() {
+ return this.x;
+ }
+}
function LOGICAL_OP() {
LOGICAL_OP.prototype.define = function LOGICAL_OP() {
@@ -7779,7 +7816,10 @@ function OUTIMPL_f() { var gr_i = new ScilabString(["xstringb(orig(1),orig(2),"OUTIMPL_f",sz(1),sz(2));"]);
this.x = new standard_define(new ScilabDouble([1, 1]), model, exprs, gr_i);
this.x.graphics.in_implicit = new ScilabString(["I"]);
- return new ImplicitOutBlock(this.x);
+
+ this.implicitOutBlock = new ImplicitOutBlock(this.x);
+ this.displayParameter = [this.implicitOutBlock.ordering];
+ return this.implicitOutBlock;
}
OUTIMPL_f.prototype.details = function OUTIMPL_f() {
return this.x;
@@ -7828,7 +7868,10 @@ function OUT_f () { var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"OUT_f\",sz(1),sz(2));"]);
this.x = new standard_define(new ScilabDouble([1,1]),model,exprs,gr_i);
this.x.graphics.style = new ScilabString(["OUT_f"]);
- return new ExplicitOutBlock(this.x);
+
+ this.explicitOutBlock = new ExplicitOutBlock(this.x);
+ this.displayParameter = [this.explicitOutBlock.ordering];
+ return this.explicitOutBlock;
}
OUT_f.prototype.details = function OUT_f() {
@@ -10462,6 +10505,90 @@ function SUM_f() { }
}
+function SUPER_f() {
+
+ SUPER_f.prototype.define = function SUPER_f() {
+ var scs = scicos_diagram();
+ scs.props.title = new ScilabString(["Super_Block"]);
+
+ var in1 = new IN_f().internal();
+ in1.graphics.orig = new ScilabDouble([40, 40]);
+ in1.graphics.sz = new ScilabDouble([20, 20]);
+ in1.graphics.flip = new ScilabBoolean([true]);
+ in1.graphics.pout = new ScilabDouble([0]);
+ in1.model.uid = new ScilabString([count]);
+ in1.doc = list(new ScilabString([count++]));
+
+ var out = new OUT_f().internal();
+ out.graphics.orig = new ScilabDouble([240, 40]);
+ out.graphics.sz = new ScilabDouble([20, 20]);
+ out.graphics.flip = new ScilabBoolean([true]);
+ out.graphics.pin = new ScilabDouble([0]);
+ out.model.outtyp = new ScilabDouble();
+ out.model.uid = new ScilabString([count]);
+ out.doc = list(new ScilabString([count++]));
+ scs.objs.push(in1);
+ scs.objs.push(out);
+
+ var model = scicos_model();
+ model.sim = new ScilabString(["super"]);
+ model.in = new ScilabDouble([1]);
+ model.out = new ScilabDouble([1]);
+ model.rpar = scs;
+ model.blocktype = new ScilabString(["h"]);
+ model.dep_ut = new ScilabBoolean([false, false]);
+
+ var gr_i = ["xstringb(orig(1),orig(2),\"SUPER_f\",sz(1),sz(2));"];
+ this.x = new standard_define(new ScilabDouble([2, 2]), model, new ScilabDouble(), gr_i);
+ return new SuperBlock(this.x);
+ }
+
+ SUPER_f.prototype.details = function SUPER_f() {
+ return this.x;
+ }
+}
+function Switch() {
+
+ Switch.prototype.define = function Switch() {
+ var model = scicos_model();
+
+ this.Ron = 0.01;
+ this.Roff = 1e5;
+ this.S = [["Ron"], ["Roff"]];
+
+ var scope = {
+ Ron: 0.01,
+ Roff: 1e5
+ }
+ this.Z = math.eval('[ Ron ; Roff ]', scope)._data;
+
+ model.sim = new ScilabString(["Switch"]);
+ model.blocktype = new ScilabString(["c"]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var mo = new modelica_function();
+ mo.model = model.sim;
+ mo.inputs = new ScilabString(["p"], ["inp"]);
+ mo.outputs = new ScilabString(["n"]);
+ mo.parameters = list(new ScilabString(...this.S), new ScilabDouble(...this.Z));
+ model.equations = mo;
+ model.in = new ScilabDouble(...ones(size(getData(mo.inputs), "*"), 1));
+ model.out = new ScilabDouble(...ones(size(getData(mo.outputs), "*"), 1));
+ model.rpar = new ScilabDouble(...this.Z);
+
+ var exprs = new ScilabString(...this.Z);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"Switch\",sz(1),sz(2));"]);
+ this.x = standard_define(new ScilabDouble([2, 2]), model, exprs, list(gr_i, new ScilabDouble(0)));
+ this.x.graphics.in_implicit = new ScilabString([["I"], ["E"]]);
+ this.x.graphics.out_implicit = new ScilabString(["I"]);
+ return new BasicBlock(this.x);
+ }
+
+ Switch.prototype.details = function Switch() {
+ this.x;
+ }
+}
function SWITCH2_m() {
SWITCH2_m.prototype.define = function SWITCH2_m() {
@@ -10709,3 +10836,359 @@ function TOWS_c() { return this.x;
}
}
+function TRASH_f() {
+
+ TRASH_f.prototype.define = function TRASH_f() {
+ this.in1 = -1;
+
+ var model = scicos_model();
+ model.sim = new ScilabString(["trash"]);
+ model.in = new ScilabDouble([this.in1]);
+ model.evtin = new ScilabDouble([1]);
+ model.blocktype = new ScilabString(["d"]);
+ model.dep_ut = new ScilabBoolean([false, false]);
+
+ var exprs = new ScilabString([" "]);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"TRASH_f\",sz(1),sz(2));"]);
+ this.x = new standard_define(new ScilabDouble([2, 2]), model, exprs, gr_i);
+ return new BasicBlock(this.x);
+ }
+
+ TRASH_f.prototype.details = function TRASH_f() {
+ return this.x;
+ }
+}
+function TrigFun() {
+
+ TrigFun.prototype.define = function TrigFun() {
+ var model = scicos_model();
+ model.sim = list(new ScilabString(["sin_blk"]), new ScilabDouble([4]));
+ model.in = new ScilabDouble([-1]);
+ model.out = new ScilabDouble([-1]);
+ model.blocktype = new ScilabString(["c"]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var exprs = new ScilabString(["sin"]);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"TrigFun\",sz(1),sz(2));"]);
+ this.x = new standard_define(new ScilabDouble([4, 2]), model, exprs, gr_i);
+ return new BasicBlock(this.x);
+ }
+
+ TrigFun.prototype.details = function TrigFun() {
+ return this.x;
+ }
+}
+function VanneReglante() {
+
+ VanneReglante.prototype.define = function VanneReglante() {
+ var model = scicos_model();
+ model.in = new ScilabDouble([1], [1]);
+ model.out = new ScilabDouble([1]);
+
+ this.Cvmax = 8005.42;
+ this.p_rho = 0;
+
+ model.rpar = new ScilabDouble([this.Cvmax], [this.p_rho]);
+ model.sim = new ScilabString(["VanneReglante"]);
+ model.blocktype = new ScilabString(["c"]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var mo = new modelica_function();
+ mo.model = new ScilabString(["VanneReglante"]);
+ mo.inputs = new ScilabString(["C1", "Ouv"]);
+ mo.outputs = new ScilabString(["C2"]);
+ mo.parameters = list(new ScilabString(["Cvmax"], ["p_rho"]), new ScilabDouble([this.Cvmax], [this.p_rho]));
+ model.equations = mo;
+ model.in = new ScilabDouble(...ones(size(getData(mo.inputs), "*"), 1));
+ model.out = new ScilabDouble(...ones(size(getData(mo.outputs), "*"), 1));
+
+ var exprs = new ScilabString([this.Cvmax], [this.p_rho]);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"VanneReglante\",sz(1),sz(2));"]);
+ this.x = standard_define([2, 2], model, exprs, list(gr_i, new ScilabDouble([0])));
+ this.x.graphics.in_implicit = new ScilabString(["I"], ["E"]);
+ this.x.graphics.out_implicit = new ScilabString(["I"]);
+ return new BasicBlock(this.x);
+ }
+
+ VanneReglante.prototype.details = function VanneReglante() {
+ return this.x;
+ }
+}
+function VariableResistor() {
+
+ VariableResistor.prototype.define = function VariableResistor() {
+ var model = scicos_model();
+ model.sim = new ScilabString(["VariableResistor"]);
+ model.blocktype = new ScilabString(["c"]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var mo = new modelica_function();
+ mo.model = new ScilabString(["VariableResistor"]);
+ mo.inputs = new ScilabString(["p", "R"]);
+ mo.outputs = new ScilabString(["n"]);
+ model.equations = mo;
+ model.in = new ScilabDouble(...ones(size(getData(mo.inputs), "*"), 1));
+ model.out = new ScilabDouble(...ones(size(getData(mo.outputs), "*"), 1));
+
+ var exprs = new ScilabDouble();
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"VariableResistor\",sz(1),sz(2));"]);;
+ this.x = standard_define([2, 2], model, exprs, list(gr_i, 0));
+ this.x.graphics.in_implicit = new ScilabString(["I", "E"]);
+ this.x.graphics.out_implicit = new ScilabString(["I"]);
+ return new BasicBlock(this.x);
+ }
+
+ VariableResistor.prototype.details = function VariableResistor() {
+ return this.x;
+ }
+}
+function VARIABLE_DELAY() {
+
+ VARIABLE_DELAY.prototype.define = function VARIABLE_DELAY() {
+ this.nin = 1;
+ this.T = 1;
+ this.init = 0;
+ this.N = 1024;
+
+ var model = scicos_model();
+ model.sim = list(new ScilabString(["variable_delay"]), new ScilabDouble([4]));
+ model.in = new ScilabDouble([this.nin], [1]);
+ model.out = new ScilabDouble([this.nin]);
+ model.rpar = new ScilabDouble([this.T, this.init]);
+ model.ipar = new ScilabDouble([this.N]);
+ model.blocktype = new ScilabString(["d"]);
+ model.dep_ut = new ScilabBoolean([false, false]);
+
+ var exprs = new ScilabString([this.T], [this.init], [this.N]);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"VARIABLE_DELAY\",sz(1),sz(2));"]);
+ this.x = new standard_define(new ScilabDouble([3, 2]), model, exprs, gr_i);
+ return new BasicBlock(this.x);
+ }
+
+ VARIABLE_DELAY.prototype.details = function VARIABLE_DELAY() {
+ return this.x;
+ }
+}
+function VirtualCLK0() {
+
+ VirtualCLK0.prototype.define = function VirtualCLK0() {
+ var model = scicos_model();
+ model.sim = new ScilabString(["vrtclk0"]);
+ model.evtin = new ScilabDouble([1]);
+ model.opar = list();
+ model.ipar = new ScilabDouble();
+ model.blocktype = new ScilabString(["d"]);
+ model.firing = new ScilabDouble([-1]);
+ model.dep_ut = new ScilabBoolean([false, false]);
+
+ var exprs = new ScilabDouble();
+ this.x = new standard_define(new ScilabDouble([2, 2]), model, exprs, new ScilabString([" "]));
+ return new BasicBlock(this.x);
+ }
+
+ VirtualCLK0.prototype.details = function VirtualCLK0() {
+ return this.x;
+ }
+
+}
+function VoltageSensor() {
+
+ VoltageSensor.prototype.define = function VoltageSensor() {
+ var model = scicos_model();
+ model.in = new ScilabDouble([1]);
+ model.out = new ScilabDouble([1], [, 1]);
+ model.sim = new ScilabString(["VoltageSensor"]);
+ model.blocktype = new ScilabString(["c"]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var mo = new modelica_function();
+ mo.model = new ScilabString(["VoltageSensor"]);
+ mo.inputs = new ScilabString(["p"]);
+ mo.outputs = new ScilabString(["n"], ["v"]);
+ model.equations = mo;
+
+ var exprs = new ScilabDouble();
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"VoltageSensor\",sz(1),sz(2));"]);;
+ this.x = standard_define([2, 2], model, exprs, list(gr_i, new ScilabDouble([0])));
+ this.x.graphics.in_implicit = new ScilabString(["I"]);
+ this.x.graphics.out_implicit = new ScilabString(["I"], ["E"]);
+ return new VoltageSensorBlock(this.x);
+ }
+
+ VoltageSensor.prototype.details = function VoltageSensor() {
+ return this.x;
+ }
+}
+function VsourceAC() {
+
+ VsourceAC.prototype.define = function VsourceAC() {
+ var model = scicos_model();
+ model.in = new ScilabDouble([1]);
+ model.out = new ScilabDouble([1]);
+
+ this.VA = 220;
+
+ this.FR = 50;
+ model.rpar = new ScilabDouble([this.VA], [this.FR]);
+ model.sim = new ScilabString(["VsourceAC"]);
+ model.blocktype = new ScilabString(["c"]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var mo = modelica_function();
+ mo.model = new ScilabString(["VsourceAC"]);
+ mo.inputs = new ScilabString(["p"]);
+ mo.outputs = new ScilabString(["n"]);
+ mo.parameters = list(new ScilabString(["VA"], ["f"]), list(new ScilabDouble([this.VA]), new ScilabDouble([this.FR])));
+ model.equations = mo;
+
+ var exprs = new ScilabString([this.VA], [this.FR]);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"VsourceAC\",sz(1),sz(2));"]);
+
+ this.x = standard_define([2, 2], model, exprs, list(gr_i, 0));
+ this.x.graphics.in_implicit = new ScilabString(["I"]);
+ this.x.graphics.out_implicit = new ScilabString(["I"]);
+
+ return new BasicBlock(this.x);
+ }
+
+ VsourceAC.prototype.details = function VsourceAC() {
+ return this.x;
+ }
+}
+function VVsourceAC() {
+
+ VVsourceAC.prototype.define = function VVsourceAC() {
+ var model = scicos_model();
+
+ model.in = new ScilabDouble([1], [1]);
+ model.out = new ScilabDouble([1]);
+
+ this.VA = 220;
+ this.FR = 50;
+
+ model.rpar = new ScilabDouble([this.FR]);
+ model.sim = new ScilabString(["VVsourceAC"]);
+ model.blocktype = new ScilabString(["c"]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var mo = modelica_function();
+ mo.model = new ScilabString(["VVsourceAC"]);
+ mo.inputs = new ScilabString(["p", "VA"]);
+ mo.outputs = new ScilabString(["n"]);
+ mo.parameters = list(new ScilabString(["f"]), list(new ScilabDouble([this.FR])));
+ model.equations = mo;
+
+ var exprs = new ScilabString([this.FR]);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"VVsourceAC\",sz(1),sz(2));"]);
+
+
+ this.x = standard_define([2, 2], model, exprs, list(gr_i, 0));
+ this.x.graphics.in_implicit = new ScilabString(["I", "E"]);
+ this.x.graphics.out_implicit = new ScilabString(["I"]);
+
+ return new BasicBlock(this.x);
+ }
+
+ VVsourceAC.prototype.details = function VVsourceAC() {
+ return this.x;
+ }
+}
+function WRITEAU_f() {
+
+ WRITEAU_f.prototype.define = function WRITEAU_f() {
+ this.in1 = 1;
+ this.nin = math.sum(this.in1);
+ this.frmt = "uc ";
+ this.fname = "/dev/audio";
+ this.swap = 0;
+ this.lunit = 0;
+ this.N = 2;
+
+ var model = scicos_model();
+ model.sim = list(new ScilabString(["writeau"]), new ScilabDouble([2]));
+ model.in = new ScilabDouble([this.in1]);
+ model.evtin = new ScilabDouble([1]);
+ model.dstate = new ScilabDouble([-1], [this.lunit], ...zeros((this.nin + 1) * this.N, 1));
+ model.ipar = new ScilabDouble([this.fname.length], ..._str2code(this.frmt), [this.N], [this.swap], ..._str2code(this.fname));
+ model.blocktype = new ScilabString(["d"]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var exprs = new ScilabString([this.N], [this.swap]);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"WRITEAU_f\",sz(1),sz(2));"]);
+ this.x = new standard_define(new ScilabDouble([4, 2]), model, exprs, gr_i);
+ return new BasicBlock(this.x);
+ }
+
+ WRITEAU_f.prototype.details = function WRITEAU_f() {
+ return this.x;
+ }
+}
+function WRITEC_f() {
+
+ WRITEC_f.prototype.define = function WRITEC_f() {
+ this.in = 1;
+ this.nin = math.sum(this.in);
+ this.frmt = "c ";
+ this.fname = "foo";
+ this.swap = 0;
+ this.lunit = 0;
+ this.N = 2;
+
+ var model = scicos_model();
+ model.sim = list(new ScilabString(["writec"]), new ScilabDouble([2]));
+ model.in = new ScilabDouble([this.in]);
+ model.evtin = new ScilabDouble([1]);
+ model.dstate = new ScilabDouble([-1], [this.lunit], ...zeros((this.nin + 1) * this.N, 1));
+ model.ipar = new ScilabDouble([this.fname.length], ..._str2code(this.frmt), [this.N], [this.swap], ..._str2code(this.fname));
+ model.blocktype = new ScilabString(["d"]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var exprs = new ScilabString([sci2exp(this.in)], [this.fname], [this.frmt], [this.N], [this.swap]);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"WRITEC_f\",sz(1),sz(2));"]);
+ this.x = new standard_define(new ScilabDouble([4, 2]), model, exprs, gr_i);
+ return new BasicBlock(this.x);
+ }
+
+ WRITEC_f.prototype.details = function WRITEC_f() {
+ return this.x;
+ }
+}
+function ZCROSS_f() {
+
+ ZCROSS_f.prototype.define = function ZCROSS_f() {
+ this.rpar = [[-1], [-1], [0], [0]];
+
+ this.in = 1;
+
+ var model = scicos_model();
+ model.sim = list(new ScilabString(["zcross"]), new ScilabDouble([1]));
+ model.in = new ScilabDouble([this.in]);
+ model.nzcross = new ScilabDouble([this.in]);
+ model.evtout = new ScilabDouble([1]);
+ model.rpar = new ScilabDouble([-1], [-1], [0], [0]);
+ model.blocktype = new ScilabString(["z"]);
+ model.firing = new ScilabDouble([-1]);
+ model.dep_ut = new ScilabBoolean([true, false]);
+
+ var exprs = new ScilabString([sci2exp(this.in)]);
+
+ var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"ZCROSS_f\",sz(1),sz(2));"]);
+ this.x = new standard_define(new ScilabDouble([2, 2]), model, exprs, gr_i);
+
+ return new BasicBlock(this.x);
+ }
+
+ ZCROSS_f.prototype.details = function ZCROSS_f() {
+ return this.x;
+ }
+}
diff --git a/data_structures_correct/INIMPL_f.js b/data_structures_correct/INIMPL_f.js index 68555d7..81d2374 100644 --- a/data_structures_correct/INIMPL_f.js +++ b/data_structures_correct/INIMPL_f.js @@ -20,7 +20,10 @@ function INIMPL_f() { var gr_i = new ScilabString(["xstringb(orig(1),orig(2),"INIMPL_f",sz(1),sz(2));"]);
this.x = new standard_define(new ScilabDouble([1, 1]), model, exprs, gr_i);
this.x.graphics.out_implicit = new ScilabString(["I"]);
- return new ImplicitInBlock(this.x);
+
+ this.implicitInBlock = new ImplicitInBlock(this.x);
+ this.displayParameter = [this.implicitInBlock.ordering];
+ return this.implicitInBlock;
}
INIMPL_f.prototype.details = function INIMPL_f() {
return this.x;
diff --git a/data_structures_correct/IN_f.js b/data_structures_correct/IN_f.js index 1a2545a..c269a7a 100644 --- a/data_structures_correct/IN_f.js +++ b/data_structures_correct/IN_f.js @@ -39,7 +39,11 @@ function IN_f () { var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"IN_f\",sz(1),sz(2));"]); this.x = new standard_define(new ScilabDouble([1,1]),model,exprs,gr_i); - return new ExplicitInBlock(this.x); + + this.explicitInBlock = new ExplicitInBlock(this.x); + this.displayParameter = [this.explicitInBlock.ordering]; + return this.explicitInBlock; + } IN_f.prototype.details = function IN_f() { diff --git a/data_structures_correct/OUTIMPL_f.js b/data_structures_correct/OUTIMPL_f.js index 25207b3..82cd6c2 100644 --- a/data_structures_correct/OUTIMPL_f.js +++ b/data_structures_correct/OUTIMPL_f.js @@ -22,7 +22,10 @@ function OUTIMPL_f() { var gr_i = new ScilabString(["xstringb(orig(1),orig(2),"OUTIMPL_f",sz(1),sz(2));"]);
this.x = new standard_define(new ScilabDouble([1, 1]), model, exprs, gr_i);
this.x.graphics.in_implicit = new ScilabString(["I"]);
- return new ImplicitOutBlock(this.x);
+
+ this.implicitOutBlock = new ImplicitOutBlock(this.x);
+ this.displayParameter = [this.implicitOutBlock.ordering];
+ return this.implicitOutBlock;
}
OUTIMPL_f.prototype.details = function OUTIMPL_f() {
return this.x;
diff --git a/data_structures_correct/OUT_f.js b/data_structures_correct/OUT_f.js index 277148c..e480a65 100644 --- a/data_structures_correct/OUT_f.js +++ b/data_structures_correct/OUT_f.js @@ -41,7 +41,10 @@ function OUT_f () { var gr_i = new ScilabString(["xstringb(orig(1),orig(2),\"OUT_f\",sz(1),sz(2));"]); this.x = new standard_define(new ScilabDouble([1,1]),model,exprs,gr_i); this.x.graphics.style = new ScilabString(["OUT_f"]); - return new ExplicitOutBlock(this.x); + + this.explicitOutBlock = new ExplicitOutBlock(this.x); + this.displayParameter = [this.explicitOutBlock.ordering]; + return this.explicitOutBlock; } OUT_f.prototype.details = function OUT_f() { diff --git a/dependencies.js b/dependencies.js index c3c22ad..36106e8 100644 --- a/dependencies.js +++ b/dependencies.js @@ -15,7 +15,7 @@ $.ajax({ url: "/data_structures_correct/" }, success: function (data) { - + // @Parameter: data will have the required filenames in the mentioned folder // For each url, add the script to the body div element with getScript function for (i in data) { @@ -25,6 +25,47 @@ $.ajax({ }); */ +// Added to handle ordering for a few blocks. + +window.inBitMap='0'; +window.outBitMap='0'; + +String.prototype.replaceAt=function(index, character) { + return this.substr(0, index) + character + this.substr(index+character.length); +} + +/* + Maverick, Adhitya + ImplicitInBlock, ImplicitOutBlock, ExplicitInBlock, ExplicitOutBlock + These blocks need their orderings to be handled. + We are using a bitmap to do the same. +*/ + +function handleOrdering(inOrOut){ + var bitmap; + if(inOrOut=='in'){ + bitmap=window.inBitMap; + } + else{ + bitmap=window.outBitMap; + } + var index = bitmap.indexOf('0'); + if(index == -1){ + bitmap += '0'; + index = bitmap.indexOf('0'); + } + bitmap = bitmap.replaceAt(index,'1'); + if(inOrOut=='in'){ + window.inBitMap=bitmap; + } + else{ + window.outBitMap=bitmap; + } + var position = 1+index; + + return position; +} + function AfficheBlock() { if (arguments.length > 0) { var options = arguments[0]; @@ -682,7 +723,7 @@ function ImplicitOutBlock() { this.dependsOnT = "1"; this.id = options.id; this.interfaceFunctionName = arguments.callee.caller.name; - this.ordering = options.ordering; + this.ordering = handleOrdering('out'); this.parent = options.parent; if (options.model.sim instanceof Array) { this.simulationFunctionName = getData(options.model.sim[0])[0]; @@ -767,7 +808,7 @@ function ImplicitInBlock() { this.dependsOnT = "1"; this.id = options.id; this.interfaceFunctionName = arguments.callee.caller.name; - this.ordering = options.ordering; + this.ordering = handleOrdering('in'); this.parent = options.parent; if (options.model.sim instanceof Array) { this.simulationFunctionName = getData(options.model.sim[0])[0]; @@ -847,7 +888,7 @@ function ExplicitInBlock() { this.connectable = options.connectable; // Not Known this.id = options.id; this.interfaceFunctionName = arguments.callee.caller.name; - this.ordering = options.ordering; + this.ordering = handleOrdering('in'); this.parent = options.parent; if (options.model.sim instanceof Array) { this.simulationFunctionName = getData(options.model.sim[0])[0]; @@ -919,6 +960,7 @@ function ExplicitInBlock() { } } + function ExplicitOutBlock() { if (arguments.length > 0) { var options = arguments[0]; @@ -927,7 +969,7 @@ function ExplicitOutBlock() { this.connectable = options.connectable; // Not Known this.id = options.id; this.interfaceFunctionName = arguments.callee.caller.name; - this.ordering = options.ordering; + this.ordering = handleOrdering('out'); this.parent = options.parent; if (options.model.sim instanceof Array) { this.simulationFunctionName = getData(options.model.sim[0])[0]; @@ -1308,7 +1350,7 @@ function inverse() { function _str2code() { var conversion = "0123456789abcdefghijklmnopqrstuvwxyz_#!$ ();:+-*/\\=.,'[]%|&<>~^"; - var conversion2 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ00?0 00000000$000\"{}000`0@0r"; + var conversion2 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ00?0 00000000$000\"{}000`0@0r"; var str = arguments[0]; var code = []; for (var i = 0; i < str.length; i++) { diff --git a/images/flip.png b/images/flip.png Binary files differnew file mode 100644 index 0000000..6dbbb5e --- /dev/null +++ b/images/flip.png diff --git a/images/mirror.png b/images/mirror.png Binary files differnew file mode 100644 index 0000000..2676528 --- /dev/null +++ b/images/mirror.png @@ -16,6 +16,7 @@ <script type="text/javascript" src="details.js"></script> <script type="text/javascript" src="setup.js"></script> <script type="text/javascript" src="combined.js"></script> + <script type="text/javascript" src="orientation.js"></script> <script type="text/javascript"> // Stores edgeState for every recently created edge in updateFixedTerminalPoint() function @@ -189,22 +190,26 @@ }); menu.addItem('Selection to superblock', 'images/superblock.png', function() { - // @ToDo: Pooja: Functionality to be put. + // @ToDo: Functionality to be put. }); - var format = menu.addItem('Format', null, null); - + var formatMenu = menu.addItem('Format', null, null); menu.addItem('Rotate', 'images/rotate.png', function() { editor.execute('rotateCustom'); - }, format); + }, formatMenu); + menu.addItem('Flip', 'images/flip.png', function() { + editor.execute('flipCustom'); + }, formatMenu); + menu.addItem('Mirror', 'images/mirror.png', function() { + editor.execute('mirrorCustom'); + }, formatMenu); menu.addItem('Border Color', 'images/draw-brush.png', function() { showColorWheel(graph, cell, 'vertexStrokeColor'); - - }, format); + }, formatMenu); menu.addItem('Fill Color', 'images/edit.png', function() { showColorWheel(graph, cell, 'vertexFillColor'); - }, format); + }, formatMenu); menu.addItem('Details', null, function() { - // @ToDo: Pooja: Functionality to be put. + // @ToDo: Functionality to be put. }); } } else { @@ -723,13 +728,41 @@ } else { commandPort = cellvar.model.evtout.height; } + + var flip = false, + mirror = false; + var style = cell.style; + var styleObject = styleToObject(style); + if (styleObject['stencilFlipV'] == null) { + flip = false; + } else { + + if (styleObject['stencilFlipV'] == 0) { + flip = false; + } else { + flip = true; + } + + } + if (styleObject['stencilFlipH'] == null) { + mirror = false; + } else { + + if (styleObject['stencilFlipH'] == 0) { + mirror = false; + } else { + mirror = true; + } + + } + style = objectToStyle(styleObject); var geometry = cell.getGeometry(); text = 'Block Name : ' + cell.value.getAttribute('blockElementName') + "\n" + 'Simulation : ' + cell.value.getAttribute('simulationFunctionName') + "\n" + 'UID : ' + cell.id + "\n" + 'Style : ' + cell.style + "\n" + - 'Flip : ' + getData(cellvar.graphics.flip)[0] + "\n" + - 'Mirror : false' + "\n" + + 'Flip : ' + flip + "\n" + + 'Mirror : ' + mirror + "\n" + 'Input Ports : ' + inputPort + "\n" + 'Output Ports : ' + outputPort + "\n" + 'Control Ports : ' + controlPort + "\n" + @@ -752,12 +785,12 @@ if (mxUtils.isNode(cell.value)) { var stylesheet = graph.getStylesheet(); - var attribute = cell.value.getAttribute('style'); - if(attribute == null){ + var attribute = cell.value.getAttribute('style'); + if (attribute == null) { attribute = cell.value.getAttribute('interfaceFunctionName'); } var style = stylesheet.styles[attribute]; - var displayedLabel = style['displayedLabel']; + var displayedLabel = style['displayedLabel']; if (displayedLabel != null) { var displayParameter = cell.blockInstance.instance.displayParameter; for (i in displayParameter) { @@ -812,6 +845,29 @@ button.appendChild(titleName); }); + /* + * @jiteshjha, @pooja + * rotateCustom(@parameters) is defined in 'orientation.js' + */ + editor.addAction('rotateCustom', function(editor, cell) { + rotateCustom(editor, graph, cell); + }); + + /* + * @jiteshjha, @pooja + * flipCustom(@parameters) is defined in 'orientation.js' + */ + editor.addAction('flipCustom', function(editor, cell) { + flipCustom(editor, graph, cell); + }); + + /* + * @jiteshjha, @pooja + * mirrorCustom(@parameters) is defined in 'orientation.js' + */ + editor.addAction('mirrorCustom', function(editor, cell) { + mirrorCustom(editor, graph, cell); + }); // @jiteshjha, @pooja /* @@ -822,7 +878,6 @@ editor.addAction('deleteBlock', function(editor, cell) { graph.getModel().beginUpdate(); try { - // getEdgeId(@edgeObject) finds all the associated edges and split-block, and deletes them function getEdgeId(edgeObject) { @@ -925,6 +980,22 @@ // If the cell is a vertex, select the cell else { var portCount = selectionCells[k].getChildCount(); + /* + Maverick, Adhitya + switch-case statements to handle the ordering of following blocks. + The variables window.inBitMap and window.outBitMap are defined in + the file 'dependencies.js'. + */ + switch(selectionCells[k].value.nodeName){ + case 'ImplicitInBlock': + case 'ExplicitInBlock': + window.inBitMap = window.inBitMap.replaceAt(parseInt(selectionCells[k].value.getAttribute('ordering'))-1,'0') ; + break; + case 'ImplicitOutBlock': + case 'ExplicitOutBlock': + window.outBitMap = window.outBitMap.replaceAt(parseInt(selectionCells[k].value.getAttribute('ordering'))-1,'0') ; + break; + } cells.push(selectionCells[k]); for (var i = 0; i < portCount; i++) { var edgeCount = selectionCells[k].getChildAt(i).getEdgeCount(); @@ -943,7 +1014,6 @@ } } } - graph.removeCells(cells, true); } finally { graph.getModel().endUpdate(); @@ -1109,7 +1179,7 @@ button.type = "button"; button.name = "submit"; node.appendChild(button); - + /* Maverick Reference: www.htmlgoodies.com @@ -1239,7 +1309,7 @@ Ports will be automatically handled with the respective constructor calls. */ if (!(curNodeName.endsWith('Link') || curNodeName.endsWith('Port'))) { - var ifaceFuncName = cell.interfaceFunctionName; + var ifaceFuncName = null; /* Maverick @@ -1255,13 +1325,21 @@ temporaryMapObject.outputIds = []; temporaryMapObject.controlIds = []; temporaryMapObject.commandIds = []; + + switch(curNodeName){ + case 'ExplicitInBlock': ifaceFuncName='IN_f'; break; + case 'ExplicitOutBlock': ifaceFuncName='OUT_f'; break; + case 'ImplicitInBlock': ifaceFuncName='INIMPL_f'; break; + case 'ImplicitOutBlock': ifaceFuncName='OUTIMPL_f'; break; + default: ifaceFuncName=cell.interfaceFunctionName; + } - - var details_instance = null; + var details_instance=null if (ifaceFuncName != null) { - details_instance = new window[ifaceFuncName](); } + + if (details_instance != null) { var details = details_instance.define(); var enc = new mxCodec(mxUtils.createXmlDocument()); @@ -1269,8 +1347,10 @@ var temp = enc.encode(parent); var stylesheet = graph.getStylesheet(); var styleName = currentNode.getAttribute('style'); - if (styleName.indexOf(';') != -1) { - styleName = styleName.substring(0, styleName.indexOf(';')); + if(styleName!=null){ + if (styleName.indexOf(';') != -1) { + styleName = styleName.substring(0, styleName.indexOf(';')); + } } var style = stylesheet.styles[styleName]; @@ -1409,7 +1489,7 @@ Maverick Connecting the links. */ - + currentNode = rootNode.firstChild; while (currentNode != null) { var curNodeName = currentNode.nodeName; @@ -1623,10 +1703,10 @@ */ function styleToObject(style) { - if (style.indexOf(';') == -1) { + //To add semicolon at the end if it isn't already present. + if (style[style.length - 1] != ';') { style = style + ';'; } - var defaultStyle = style.substring(0, style.indexOf(';')); var styleObject = { "default": defaultStyle @@ -2404,28 +2484,37 @@ btn.style.cssText = 'margin-left: 75px'; // Executes when button 'btn' is clicked btn.onclick = function() { - var input = document.getElementById('color').value; - var style = graph.getModel().getStyle(cell); + var selectedCells = graph.getSelectionCells(); + graph.getModel().beginUpdate(); + try { + for (var count = 0; count < selectedCells.length; count++) { + var selectedCell = selectedCells[count]; + var input = document.getElementById('color').value; + var style = graph.getModel().getStyle(selectedCell); - if (style != null) { - var styleObject = styleToObject(style); - } + if (style != null) { + var styleObject = styleToObject(style); + } - if (selectProperty == "edgeStrokeColor") { - styleObject['strokeColor'] = input; - } else if (selectProperty == "bgColor") { - graph.container.style.backgroundColor = input; - } else if (selectProperty == "vertexStrokeColor") { - styleObject['strokeColor'] = input; - } else if (selectProperty == "vertexFillColor") { - styleObject['fillColor'] = input; - } else if (selectProperty == "edgeTextColor") { - styleObject['fontColor'] = input; - } + if (selectProperty == "edgeStrokeColor") { + styleObject['strokeColor'] = input; + } else if (selectProperty == "bgColor") { + graph.container.style.backgroundColor = input; + } else if (selectProperty == "vertexStrokeColor") { + styleObject['strokeColor'] = input; + } else if (selectProperty == "vertexFillColor") { + styleObject['fillColor'] = input; + } else if (selectProperty == "edgeTextColor") { + styleObject['fontColor'] = input; + } - if (style != null) { - style = objectToStyle(styleObject); - graph.getModel().setStyle(cell, style); + if (style != null) { + style = objectToStyle(styleObject); + graph.getModel().setStyle(selectedCell, style); + } + } + } finally { + graph.getModel().endUpdate(); } wind.destroy(); @@ -2549,7 +2638,6 @@ // Get the stylesheet for the graph var stylesheet = graph.getStylesheet(); - console.log(name); // From the stylesheet, get the style of the particular block var style = stylesheet.styles[name]; @@ -2571,6 +2659,8 @@ // Set label style['label'] = label; + style['imagePath'] = style['image']; + // Set image as null style['image'] = null; @@ -2635,6 +2725,9 @@ // @Chhavi: Additional attribute to store the block's instance v1.blockInstance = createInstanceTag(details_instance); + v1.currentAngle = 0; + v1.flipX = 1; + v1.flipY = 1; createPorts(graph, v1, inputPorts, controlPorts, outputPorts, commandPorts); v1.setConnectable(false); } finally { @@ -3283,4 +3376,4 @@ }); </script> -</html> +</html>
\ No newline at end of file diff --git a/orientation.js b/orientation.js new file mode 100644 index 0000000..6071758 --- /dev/null +++ b/orientation.js @@ -0,0 +1,450 @@ +/* + @pooja, + orientation.js contains the implementation of + block tranformation functions (rotation, flip and mirror) +*/ +function transformBlockImage(graph, cell) { + var imageName = cell.style; + if (imageName.indexOf(";") != -1) { + imageName = imageName.substring(0, imageName.indexOf(";")); + } + var value = graph.getModel().getValue(cell); + var dec = new mxCodec(); + var details = dec.decode(value); + // Get the stylesheet for the graph + var stylesheet = graph.getStylesheet(); + // From the stylesheet, get the style of the particular block + var style = stylesheet.styles[imageName]; + var geometry = cell.getGeometry(); + var point_x = geometry.x; + var point_y = geometry.y; + //IS_GC is to check if browser is Google Chrome, IS_FF is for Firefox. Updating the image style. + if (mxClient.IS_GC == true) { + details['label'] = '<img src="' + style['imagePath'] + '" height=80px; width=80px; style=" transform:translate(' + point_x + 'px,' + point_y + 'px) rotate(' + cell.currentAngle + 'deg) scale(' + cell.flipX + ',' + cell.flipY + '); "/>'; + } else { + details['label'] = '<img src="' + style['imagePath'] + '" height=80px; width=80px; style=" transform: rotate(' + cell.currentAngle + 'deg) scale(' + cell.flipX + ',' + cell.flipY + '); "/>'; + } + var enc = new mxCodec(mxUtils.createXmlDocument()); + var value = enc.encode(details); + graph.getModel().setValue(cell, value); +} + +function rotateCustom(editor, graph, cell) { + var selectedCells = graph.getSelectionCells(); + graph.getModel().beginUpdate(); + try { + for (var count = 0; count < selectedCells.length; count++) { + var selectedCell = selectedCells[count]; + if (selectedCell != null) { + var cells = []; + cells.push(selectedCell); + + for (var i = 0; i < selectedCell.getChildCount(); i++) + cells.push(selectedCell.getChildAt(i)); + + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + if (cell.isVertex() == true) { + var geo = graph.getCellGeometry(cell); + if (geo != null) { + // Rotates the size and position in the geometry + geo = geo.clone(); + geo.x += geo.width / 2 - geo.height / 2; + geo.y += geo.height / 2 - geo.width / 2; + var tmp = geo.width; + geo.width = geo.height; + geo.height = tmp; + graph.getModel().setGeometry(cell, geo); + // Reads the current direction and advances by 90 degrees + var state = graph.view.getState(cell); + if (state != null) { + if (cell.isConnectable() == true) { + var dir = state.style[mxConstants.STYLE_ROTATION] || '0'; + var geoCell = cell.getGeometry(); + /* + To rotate the ports in sync with the block rotation. + A rotate makes port directing east direct to south, south direct to west, west direct to north and north direct to east. + */ + if (cell.value == "ExplicitOutputPort" || cell.value == "ImplicitOutputPort") { + if (dir == '0' || dir == '180') { + var temp = geoCell.x; + geoCell.x = geoCell.y - 0.0625; + geoCell.y = temp + 0.0625; + if (dir == '0') { + dir = '90'; + } else { + dir = '270'; + } + + } else if (dir == '90' || dir == '270') { + geoCell.y = geoCell.x + 0.0625; + if (dir == '90') { + dir = '180'; + geoCell.x = 0 - 0.125; + } else { + dir = '0'; + geoCell.x = 1; + } + } + cell.setGeometry(geoCell); + } else if (cell.value == "ExplicitInputPort" || cell.value == "ImplicitInputPort") { + if (dir == '90' || dir == '270') { + geoCell.y = geoCell.x - 0.0625; + if (dir == '90') { + dir = '180'; + geoCell.x = 1 + 0.125; + } else { + dir = '0'; + geoCell.x = 0; + } + } else if (dir == '0' || dir == '180') { + geoCell = geoCell.clone(); + var temp = geoCell.x; + geoCell.x = parseFloat(geoCell.y) + 0.0625; + geoCell.y = temp - 0.0625; + if (dir == '0') { + dir = '90'; + } else { + dir = '270'; + } + } + cell.setGeometry(geoCell); + } else if (cell.value == 'CommandPort') { + + if (dir == '0' || dir == '180') { + var temp = geoCell.x; + geoCell.x = geoCell.y + 0.0625; + geoCell.y = temp - 0.0625; + if (dir == '0') { + dir = '90'; + } else { + dir = '270'; + } + } else if (dir == '90' || dir == '270') { + geoCell.y = parseFloat(geoCell.x) - 0.0625; + if (dir == '90') { + dir = '180'; + geoCell.x = 0 - 0.0625; + } else { + dir = '0'; + geoCell.x = 1 + 0.0625; + } + } + cell.setGeometry(geoCell); + } else if (cell.value == 'ControlPort') { + if (dir == '0' || dir == '180') { + var temp = geoCell.x; + geoCell.x = geoCell.y - 0.0625; + geoCell.y = temp + 0.0625; + if (dir == '0') { + dir = '90'; + } else { + dir = '270'; + } + } else if (dir == '90' || dir == '270') { + geoCell.y = parseFloat(geoCell.x) + 0.0625; + if (dir == '90') { + dir = '180'; + geoCell.x = 1 + 0.0625; + } else { + dir = '0'; + geoCell.x = 0 - 0.0625; + } + } + cell.setGeometry(geoCell); + } + } + graph.setCellStyles(mxConstants.STYLE_ROTATION, dir, [cell]); + } + } + } + if (cell.isConnectable() == false) { + var state = graph.view.getState(cell); + if (state != null) { + var dir = state.style[mxConstants.STYLE_ROTATION] || '0'; + dir = (dir + 90) % 360; + graph.setCellStyles(mxConstants.STYLE_ROTATION, dir, [cell]); + } + if (cell.value.getAttribute('label') != null && cell.value.getAttribute('label').substring(1, 4) == "img") { + cell.currentAngle = (parseInt(cell.currentAngle) + 90) % 360; + var imageName = cell.style; + transformBlockImage(graph, cell); + } + } + } + } + } + } finally { + graph.getModel().endUpdate(); + } +} + +function flipCustom(editor, graph, cell) { + var selectedCells = graph.getSelectionCells(); + graph.getModel().beginUpdate(); + try { + for (var count = 0; count < selectedCells.length; count++) { + var selectedCell = selectedCells[count]; + if (selectedCell != null) { + var cells = []; + cells.push(selectedCell); + for (var i = 0; i < selectedCell.getChildCount(); i++) + cells.push(selectedCell.getChildAt(i)); + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + if (cell.isVertex() == true) { + var geo = graph.getCellGeometry(cell); + if (geo != null) { + // Rotates the size and position in the geometry + geo = geo.clone(); + geo.x += geo.width / 2 - geo.height / 2; + geo.y += geo.height / 2 - geo.width / 2; + var tmp = geo.width; + geo.width = geo.height; + geo.height = tmp; + graph.getModel().setGeometry(cell, geo); + // Reads the current direction and flips the ports + var state = graph.view.getState(cell); + if (state != null) { + if (cell.isConnectable() == true) { + var dir = state.style[mxConstants.STYLE_ROTATION] || '0'; + var flip = state.style[mxConstants.STYLE_STENCIL_FLIPV] || '0'; + var geoCell = cell.getGeometry(); + + /* + To flip the ports in sync with the block flip. + A flip makes port directing north direct to south and vice versa. + A port directing east or west will have to aligh with the other ports which have same direction. + */ + + if (cell.value == 'CommandPort' || cell.value == 'ControlPort') { + if (dir == '90' || dir == '270') { + if (cell.value == 'CommandPort') { + if (dir == '90') { + geoCell.y = geoCell.y - 1 - 0.125; + dir = '270'; + } else { + geoCell.y = geoCell.y + 1 + 0.125; + dir = '90'; + } + } else { + if (dir == '90') { + geoCell.y = geoCell.y + 1 + 0.125; + dir = '270'; + } else { + geoCell.y = geoCell.y - 1 - 0.125; + dir = '90'; + } + } + } else if (dir == '0' || dir == '180') { + if (cell.value == 'CommandPort') { + geoCell.y = 1 - geoCell.y - 0.125; + } else { + geoCell.y = 1 - geoCell.y + 0.125; + } + } + cell.setGeometry(geoCell); + } else if (cell.value == "ExplicitOutputPort" || + cell.value == "ImplicitOutputPort" || cell.value == "ExplicitInputPort" || cell.value == "ImplicitInputPort") { + if (dir == '90' || dir == '270') { + if (cell.value == "ExplicitOutputPort" || cell.value == "ImplicitOutputPort") { + if (dir == '90') { + geoCell.y = geoCell.y - 1 - 0.125; + dir = '270'; + } else { + geoCell.y = geoCell.y + 1 + 0.125; + dir = '90'; + } + } else { + if (dir == '90') { + geoCell.y = geoCell.y + 1 + 0.125; + dir = '270'; + } else { + geoCell.y = geoCell.y - 1 - 0.125; + dir = '90'; + } + } + } else if (dir == '0' || dir == '180') { + geoCell.y = 1 - geoCell.y; + } + cell.setGeometry(geoCell); + } + } + graph.setCellStyles(mxConstants.STYLE_ROTATION, dir, [cell]); + if (flip == '0') { + graph.setCellStyles(mxConstants.STYLE_STENCIL_FLIPV, '1', [cell]); + } else { + graph.setCellStyles(mxConstants.STYLE_STENCIL_FLIPV, '0', [cell]); + } + } + } + } + if (cell.isConnectable() == false) { + var state = graph.view.getState(cell); + if (state != null) { + var dir = state.style[mxConstants.STYLE_ROTATION]; + var flip = state.style[mxConstants.STYLE_STENCIL_FLIPV] || '0'; + if (flip == '0') { + graph.setCellStyles(mxConstants.STYLE_STENCIL_FLIPV, '1', [cell]); + } else { + graph.setCellStyles(mxConstants.STYLE_STENCIL_FLIPV, '0', [cell]); + } + if (dir == '0' || dir == '180') { + dir = (dir + 180) % 360; + + } + graph.setCellStyles(mxConstants.STYLE_ROTATION, dir, [cell]); + } + if (cell.value.getAttribute('label') != null && cell.value.getAttribute('label').substring(1, 4) == "img") { + if (cell.currentAngle == 90 || cell.currentAngle == 270) { + cell.flipX = -parseInt(cell.flipX); + } else { + cell.flipY = -parseInt(cell.flipY); + } + transformBlockImage(graph, cell); + } + } + } + } + } + } finally { + graph.getModel().endUpdate(); + } +} + +function mirrorCustom(editor, graph, cell) { + var selectedCells = graph.getSelectionCells(); + graph.getModel().beginUpdate(); + try { + for (var count = 0; count < selectedCells.length; count++) { + var selectedCell = selectedCells[count]; + if (selectedCell != null) { + var cells = []; + + cells.push(selectedCell); + + for (var i = 0; i < selectedCell.getChildCount(); i++) + cells.push(selectedCell.getChildAt(i)); + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + if (cell.isVertex() == true) { + var geo = graph.getCellGeometry(cell); + + if (geo != null) { + // Rotates the size and position in the geometry + geo = geo.clone(); + geo.x += geo.width / 2 - geo.height / 2; + geo.y += geo.height / 2 - geo.width / 2; + var tmp = geo.width; + geo.width = geo.height; + geo.height = tmp; + graph.getModel().setGeometry(cell, geo); + // Reads the current direction and mirrors the ports + var state = graph.view.getState(cell); + if (state != null) { + var dir = state.style[mxConstants.STYLE_ROTATION] || '0'; + var mirror = state.style[mxConstants.STYLE_STENCIL_FLIPH] || '0'; + if (cell.isConnectable() == true) { + var geoCell = cell.getGeometry(); + + /* + To mirror the ports in sync with the block mirror. + A mirror makes port directing east direct to west and vice versa. + A port directing north or south will have to aligh with the other ports which have same direction. + */ + + if (cell.value == "ExplicitOutputPort" || cell.value == "ImplicitOutputPort" || cell.value == "ExplicitInputPort" || cell.value == "ImplicitInputPort") { + if (dir == '180' || dir == '0') { + if (cell.value == "ExplicitOutputPort" || cell.value == "ImplicitOutputPort") { + if (dir == '0') { + geoCell.x = geoCell.x - 1 - 0.125; + dir = '180'; + } else { + geoCell.x = geoCell.x + 1 + 0.125; + dir = '0'; + } + } else { + geoCell = geoCell.clone(); + if (dir == '0') { + geoCell.x = geoCell.x + 1 + 0.125; + dir = '180'; + } else { + geoCell.x = geoCell.x - 1 - 0.125; + dir = '0'; + } + } + } else if (dir == '90' || dir == '270') { + if (cell.value == "ExplicitOutputPort" || cell.value == "ImplicitOutputPort") { + geoCell.x = 1 - geoCell.x - 0.125; + } else { + geoCell.x = 1 - geoCell.x + 0.125; + } + } + cell.setGeometry(geoCell); + } else if (cell.value == 'CommandPort' || cell.value == 'ControlPort') { + if (dir == '0' || dir == '180') { + if (cell.value == 'CommandPort') { + if (dir == '180') { + geoCell.x = geoCell.x + 1 + 0.125; + dir = '0'; + } else { + geoCell.x = geoCell.x - 1 - 0.125; + dir = '180'; + } + } else { + if (dir == '180') { + geoCell.x = geoCell.x - 1 - 0.125; + dir = '0'; + } else { + geoCell.x = geoCell.x + 1 + 0.125; + dir = '180'; + } + } + } else if (dir == '90' || dir == '270') { + geoCell.x = 1 - geoCell.x; + } + cell.setGeometry(geoCell); + } + } + graph.setCellStyles(mxConstants.STYLE_ROTATION, dir, [cell]); + if (mirror == '0') { + graph.setCellStyles(mxConstants.STYLE_STENCIL_FLIPH, '1', [cell]); + } else { + graph.setCellStyles(mxConstants.STYLE_STENCIL_FLIPH, '0', [cell]); + } + } + } + } + + if (cell.isConnectable() == false) { + var state = graph.view.getState(cell); + if (state != null) { + var dir = state.style[mxConstants.STYLE_ROTATION]; + var mirror = state.style[mxConstants.STYLE_STENCIL_FLIPH] || '0'; + if (mirror == '0') { + graph.setCellStyles(mxConstants.STYLE_STENCIL_FLIPH, '1', [cell]); + } else { + graph.setCellStyles(mxConstants.STYLE_STENCIL_FLIPH, '0', [cell]); + } + if (dir == '90' || dir == '270') { + dir = (dir + 180) % 360; + + } + graph.setCellStyles(mxConstants.STYLE_ROTATION, dir, [cell]); + } + if (cell.value.getAttribute('label') != null && cell.value.getAttribute('label').substring(1, 4) == "img") { + if (cell.currentAngle == 90 || cell.currentAngle == 270) { + cell.flipY = -parseInt(cell.flipY); + } else { + cell.flipX = -parseInt(cell.flipX); + } + transformBlockImage(graph, cell); + } + } + } + } + } + } finally { + graph.getModel().endUpdate(); + } +}
\ No newline at end of file |