Schemdraw小白从入门到放弃---原理工具书

本文详细介绍了SchemDraw这款Python电路图软件,涵盖了元件属性(如color、label和length)、元件连接的延续性、方向控制以及接线点(锚点)的概念。通过实例和习题,逐步引导读者掌握基本绘图技巧和设计思路。
摘要由CSDN通过智能技术生成

SchemDraw是一款非常优秀简单高效的python的电路图软件,猜测其设计者是一位优秀的电子信息工程师,他从传统的纸上画图入手,抽象出很多手绘图的习惯,将至迁移到编程中,所以学习成本超低,适合小白入手到大神。

python是一门很简单的编程语言,如果您有java或者c语言基础,那么学习成本超级低。

学习就是学且练习,一篇好的文章,应该简单明了的说明思路及大量的习题,而真正的做题方式是做一题理解更深一层。很多习题是笔者自己出的,才疏学浅度,多多扶正,另外,很多是开发题目,言之成理即可,不要在乎答案。

schemdraw包含了作者大量心血,我试图用最简单的逻辑去阐明作者设计初衷,降低各位学习成本,所以与原教程有明显不一样的编排,不喜勿喷。我自己的理解:设计者将纸上作图的方法完全照抄到了编程绘图上,所以纸上怎么画图就怎么编写程序。看完本教程,忘记我的言语,留着您的理解,记住几个常用函数,展开您的想象,随意发挥。

太长了,没有编写完的章节后续慢慢补。

版本

SchemDraw的最佳python版本是3.8.0+,最新版本是0.14,可以在jupyter中使用此软件。

最简单的例子

import schemdraw
import schemdraw.element as ele

with schemdraw.Drawing():
    elm.Resistor()
    elm.Capacitor().down()
    elm.Diode().color('red').left()
    elm.SourceV().label("3V").up()

在这里插入图片描述

一、总体思路

  1. 在设计者看来,电路图是由电路元件按照一定顺序连接而成。
  2. 元件:具备一定的属性最常见的是label、color、length等等。
  3. 布局:大部分电路图很简单,是一堆元件依次连接形成的,在绘制过程中,您都是在前一个元件的端点上绘制下一个,只需要在绘制的过程中把握好方向就行了。当然复杂电路上,有可能需要在某个之前很早画好的元件上画下一个元件,这就涉及改鼠标焦点,设计者也预留了方法。

接下来,本文先介绍电子元件及其一些简单属性和方法,再介绍电子元件的连接及其一些比较深入的属性和方法。

二、元件

Schemdraw的元件,在schemdraw.element包下,需要用到哪些元件您看其介绍就好。下面讲他们的一些属性介绍。

2.1 color

with schemdraw.Drawing() as draw:
	# 1. color函数链式调用
	elm.Capacitor().color('#A0F')
	
	# 2. 初始化元素
	elm.Diode(color="red")

在这里插入图片描述

习题

2.1.1 color函数支持6位的RGB数值吗?

2.2 label

label除了显示正常文字,也支持latex语法,loc属性注明其位置;同时,也支持label链式连续调用,以满足多处注释的需求。

with schemdraw.Drawing() as draw:
    elm.Capacitor().label("$3uf$", loc="bottom").\
       label("left", loc='left').\
       label("right", loc='right').\
       label("top", loc='top')

在这里插入图片描述

2.3 length

元件都有默认长度,一般为3,您也可以尝试改变一下。别问我3的单位是啥,我也不知道,这是设计者自己设定的,它仅仅是电子元器件间长度的绝对数值,应该不是物理意义上的绝对数值。

with schemdraw.Drawing() as draw:
    d = elm.Diode(color='red', label='3')
    
with schemdraw.Drawing() as draw:
    d = elm.Diode(label='2').length(2)
    
with schemdraw.Drawing() as draw:
    d = elm.Diode(label='2.5').length(2.5)
    
with schemdraw.Drawing() as draw:
    d = elm.Diode(label='5').length(5)

在这里插入图片描述

三、元件的连接

回想一下,我们在纸上画图的过程,不难发现:您一般都是在上一个元件的末尾,开始画下一个元件的,尤其是简单串联电路上,肯定遵守这个法则。有时,您的元件需要拐弯,也就是改变了画笔的方向,而且下一个元件也延续在这个方向上画。最后,您也时常会画好一个子部分后,在另外一个元件的某个接线点上继续画原件。在上面过程中,提到设计者最核心的三个设计点:接线点、方向和延续性
下面进行讲解。

3.1 延续性

延续性,在其底层实现是:设计者将类似鼠标焦点的东西,每次都迁移到最新的元件的其他接线点上,如下代码:起初,存在一个鼠标焦点,用户定义了一个二极管对象后,二极管一端接到这个鼠标焦点上,然后二极管另一端就变成新的鼠标焦点接上后续定义的电容,再转移鼠标焦点,接新的电阻对象…,依次画元件变更新的鼠标焦点,完成此幅电路图。

with schemdraw.Drawing() as draw:
    # 在上一个元件的尾部画下一个元件
    # 方向保持不变
    # 第一组 三个元件
    elm.Diode()
    elm.Capacitor()
    elm.Resistor()
    # 第二组 两个元件
    elm.Diode(color="red").up()
    elm.Capacitor(color="red")
    # 第三组 三个元件
    elm.Diode(color="blue").left()
    elm.Capacitor(color="blue")
    elm.Resistor(color="blue")

在这里插入图片描述
在上述很容易看到方向和鼠标焦点的延续性。另外设计者,这样子隐式地规定了各元件间连接搭配,既符合我们日常画图顺序,又省去大量代码描述元件的连线,实在优秀。

习题

3.3.1 还有哪些功能上,可能存在这种延续性???您可以在看完文章后,再来回答这个问题。

3.2 方向

方向,就是你在纸上画这个元件时的走向,也就是元件起点到结束点的走向。有两种实现,一种是利用elm的up,left,right,down,另一种是用偏转角度函数theta来表示,theta是希腊字母 θ \theta θ的读音,在数学上用来表示角度。

wwith schemdraw.Drawing() as draw:
    elm.Diode().label("默认方向是向右画")
    elm.Capacitor().down().label("向下画")
    elm.Resistor(color="red").theta(60).label("60度画", loc='bottom')
    elm.Resistor(color="blue").theta(300).label("300度")

在这里插入图片描述

习题

3.2.1 为什么是up,down两个单词来表示,而不是top,bottom?

3.2.2 如下代码,会画出什么有意思的?

with schemdraw.Drawing() as draw:
    elm.Diode().label("默认方向是向右画")
    elm.Capacitor().down().label("向下画")
    elm.Diode(color="red").up().label("向上画", loc='bottom')

3.2.3 请问theta函数的0度时,元件走向如何?90度呢?180度?270度?360度?如下代码,请猜一下如何画?

with schemdraw.Drawing():
    elm.Resistor().theta(0)

3.3 接线点

接线点,就是元件的电线接入点,设计者给它取名为anchor。在schemdraw中,元件分为两种:一种是有五个anchors,一般分别叫做start,end,center, istart, iend,大多数都属于这种,如二极管、电阻、电容,其中三极管这类的,含有一些有名的anchors;一种是只有一个anchors,比如接地符号。

with schemdraw.Drawing():
    # 电阻R1 具有五个接线anchor名字分别为start,end,center,istart,iend。 
    # 其中start和end是电线接入点,center也是一个接入点,但是电阻,电容这类元件没啥用。
    # 使用label函数中的loc将sec三个字符分别显示到对应的点上。
    R1 = elm.Resistor().label("s", loc='start').label("e", loc="end").label("c", loc="center")
    # istart,iend是电阻元器件本身的起始位置,一般用不到
    # 现在给您展示下,生成一个接地符号,挂在R1的istart位置上。
    g1 = elm.Ground().at(R1.istart).color("red")

在这里插入图片描述
在下面您可以看出,如何查看一个元素的有多少个anchor,及其具体的名字,而anchor是元件的一个重要属性,是一个个二维坐标点,是设计者预留给使用者的绘图接口,属于较为高级的内容。
在这里插入图片描述
一般而言,常用型元器件中,电容电阻二极管电源,它们最常用的anchor是start和end,大家也没有管用叫法,所以统一叫做start和end。
但是对于三极管这种的话,每个anchor是有各自不同的命名的如下:
在这里插入图片描述

习题

3.3.1 运行如下代码,为啥没有东西?

import schemdraw.elements as elm
R1 = elm.Diode()
print(R1.anchors)

3.3.2 您觉得anchor功能有哪些设计亮点?

3.3.1 默认激活anchor与沉默anchor

绘图时,设计者规定,电路图中所有anchor中,有且只有一个默认激活anchor,也就是鼠标焦点,其它均为沉默anchor。

3.3.2 切换鼠标焦点机制

设计者有一套自动的鼠标焦点切换管理机制,一般情况下,当您画了一个元件后,鼠标焦点默认在您当前的元件的默认结束接线点,也就是延续性。

3.3.2.1 at函数规定元件的start接在哪个anchor上

只是碰到一些复杂电路时,需要将鼠标焦点切换到其他元件的某接线点上。推荐您使用at函数如下:

with schemdraw.Drawing():
    r1 = elm.Diode().label("第一个元件")
    elm.Capacitor().label("第二个元件")
    # 使用at函数,at函数为当前元件指定其开始点即start anchor接在某元件的某anchor上。
    elm.Resistor(color="red").up().at(r1.start).label("第三个元件", loc='bottom')

在这里插入图片描述

3.3.2.2 to函数规定元件的end接线在哪里
with schemdraw.Drawing():
    R1 = elm.Resistor().label("R1")
    C2 = elm.Capacitor().down().label("C2")
    D3 = elm.Diode().color('red').left().label("D3")
    R2 = elm.Resistor().at(R1.start).to(C2.end).label("R2")
    elm.Dot(color="blue")

在这里插入图片描述

3.3.2.3 anchor函数规定当前元件用那个anchor与其他元件对接
with schemdraw.Drawing():
    R1 = elm.Resistor().label("R1")
    C2 = elm.Capacitor().down().label("C2")
    D3 = elm.Diode().color('red').left().label("D3")
    jit1 = elm.BjtNpn().label("bji1")
    elm.Dot(color="blue")
    jit2 = elm.BjtNpn().anchor("collector").at(R1.start).label("bji2")

在这里插入图片描述

习题

二极管适合用anchor函数吗?

四、自定义元件

五、附加介绍:制作GiF

六、升华习题

6.1 请问您觉得设计者的编程方法是否别扭?这种别扭带来的好处是什么?

6.2 请问您是否觉得schemdraw是否在编程上是相对高效的?体现在哪里?

6.3 请问本文第一个例子中,schemdraw是怎么将之自动封口成为一个四方形的?

习题答案

仅供参考,开放题目!

3.1.1 其他都不会具备延续性了,因为纸上画图也是这样的,只有这两处具备不变性。颜色,大小,等等都会变的,或者是可以全局设置的。

3.2.1 因为up,down是说向上向下画,top和bottom表示一张图中的上下位置。

3.2.2 会覆盖,如下图,而且可以看到,作者是多么相信我们呀!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值