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

2024-03-26 01:28

本文主要是介绍Schemdraw小白从入门到放弃---原理工具书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 版本
  • 最简单的例子
  • 一、总体思路
  • 二、元件
    • 2.1 color
      • 习题
    • 2.2 label
    • 2.3 length
  • 三、元件的连接
    • 3.1 延续性
      • 习题
    • 3.2 方向
      • 习题
    • 3.3 接线点
      • 习题
      • 3.3.1 默认激活anchor与沉默anchor
      • 3.3.2 切换鼠标焦点机制
        • 3.3.2.1 at函数规定元件的start接在哪个anchor上
        • 3.3.2.2 to函数规定元件的end接线在哪里
        • anchor函数规定当前元件用那个anchor与其他元件对接
          • 习题
  • 四、自定义元件
  • 五、附加介绍:制作GiF
  • 六、升华习题
  • 习题答案

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

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

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

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

版本

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

最简单的例子

import schemdraw
import schemdraw.element as elewith 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")

在这里插入图片描述

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 会覆盖,如下图,而且可以看到,作者是多么相信我们呀!
在这里插入图片描述

这篇关于Schemdraw小白从入门到放弃---原理工具书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/846880

相关文章

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中