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

news2024/9/21 5:46:37

文章目录

  • 版本
  • 最简单的例子
  • 一、总体思路
  • 二、元件
    • 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 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")

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1543845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS08-DOM节点完整版

DOM节点 查找节点 父节点 <div class="father"><div class="son">儿子</div></div><script>let son = document.querySelector(.son)console.log(son.parentNode);son.parentNode.style.display = none</script>通过…

C语言---------strlen的使用和模拟实现

字符串是以‘\0’作为结束标志&#xff0c;strlen函数的返回值是‘\0’前面的字符串的个数&#xff08;不包括‘\0’&#xff09; 注意 1&#xff0c;参数指向的字符串必须以‘\0’结束 2&#xff0c;函数的返回值必须以size_t,是无符号的 使用代码 ​ #include<stdio.…

力扣438. 找到字符串中所有字母异位词

Problem: 438. 找到字符串中所有字母异位词 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.编写辅助函数bool same(vector& need, vector& matched)&#xff1a; 1.1 以need为标准&#xff0c;循环对比need和matched的每一个位置的元素值是否相等 2.获…

RabbitMQ 安装保姆级教程

目录 1.MQ引言 1.1 什么是MQ 1.2 MQ有哪些 1.3 不同MQ特点 2.RabbitMQ 的引言 2.1 RabbitMQ 2.2 RabbitMQ 的安装 2.2.1 下载 2.2.2 下载的安装包 2.2.3 安装步骤 3. RabiitMQ 配置 3.1RabbitMQ 管理命令行 3.2 web管理界面介绍 3.2.1 overview概览 3.2.2 Admin用…

【c++】类和对象(三)构造函数和析构函数

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章我们带来类和对象重要的部分&#xff0c;构造函数和析构函数 目录 1.类的6个默认成员函数2.构造函数2.1构造函数其他特性 3.构析函数3.1特性&#xff1a;…

【JavaSE】继承和多态

目录 前言 1. static 1.1 static修饰成员变量 1.2 类变量的使用场景 1.3 static修饰成员方法 2. 代码块 3. 继承 3.1 为什么会有继承 3.2 继承的语法 3.3 继承后成员的访问 super关键字 3.4 子类的构造器 super和this的联系 继承中的代码块 4. 多态 4.1 多态的…

翻过DP这座大山

1.AcWing 跳台阶 第一种方法:暴力搜索DFS #include <iostream> using namespace std;int dfs(int n) {if(n 1) return 1;else if(n 2) return 2;else return dfs(n-1)dfs(n-2); }int main() {int x; cin>>x;cout<<dfs(x)<<endl;return 0; }显然如…

hcia datacom课程学习(3):http与https、FTP

1.超文本传输协议&#xff1a;http与https &#xff08;1&#xff09;用来访问www万维网。 wwwhttp&#xff0b;html&#xff0b;URLweb &#xff08;2&#xff09;它们提供了一种发布和接受html界面的方法&#xff1a;当在网页输入URL后&#xff0c;从服务器获取html文件来…

3种货币对保证金和杠杆关系,众汇实例分享

在外汇交易中货币对总共分为3种&#xff1a;主要货币对、交叉货币对和新兴市场货币对&#xff0c;这3种不同的货币对保证金和杠杆的关系各自不同&#xff0c;今天众汇外汇实例分享。 1.直接引用 直接报价是美元在分数中处于第二位的外汇汇率。 保证金持仓量*合约规模/杠杆*开…

QT常见Layout布局器使用

布局简介 为什么要布局&#xff1f;通过布局拖动不影响鼠标拖动窗口的效果等优点.QT设计器布局比较固定&#xff0c;不方便后期修改和维护&#xff1b;在Qt里面布局分为四个大类 &#xff1a; 盒子布局&#xff1a;QBoxLayout 网格布局&#xff1a;QGridLayout 表单布局&am…

软件测试|使用selenium进行多窗口操作

简介 在我们进行自动化测试的工作中&#xff0c;经常会点击某个元素或者链接就会自动打开一个新页面&#xff0c;需要我们转到新打开的页面去进行操作&#xff0c;这个时候我们就需要能够自动切换到新页面进行后续的操作&#xff0c;selenium同样支持这个功能&#xff0c;本文…

CSS设置移动端页面底部安全距离

env(safe-area-inset-bottom)是一个CSS属性值&#xff0c;用于设置底部安全距离。它表示使用环境变量来获取底部安全距离的值。当使用环境变量时&#xff0c;需要使用env()函数来引用具体的环境变量。例如&#xff1a; <style> .box{padding-bottom: env(safe-area-inse…

Java 算法和数据结构 答案整理,最新面试题

Java中如何使用动态规划求解背包问题&#xff1f; 1、定义子问题&#xff1a; 首先确定动态规划状态&#xff0c;通常以物品数量和背包容量为变量定义子问题&#xff0c;例如dp[i][j]表示前i件物品放入容量为j的背包所能获得的最大价值。 2、确定状态转移方程&#xff1a; 基…

​ 翻译 《The Old New Thing》

今天开始&#xff0c;为大家翻译微软优秀的技术专栏 The Old New Thing。 由微软高级工程师 Raymond Chen 撰写。该专栏起初是一个博客&#xff0c;后来也出版了同名书籍。专栏主要围绕 Windows 操作系统的开发和设计展开&#xff0c;涵盖了 Windows 平台的历史、技术细节、编程…

maven的依赖继承

先说一下创建子maven工程的步骤 继承 继承的作用&#xff1a;在父工程中&#xff0c;统一管理项目中的依赖信息&#xff0c;进行统一的版本控制 继承的背景是&#xff1a;对一个大型的项目进行了模块拆分&#xff0c;一个project下&#xff0c;创建了很多的module&#xff0c…

机器学习——随机森林

机器学习——随机森林 随机森林是一种强大的集成学习算法&#xff0c;能够用于分类和回归任务。它基于决策树构建&#xff0c;在集成学习框架下&#xff0c;通过Bagging算法和随机特征选择的方式&#xff0c;将多棵决策树组合成一个更强大的模型。本篇博客将介绍随机森林的原理…

计算机专业大学生应该在大学四年踏实学哪些东西?

在这个信息爆炸的时代&#xff0c;对于我们计算机专业的大学生来说&#xff0c;真正难的不是学习新技术&#xff0c;而是决定学什么、放弃什么。时间毕竟有限&#xff0c;每一个选择都像是在做一笔投资&#xff0c;希望能够收获最大的回报。我在这里分享一下我的一些经验&#…

服务器被攻击有什么表现?

引言 在现今高度互联的网络环境中&#xff0c;服务器安全已成为每个企业和个人站长不容忽视的重要议题。服务器作为承载关键业务和数据的核心设施&#xff0c;一旦遭受攻击&#xff0c;不仅可能导致服务中断、数据泄露&#xff0c;还可能带来严重的经济损失和声誉损害。本文旨…

【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项规程

培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;775454947 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 极安云科专注于技能提升&#xff0c;赋能 2024年广东省高校的技能提升&#xff0c;在培训中我们的应急…

unity 多屏幕操作

想了解基础操作请移步&#xff1a;&#xff08;重点是大佬写的好&#xff0c;这里就不再赘述&#xff09; Unity 基础 之 使用 Display 简单的实现 多屏幕显示的效果_unity display-CSDN博客 在panel上也可以通过获取 Canvas&#xff0c;来达到切换多屏幕的操作&#xff0c; …