forked from HEL/circuiteria
		
	adapted ALU + minor fix in add-ports
This commit is contained in:
		| @@ -1,45 +1,40 @@ | ||||
| #import "@preview/cetz:0.3.2": draw | ||||
| #import "element.typ" | ||||
| #import "ports.typ": add-port | ||||
| #import "../util.typ" | ||||
|  | ||||
| #let draw-shape(elmt, bounds) = { | ||||
|   let tl = bounds.tl | ||||
|   let tr = bounds.tr | ||||
|   let bl = bounds.bl | ||||
|   let br = bounds.br | ||||
|  | ||||
| #let draw-shape(id, tl, tr, br, bl, fill, stroke) = { | ||||
|   let p0 = tl | ||||
|   let p1 = (tr, 10%, br) | ||||
|   let p2 = (tr, 90%, br) | ||||
|   let p1 = util.lerp(tr, 10%, br) | ||||
|   let p2 = util.lerp(tr, 90%, br) | ||||
|   let p3 = bl | ||||
|   let p4 = (tl, 55%, bl) | ||||
|   let p5 = (tl, 50%, br) | ||||
|   let p6 = (tl, 45%, bl) | ||||
|   let p4 = util.lerp(tl, 55%, bl) | ||||
|   let p5 = util.lerp(tl, 50%, br) | ||||
|   let p6 = util.lerp(tl, 45%, bl) | ||||
|  | ||||
|   let bounds2 = element.complete-bounds(elmt, ( | ||||
|     tl: p0, | ||||
|     tr: p1, | ||||
|     br: p2, | ||||
|     bl: p3 | ||||
|   )) | ||||
|    | ||||
|   let f1 = draw.group(name: id, { | ||||
|      | ||||
|     draw.merge-path( | ||||
|       inset: 0.5em, | ||||
|       fill: fill, | ||||
|       stroke: stroke, | ||||
|       close: true, | ||||
|       draw.line(p0, p1, p2, p3, p4, p5, p6) | ||||
|     ) | ||||
|     draw.anchor("north", (p0, 50%, p1)) | ||||
|     draw.anchor("south", (p2, 50%, p3)) | ||||
|     draw.anchor("west", (p0, 50%, p3)) | ||||
|     draw.anchor("east", (p1, 50%, p2)) | ||||
|     draw.anchor("north-west", p0) | ||||
|     draw.anchor("north-east", p1) | ||||
|     draw.anchor("south-east", p2) | ||||
|     draw.anchor("south-west", p3) | ||||
|     draw.anchor("name", (p5, 50%, (p1, 50%, p2))) | ||||
|   }) | ||||
|  | ||||
|   let f2 = add-port(id, "west", (id: "in1"), (p0, 50%, p6)) | ||||
|   let f3 = add-port(id, "west", (id: "in2"), (p3, 50%, p4)) | ||||
|   let f4 = add-port(id, "east", (id: "out"), (p1, 50%, p2)) | ||||
|  | ||||
|   let f = { | ||||
|     f1; f2; f3; f4 | ||||
|     draw.line( | ||||
|       p0, p1, p2, p3, p4, p5, p6, | ||||
|       fill: elmt.fill, | ||||
|       stroke: elmt.stroke, | ||||
|       close: true | ||||
|     ) | ||||
|     draw.anchor("name", (p5, 50%, (p1, 50%, p2))) | ||||
|   } | ||||
|  | ||||
|   return (f, tl, tr, br, bl) | ||||
|   return (f, bounds2) | ||||
| } | ||||
|  | ||||
| /// Draws an ALU with two inputs | ||||
| @@ -47,18 +42,7 @@ | ||||
| /// #examples.alu | ||||
| /// For parameters description, see #doc-ref("element.elmt") | ||||
| #let alu( | ||||
|   x: none, | ||||
|   y: none, | ||||
|   w: none, | ||||
|   h: none, | ||||
|   name: none, | ||||
|   name-anchor: "center", | ||||
|   fill: none, | ||||
|   stroke: black + 1pt, | ||||
|   id: "", | ||||
|   debug: ( | ||||
|     ports: false | ||||
|   ) | ||||
|   ..args | ||||
| ) = { | ||||
|   let ports = ( | ||||
|     west: ( | ||||
| @@ -70,24 +54,18 @@ | ||||
|     ) | ||||
|   ) | ||||
|    | ||||
|   element.elmt( | ||||
|   return element.elmt( | ||||
|     draw-shape: draw-shape, | ||||
|     x: x, | ||||
|     y: y, | ||||
|     w: w, | ||||
|     h: h, | ||||
|     name: name, | ||||
|     name-anchor: name-anchor, | ||||
|     ports: ports, | ||||
|     fill: fill, | ||||
|     stroke: stroke, | ||||
|     id: id, | ||||
|     auto-ports: false, | ||||
|     ports-y: ( | ||||
|       in1: (h) => {h * 0.225}, | ||||
|       in2: (h) => {h * 0.775}, | ||||
|       out: (h) => {h * 0.5} | ||||
|     ports-pos: ( | ||||
|       west: ( | ||||
|         in1: l => l * 0.225, | ||||
|         in2: l => l * 0.775, | ||||
|       ), | ||||
|       east: ( | ||||
|         out: l => l * 0.5 | ||||
|       ) | ||||
|     ), | ||||
|     debug: debug | ||||
|     ..args | ||||
|   ) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user