forked from HEL/circuiteria
		
	added resistor and capacitor
This commit is contained in:
		| @@ -12,4 +12,7 @@ | |||||||
| #import "elements/logic/xor.typ": gate-xor, gate-xnor | #import "elements/logic/xor.typ": gate-xor, gate-xnor | ||||||
| #import "elements/logic/buf.typ": gate-buf, gate-not | #import "elements/logic/buf.typ": gate-buf, gate-not | ||||||
|  |  | ||||||
|  | #import "elements/electrical/resistor.typ": resistor | ||||||
|  | #import "elements/electrical/capacitor.typ": capacitor | ||||||
|  |  | ||||||
| #import "elements/group.typ": group | #import "elements/group.typ": group | ||||||
							
								
								
									
										52
									
								
								src/elements/electrical/capacitor.typ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/elements/electrical/capacitor.typ
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | #import "@preview/cetz:0.2.2": draw | ||||||
|  | #import "../element.typ" | ||||||
|  | #import "../ports.typ": add-port | ||||||
|  |  | ||||||
|  | #let draw-shape(id, tl, tr, br, bl, fill, stroke) = { | ||||||
|  |   let f = draw.rect(tl, br, name: id, stroke: stroke, fill: fill) | ||||||
|  |   return (f, tl, tr, br, bl) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /// Draws a capacitor | ||||||
|  | /// | ||||||
|  | /// #examples.capacitor | ||||||
|  | /// For other parameters description, see #doc-ref("element.elmt") | ||||||
|  | /// - vertical (bool): Whether the element is vertical or horizontal. If false, port 0 is placed on the west side and port 1 on the east. If true, they are on the north, respectively the south sides | ||||||
|  | #let capacitor( | ||||||
|  |   x: none, | ||||||
|  |   y: none, | ||||||
|  |   w: none, | ||||||
|  |   h: none, | ||||||
|  |   name: none, | ||||||
|  |   name-anchor: "center", | ||||||
|  |   vertical: false, | ||||||
|  |   fill: none, | ||||||
|  |   stroke: black + 1pt, | ||||||
|  |   id: "", | ||||||
|  |   debug: ( | ||||||
|  |     ports: false | ||||||
|  |   ) | ||||||
|  | ) = { | ||||||
|  |   let ports = if vertical {( | ||||||
|  |     north: ((id: "0"),), | ||||||
|  |     south: ((id: "1"),) | ||||||
|  |   )} else {( | ||||||
|  |     west: ((id: "0"),), | ||||||
|  |     east: ((id: "1"),) | ||||||
|  |   )} | ||||||
|  |    | ||||||
|  |   element.elmt( | ||||||
|  |     draw-shape: draw-shape.with(), | ||||||
|  |     x: x, | ||||||
|  |     y: y, | ||||||
|  |     w: w, | ||||||
|  |     h: h, | ||||||
|  |     name: name, | ||||||
|  |     name-anchor: name-anchor, | ||||||
|  |     ports: ports, | ||||||
|  |     fill: fill, | ||||||
|  |     stroke: stroke, | ||||||
|  |     id: id, | ||||||
|  |     debug: debug | ||||||
|  |   ) | ||||||
|  | } | ||||||
							
								
								
									
										95
									
								
								src/elements/electrical/resistor.typ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								src/elements/electrical/resistor.typ
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,95 @@ | |||||||
|  | #import "@preview/cetz:0.2.2": draw | ||||||
|  | #import "../element.typ" | ||||||
|  | #import "../ports.typ": add-port | ||||||
|  |  | ||||||
|  | #let draw-shape( | ||||||
|  |   id, tl, tr, br, bl, | ||||||
|  |   fill, stroke, | ||||||
|  |   zigzags: 7, | ||||||
|  |   vertical: false | ||||||
|  | ) = { | ||||||
|  |   let (x, y) = bl | ||||||
|  |   let (width, height) = (tr.at(0) - x, tr.at(1) - y) | ||||||
|  |    | ||||||
|  |   let pts = if vertical {( | ||||||
|  |     (x + width / 2, y), | ||||||
|  |     (x + width / 2, y + height * 0.2), | ||||||
|  |   )} else {( | ||||||
|  |     (x, y + height / 2), | ||||||
|  |     (x + width * 0.2, y + height / 2), | ||||||
|  |   )} | ||||||
|  |    | ||||||
|  |   for i in range(zigzags) { | ||||||
|  |     let r = ((i+0.5) / zigzags * 0.6 + 0.2) | ||||||
|  |     let pos = if vertical {( | ||||||
|  |       x + width * calc.rem(i, 2), | ||||||
|  |       r * height + y | ||||||
|  |     )} else {( | ||||||
|  |       r * width + x, | ||||||
|  |       y + height * calc.rem(i, 2) | ||||||
|  |     )} | ||||||
|  |     pts.push(pos) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   pts += if vertical {( | ||||||
|  |     (x + width / 2, y + height * 0.8), | ||||||
|  |     (x + width / 2, y + height), | ||||||
|  |   )} else {( | ||||||
|  |     (x + width * 0.8, y + height / 2), | ||||||
|  |     (x + width, y + height / 2), | ||||||
|  |   )} | ||||||
|  |  | ||||||
|  |   let f = draw.group(name: id, { | ||||||
|  |     draw.line(..pts, stroke: stroke) | ||||||
|  |   }) | ||||||
|  |   return (f, tl, tr, br, bl) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /// Draws a resistor | ||||||
|  | /// | ||||||
|  | /// #examples.resistor | ||||||
|  | /// For other parameters description, see #doc-ref("element.elmt") | ||||||
|  | /// - vertical (bool): Whether the element is vertical or horizontal. If false, port 0 is placed on the west side and port 1 on the east. If true, they are on the north, respectively the south sides | ||||||
|  | /// - zigzags (number): Number of zigzags to draw | ||||||
|  | #let resistor( | ||||||
|  |   x: none, | ||||||
|  |   y: none, | ||||||
|  |   w: none, | ||||||
|  |   h: none, | ||||||
|  |   name: none, | ||||||
|  |   name-anchor: "center", | ||||||
|  |   vertical: false, | ||||||
|  |   zigzags: 7, | ||||||
|  |   fill: none, | ||||||
|  |   stroke: black + 1pt, | ||||||
|  |   id: "", | ||||||
|  |   debug: ( | ||||||
|  |     ports: false | ||||||
|  |   ) | ||||||
|  | ) = { | ||||||
|  |   let ports = if vertical {( | ||||||
|  |     north: ((id: "0"),), | ||||||
|  |     south: ((id: "1"),) | ||||||
|  |   )} else {( | ||||||
|  |     west: ((id: "0"),), | ||||||
|  |     east: ((id: "1"),) | ||||||
|  |   )} | ||||||
|  |  | ||||||
|  |   element.elmt( | ||||||
|  |     draw-shape: draw-shape.with( | ||||||
|  |       vertical: vertical, | ||||||
|  |       zigzags: zigzags | ||||||
|  |     ), | ||||||
|  |     x: x, | ||||||
|  |     y: y, | ||||||
|  |     w: w, | ||||||
|  |     h: h, | ||||||
|  |     name: name, | ||||||
|  |     name-anchor: name-anchor, | ||||||
|  |     ports: ports, | ||||||
|  |     fill: fill, | ||||||
|  |     stroke: stroke, | ||||||
|  |     id: id, | ||||||
|  |     debug: debug | ||||||
|  |   ) | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user