X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Freport.git;a=blobdiff_plain;f=Utils%2FMetapost.tex;h=590dfc57480418a997724a146bf45b3f9ba72c41;hp=7caa6e0275c53ab2d20413697e18e8c42151fd65;hb=eca7fe3f235fe5c9b87371f75e17e00664b1e320;hpb=04787b97e28a61c0e96ae9c3670c47c6bb1c881e diff --git a/Utils/Metapost.tex b/Utils/Metapost.tex index 7caa6e0..590dfc5 100644 --- a/Utils/Metapost.tex +++ b/Utils/Metapost.tex @@ -8,6 +8,7 @@ input metaobj; setObjectDefaultOption("Box")("framewidth")(.75mm); setObjectDefaultOption("Circle")("framewidth")(.75mm); setObjectDefaultOption("Circle")("circmargin")(3mm); +setObjectDefaultOption("Mux")("framewidth")(.75mm); %ahlength := 1.5mm; ahangle := 60; @@ -94,6 +95,59 @@ define_global_boolean_option("labels"); setObjectDefaultOption("Reg")("reflect")(false); setObjectDefaultOption("Reg")("labels")(false); +% Define a Multiplexer. +vardef newMux@# text options= + ExecuteOptions(@#)(options); + assignObj(@#,"Mux"); + StandardInterface; + % Add ports + ObjPoint inpa, inpb, out; + + ObjCode MinimumStandardEquations, + % Make it a parallel trapezium + "xpart(@#ne - @#nw) = xpart(@#se - @#sw)", + "ypart(@#ne - @#nw) = -1 * ypart(@#se - @#sw)", + % Use a 22.5 degree angle for the sides + "ypart(@#nw) - ypart(@#ne) = xpart(@#ne-@#nw) / 2", + % With a specific width and height + "@#e-@#w = (" & decimal OptionValue@#("width") & ", 0mm)", + "@#n-@#s = (0mm, " & decimal OptionValue@#("height") & ")", + % And space the input ports evenly + "@#inpa = midpoint(@#nw, @#w)", + "@#inpb = midpoint(@#w, @#sw)", + "@#out = @#e"; + + StandardTies; +enddef; + +% Draw a multiplexer +def drawMux(suffix mux)= + draw mux.n -- mux.s; + % Use our bounding path to draw + drawFramedOrFilledObject_(mux); +enddef; + +% Bounding path for a multiplexer +def BpathMux(suffix n)=StandardBpath(n) enddef; + +% Define options +define_local_numeric_option("width"); +define_local_numeric_option("height"); +setObjectDefaultOption("Mux")("width")(5mm); +setObjectDefaultOption("Mux")("height")(15mm); +setObjectDefaultOption("Mux")("framed")(true); +% Overidden above +%setObjectDefaultOption("Mux")("framewidth")(.5bp); +setObjectDefaultOption("Mux")("framecolor")(black); +setObjectDefaultOption("Mux")("framestyle")(""); +setObjectDefaultOption("Mux")("shadow")(false); +setObjectDefaultOption("Mux")("shadowcolor")(black); +setObjectDefaultOption("Mux")("filled")(false); +setObjectDefaultOption("Mux")("fillcolor")(black); + + +def midpoint(expr a, b) = ((a + b) / 2) enddef; + \stopMPinclusions % Make \overrightarrow "unexpanded", to make it work within metapost.