#This file contains macros to draw circuits with pic #it should be included at the start of a file with: # .PS # copy "circuit.pic" # .PE # # MIT License # # Copyright (c) 2019 Tucker Evans # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation files # (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. text_up = 0.175 text_down = 0.2 padding = 0.04 wire_wid = .25 define begin {line right padding} define end_ {line right padding} define wire {line $1 wire_wid} define current { arrowht = arrowht/2 #LEFT arrow wire_wid/2 + arrowwid/2 #TEXT move -arrowwid/2 "$1" at Here + (0, text_up); move to Here - (0,text_up) " $2" ljust "$3" at Here- (0, text_down); move to Here + (0,text_down) "$4 " rjust move arrowwid/2 #RIGHT line wire_wid/2 - arrowwid/2 reset arrowht } define point { circle radius .0175 fill 1 at last line .end "$1" above at last circle .n " $2" ljust at last circle .w "$3" below at last circle .s "$4 " rjust at last circle .e move to last circle } define batt { #LEFT begin move down .1; line up .2; move down .1 move right .025 #TEXT move down text_down "$1"; move up text_down; move up text_up "$2"; move down text_up; #RIGHT move right .025 move down .03333; line up .066666; move down 0.03333 ; end_ } batt_len = .05 + padding*2 define cap { begin #LEFT move down .05; line up .1; move down .05; move right .025 #TEXT move down text_down "$1"; move up text_down; move up text_up "$2"; move down text_up; #RIGHT move right .025 down .05; line up .1; move down .05; end_ } cap_len = .05 + padding *2 define res { begin #LEFT line up .05 right .03 line down .1 right .03 line up .1 right .03 line down .05 right .015 #TEXT move down text_down "$1"; move up text_down move up text_up "$2"; move down text_up #RIGHT line down .05 right .015 line up .1 right .03 line down .1 right .03 line up .05 right .03 end_ } res_len = (0.03 * 7) + padding *2 #Reverse sections define Rbegin {line left padding} define Rend {line left padding} define Rbatt { #LEFT Rbegin move down .1; line up .2; move down .1 move left .025 #TEXT move down text_down "$1"; move up text_down; move up text_up "$2"; move down text_up; #RIGHT move left .025 move down .03333; line up .066666; move down 0.03333 ; Rend } define Rcap { Rbegin #LEFT move down .05; line up .1; move down .05; move left .025 #TEXT move down text_down "$1"; move up text_down; move up text_up "$2"; move down text_up; #RIGHT move left .025 down .05; line up .1; move down .05; Rend } define Rres { Rbegin #LEFT line down .05 left .03 line up .1 left .03 line down .1 left .03 line up .05 left .015 #TEXT move down text_down "$1"; move up text_down move up text_up "$2"; move down text_up #RIGHT line up .05 left .015 line down .1 left .03 line up .1 left .03 line down .05 left .03 Rend }