⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elements.mp

📁 Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
💻 MP
📖 第 1 页 / 共 2 页
字号:
  save y;  y.h = ypart(urcorner pic_$ - llcorner pic_$);  y.hh = y.h + 2ypart(element_offset);  if $.down: y := y.hh;  else:    y.maxport = max($.nin, $.nout);    y.len = y.maxport*port_length + (y.maxport-1)*port_sep + 2port_offset;    y := max(y.hh, y.len);  fi;    y'' := min_element_height;  forever:    exitif y'' >= y;    y'' := y'' + element_height_increment;  endfor;    $.dy = (y'' - y.h)/2;enddef;def sizeelement_(suffix $) =  if unknown $.dx: set_element_dx($); fi  if unknown $.dy: set_element_dy($); fienddef;vardef fixelementsizeleft(text t) =  forsuffixes $=t:    fixsize($);    if $.dx > xpart element_offset: $.off := $.off - ($.dx - xpart element_offset, 0); fi;  endfor;enddef;vardef fixelement(text elements) =  fixsize(elements);  fixpos(elements);enddef;vardef elementleftjustify(text elements) =  fixsize(elements);  forsuffixes $=elements:    if $.dx > xpart element_offset: $.off := $.off - ($.dx - xpart element_offset, 0); fi;  endfor;enddef;vardef fixrelations(suffix efirst)(text elements) =  forsuffixes $=elements:    if unknown xpart(efirst.off - $.off): xpart $.off = xpart efirst.off fi;    if unknown ypart(efirst.off - $.off): ypart $.off = ypart efirst.off fi;  endfor;enddef;vardef elementbbox(suffix efirst)(text elements) =  fixsize(efirst,elements);  fixrelations(efirst,elements);  save __t,__l,__r,__b,__p; picture __p;  __t = ypart(efirst.n - efirst.off);  __l = xpart(efirst.w - efirst.off);  __r = xpart(efirst.e - efirst.off);  __b = ypart(efirst.s - efirst.off);  forsuffixes $=elements:    if ypart($.n - efirst.off) > __t: __t := ypart($.n - efirst.off) fi;    if xpart($.w - efirst.off) < __l: __l := xpart($.w - efirst.off) fi;    if xpart($.e - efirst.off) > __r: __r := xpart($.e - efirst.off) fi;    if ypart($.s - efirst.off) < __b: __b := ypart($.s - efirst.off) fi;  endfor;  __p = nullpicture;  setbounds __p to ((__l,__t) -- (__r,__t) -- (__r,__b) -- (__l,__b) -- cycle)     if known efirst.off: shifted efirst.off fi;  __penddef;vardef compoundelementlink@#(suffix efirst)(text elements) =  fixsize(efirst,elements);  fixrelations(efirst,elements);  save __t,__l,__r,__b,__p; picture __p;  __t = ypart(efirst.n - efirst.off);  __l = xpart(efirst.w - efirst.off);  __r = xpart(efirst.e - efirst.off);  __b = ypart(efirst.s - efirst.off);  forsuffixes $=elements:    if ypart($.n - efirst.off) > __t: __t := ypart($.n - efirst.off) fi;    if xpart($.w - efirst.off) < __l: __l := xpart($.w - efirst.off) fi;    if xpart($.e - efirst.off) > __r: __r := xpart($.e - efirst.off) fi;    if ypart($.s - efirst.off) < __b: __b := ypart($.s - efirst.off) fi;  endfor;  @#.c = efirst.off + .5[(__l,__t), (__r,__b)]enddef;%% drawvardef draw_element_inputs(suffix $) =  path _p_, _ag_;  _p_ := _normal_input scaled $.portscale;  _ag_ := _agnostic_input scaled $.portscale;  if $.down: _p_ := _p_ rotated -90; _ag_ := _ag_ rotated -90; fi;  if $.rev: _p_ := _p_ rotated 180; _ag_ := _ag_ rotated 180; fi;  for _i_ = 0 upto $.nin - 1:    if $.inpers[_i_] >= 0:      fill _p_ shifted $.in[_i_] withcolor personalitycolor[$.inpers[_i_]];      draw _p_ shifted $.in[_i_];      if $.inpers[_i_] >= agnostic:	fill _ag_ shifted $.in[_i_] withcolor agnosticcolor[$.inpers[_i_]];	draw _ag_ shifted $.in[_i_]; fi    fi;  endforenddef;vardef draw_element_outputs(suffix $) =  path _p_, _ag_;  _p_ := _normal_output scaled $.portscale;  _ag_ := _agnostic_output scaled $.portscale;  if $.down: _p_ := _p_ rotated -90; _ag_ := _ag_ rotated -90; fi;  if $.rev: _p_ := _p_ rotated 180; _ag_ := _ag_ rotated 180; fi;  for _i_ = 0 upto $.nout - 1:    if $.outpers[_i_] >= 0:      fill _p_ shifted $.out[_i_] withcolor personalitycolor[$.outpers[_i_]];      draw _p_ shifted $.out[_i_];      if $.outpers[_i_] >= agnostic:	fill _ag_ shifted $.out[_i_] withcolor agnosticcolor[$.outpers[_i_]];	draw _ag_ shifted $.out[_i_]; fi    fi;  endforenddef;vardef drawelement(text elements) text rest =  drawelementbox(elements) rest;  drawunboxed(elements);enddef;vardef drawelementbox(text elements) text rest =  save $, oldpen; oldpen := savepen;  interim linejoin := mitered;  fixsize(elements);  fixpos(elements);  forsuffixes $ = elements:    if $.drawports:      pickup elementpen.port scaled $.portscale;      if $.nin > 0: draw_element_inputs($); fi;      if $.nout > 0: draw_element_outputs($); fi;    fi;    if $.borderscale > 0:      pickup elementpen.border scaled $.borderscale;      scantokens elemdraw_$($) rest;    fi;  endfor;  pickup oldpen;enddef;vardef fillelement(text elements)(text color) =  fixsize(elements);  fixpos(elements);  forsuffixes $=elements:    fill bpath.$ withcolor color;  endfor;enddef;%% queuesvardef _drawqueued(expr p,delta,rot,lim,pp) text rest =  save i; interim linecap := squared; i := delta;  forever:    draw (p) shifted ((i,0) rotated rot) withpen currentpen scaled 0.25 rest;    i := i + delta; exitunless i < lim;  endfor;  draw (pp) rest;enddef;def drawqueued(suffix $) =  _drawqueued($.ne -- $.se, 6, 180, .9*$.width, $.nw -- $.ne -- $.se -- $.sw)enddef;def drawrqueued(suffix $) =  _drawqueued($.nw -- $.sw, 6, 0, .9*$.width, $.ne -- $.nw -- $.sw -- $.se)enddef;def drawvqueued(suffix $) =  _drawqueued($.se -- $.sw, 5, 90, .9*$.height, $.nw -- $.sw -- $.se -- $.ne)enddef;def drawrvqueued(suffix $) =  _drawqueued($.ne -- $.nw, 5, 270, .9*$.height, $.sw -- $.nw -- $.ne -- $.se)enddef;vardef queueit@#(expr s) =  _elementit.@#(s, 1, 1, push_to_pull, false, false);  elemdraw_@# := "drawqueued";enddef;vardef rqueueit@#(expr s) =  _elementit.@#(s, 1, 1, push_to_pull, false, true);  elemdraw_@# := "drawrqueued";enddef;vardef vqueueit@#(expr s) =  _elementit.@#(s, 1, 1, push_to_pull, true, false);  elemdraw_@# := "drawvqueued";enddef;vardef rvqueueit@#(expr s) =  _elementit.@#(s, 1, 1, push_to_pull, true, true);  elemdraw_@# := "drawrvqueued";enddef;%% connectionspicture _cutarrpic;vardef arrowhead expr p =  save q,h,e,f; path q,h; pair e,f;  e = point length p of p;  q = gobble(p shifted -e cutafter makepath(pencircle scaled 2ahlength))    cuttings;  h = gobble(p shifted -e cutafter makepath(pencircle scaled 1.5ahlength))    cuttings;  f = point 0 of h;  (q rotated .5ahangle & reverse q rotated -.5ahangle -- f -- cycle)  shifted eenddef;def _cutarr(expr b,e) text t =  _cutarrpic := image(draw (0,0) -- (1,0) -- cycle t);  _cutarramt := (2ypart urcorner _cutarrpic / sind .5ahangle) - 0.75;  if _cutarramt > 0:    _apth := subpath (xpart(_apth intersectiontimes makepath(pencircle	  scaled (b*_cutarramt)) shifted (point 0 of _apth)),      xpart(_apth intersectiontimes makepath(pencircle scaled (e*_cutarramt))  shifted (point length _apth of _apth))) of _apth;  fienddef;def _finarr text t =  _cutarr(0,1) t;  draw (subpath (0, xpart(_apth intersectiontimes makepath(pencircle scaled 1.2ahlength) shifted (point length _apth of _apth))) of _apth) t;  fill arrowhead _apth  tenddef;def _findarr text t =  _cutarr(1,1) t;  draw (subpath    (xpart(_apth intersectiontimes makepath(pencircle scaled 1.2ahlength) shifted (point 0 of _apth)),     xpart(_apth intersectiontimes makepath(pencircle scaled 1.2ahlength) shifted (point length _apth of _apth))) of _apth) t;  fill arrowhead _apth  t;  fill arrowhead reverse _apth  tenddef;def connectpath(suffix $,#,##,$$) =  $.out[#]{$.flowvector} .. {$$.flowvector}$$.in[##]enddef;vardef drawconnectj(suffix $,#,##,$$)(text t) text rest =  interim linejoin := mitered;  drawarrow $.out[#]{$.flowvector} t {$$.flowvector}$$.in[##] withpen connectionpen restenddef;def drawconnect(suffix $,#,##,$$) =  drawconnectj($,#,##,$$)(..)enddef;vardef drawconnectna(suffix $,#,##,$$) text rest =  interim linejoin := mitered;  draw $.out[#]{$.flowvector} .. {$$.flowvector}$$.in[##] withpen connectionpen restenddef;def drawconnarrow expr p =  _apth:=p; _finarr withpen connectionpenenddef;def drawconnarrowna expr p =  draw p withpen connectionpenenddef;def drawdblconnarrow expr p =  _apth:=p; _findarr withpen connectionpenenddef;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -