luceda ipkiss教程 53:在版图上加中文

要在版图上加中文,如:
在这里插入图片描述
可以通过如下方法实现:
首先,可以在ppt中加入文本框,在文本框中输入想要加到版图上的中文内容,如,复旦大学,并将文本框存为windows位图。
其次,通过如下代码就可以得到中文对应的版图:

# Copyright (C) 2021 Luceda
from technologies import silicon_photonics
import ipkiss3.all as i3

PIL_loaded = False
try:
    from PIL import Image

    PIL_loaded = True
except:
    pass

try:
    import Image

    PIL_loaded = True
except:
    pass

if not PIL_loaded:
    raise AssertionError(" PIL should be installed")


class BitmapGrating(i3.PCell):
    image = i3.DefinitionProperty()
    pixel = i3.ChildCellProperty()

    class Layout(i3.LayoutView):
        pixel_pitch = i3.Size2Property(default=(2.0, 2.0))

        def _generate_instances(self, insts):
            im = self.image
            w = im.size[0]
            h = im.size[1]
            pixels = im.getdata()

            period_x = self.pixel_pitch[0]
            period_y = self.pixel_pitch[1]

            for y in range(h):
                pen_down = False
                for x in range(w):
                    p = pixels[x + y * w]
                    if not pen_down:
                        if p == 0:
                            pen_down = True
                            start_x = x
                    elif not p == 0:
                        pen_down = False
                        n_x = x - start_x
                        if n_x > 1:
                            insts += i3.ARef(reference=self.pixel, origin=(start_x * period_x, -y * period_y),
                                             period=(period_x, period_y), n_o_periods=(n_x, 1))
                        else:
                            insts += i3.SRef(reference=self.pixel, position=(start_x * period_x, -y * period_y))
                if pen_down:
                    n_x = x - start_x + 1
                    if n_x > 1:
                        insts += i3.ARef(reference=self.pixel, origin=(start_x * period_x, -y * period_y),
                                         period=(period_x, period_y), n_o_periods=(n_x, 1))
                    else:
                        insts += i3.SRef(reference=self.pixel, position=(start_x * period_x, -y * period_y))

            return insts


class BitmapGratingFromFile(BitmapGrating):
    image = i3.LockedProperty()
    filename = i3.StringProperty()

    def _default_image(self):
        return Image.open(self.filename).convert("1")


class SquareBitmapGrating(BitmapGrating):
    pixel = i3.ChildCellProperty(locked=True)

    def _default_pixel(self):
        from picazzo3.phc.generic.holes import RectHole
        return RectHole(name="{}_pixel".format(self.name))
        # return i3.Rectangle(layer=self.layer,box_size=self.pixel_size)

    class Layout(BitmapGrating.Layout):
        # pass
        pixel_size = i3.Size2Property(default=(1.0, 1.0))
        layer = i3.LayerProperty(default=i3.TECH.PPLAYER.WG.HOLE)

        def _default_pixel(self):
            lv = self.cell.pixel.get_default_view(i3.LayoutView)
            lv.set(radii=(0.5 * self.pixel_size[0], 0.5 * self.pixel_size[1]), process=self.layer.process,
                   purpose=self.layer.purpose)
            return lv


class SquareBitmapGratingFromFile(BitmapGratingFromFile, SquareBitmapGrating):
    """ Load a bitmap from file and convert it to a grating:
        SquareBitmapGratingFromFile(filename = "xxx", pixel_size = (x,y), pixel_pitch = (x,y))
        """
    pass


if __name__ == '__main__':
    logo = SquareBitmapGratingFromFile(name="fudan", filename="fudan.bmp")
    logo_layout = logo.Layout(pixel_size=(1.5, 1.5), pixel_pitch=(3., 3.))
    logo_layout.write_gdsii("fudan.gds")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java八股 mysql优化

数据库篇-01-MySQL篇-课程介绍_哔哩哔哩_bilibili 1.定位慢查询 2.分析优化慢查询 3.索引概念及结构 3.1 红黑树(一种自平衡的二叉排序树) 节点可以自动平衡保证log2 n的查找复杂度. 但因为是二叉树,数据多了层数还会多。 所以找一个多叉树 3…

【MCAL】TC397+EB-treso之MCU配置实战 - 芯片时钟

本篇文章介绍了在TC397平台使用EB-treso对MCU驱动模块进行配置的实战过程,主要介绍了后续基本每个外设模块都要涉及的芯片时钟部分,帮助读者了解TC397芯片的时钟树结构,在后续计算配置不同外设模块诸如通信速率,定时器周期等&…

项目管理4321方法论

文章目录 一、项目立项准备(4步)case1、识别价值---解决背后痛点的才是价值,价值是做任何事情的出发点case2、明确目标---支撑价值实现的,目标是 具体/可衡量/可达到/相关性/有时限的case3、识别干系人---找对人才能做对事&#x…

Android画布Canvas裁剪clipRect,Kotlin

Android画布Canvas裁剪clipRect,Kotlin private fun mydraw() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.A…

差生文具多之(二): perf

栈回溯和符号解析是使用 perf 的两大阻力,本文以应用程序 fio 的观测为例子,提供一些处理它们的经验法则,希望帮助大家无痛使用 perf。 前言 系统级性能优化通常包括两个阶段:性能剖析和代码优化: 性能剖析的目标是寻…

[Unity]接入Firebase 并且关联支付埋点

首先 在这个下一下FireBase的资源 firebase11.0.6 然后导入Analytics Auth Crashlytics 其他的看着加就行 然后直接丢到Unity里面 接下来需要去Firebase里面下载 Google json 丢到 这个下面 然后就是脚本代码了 using System.Collections; using System.Collection…

从mice到missForest:常用数据插值方法优缺点

一、引言 数据插值方法在数据处理和分析中扮演着至关重要的角色。它们可以帮助我们处理缺失数据,使得数据分析更加准确和可靠。数据插值方法被广泛应用于金融、医疗、社会科学等领域,以及工程和环境监测等实际应用中。 在本文中,我们将探讨三…

【教学类-42-02】20231224 X-Y 之间加法题判断题2.0(按2:8比例抽取正确题和错误题)

作品展示: 0-5: 21题,正确21题,错误21题42题 。小于44格子,都写上,哪怕输入2:8,实际也是5:5 0-10 66题,正确66题,错误66题132题 大于44格子,正确66题抽取44*…

php反序列化漏洞原理、利用方法、危害

文章目录 PHP反序列化漏洞1. 什么是PHP反序列化漏洞?2. PHP反序列化如何工作?3. PHP反序列化漏洞是如何利用的?4. PHP反序列化漏洞的危害是什么?5. 如何防止PHP反序列化漏洞?6. PHP反序列化漏洞示例常见例子利用方法PH…

DaVinci各版本安装指南

链接: https://pan.baidu.com/s/1g1kaXZxcw-etsJENiW2IUQ?pwd0531 ​ #2024版 1.鼠标右击【DaVinci_Resolve_Studio_18.5(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 DaVinci_Resolve_Studio_18.5(64bit)】。 2.打开解压后的文…

插入排序之C++实现

描述 插入排序是一种简单直观的排序算法。它的基本思想是将一个待排序的数据序列分为已排序和未排序两部分,每次从未排序序列中取出一个元素,然后将它插入到已排序序列的适当位置,直到所有元素都插入完毕,即完成排序。 实现思路…

【c++】string类的使用

目录 一、标准库中的string类 1、简单介绍string类 2、string类的常用接口注意事项 2.1、string类对象的常用构造 2.2、string类对象的容量操作 2.3、string类对象的访问及遍历操作 2.4、string类对象的修改操作 二、string类的模拟实现 一、标准库中的string类 1、简…

jQuery: 整理3---操作元素的内容

1.html("内容") ->设置元素的内容&#xff0c;包含html标签&#xff08;非表单元素&#xff09; <div id"html1"></div><div id"html2"></div>$("#html1").html("<h2>上海</h2>") …

【期末考试】计算机网络、网络及其计算 考试重点

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 计算机网络及其计算 期末考点 &#x1f680;数…

Flink 客户端操作命令及可视化工具

Flink提供了丰富的客户端操作来提交任务和与任务进行交互。下面主要从Flink命令行、Scala Shell、SQL Client、Restful API和 Web五个方面进行整理。 在Flink安装目录的bin目录下可以看到flink&#xff0c;start-scala-shell.sh和sql-client.sh等文件&#xff0c;这些都是客户…

面向船舶结构健康监测的数据采集与处理系统(一)系统架构

世界贸易快速发展起始于航海时代&#xff0c;而船舶作为重要的水上交通工具&#xff0c;有 其装载量大&#xff0c;运费低廉等优势。但船舶在运营过程中出现的某些结构处应力值 过大问题往往会给运营部门造成重大的损失&#xff0c;甚至造成大量的人员伤亡和严重 的环境污染…

【网络安全/CTF】unseping 江苏工匠杯

该题考察序列化反序列化及Linux命令执行相关知识。 题目 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($thi…

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(三)

钓鱼邮件 当攻击者制作了钓鱼网站、木马程序后&#xff0c;便会想法设法将其传给受害者&#xff0c;而常见的传播方式便是钓鱼网站了。安全意识较差的用户在收到钓鱼邮件后点击邮件中的钓鱼链接、下载附件中的木马程序&#xff0c;便可能遭受攻击&#xff01; 工具简介 Swak…

Altium Designer(AD24)新工程复用设计文件图文教程及视频演示

&#x1f3e1;《专栏目录》 目录 1&#xff0c;概述2&#xff0c;复用方法一视频演示2.1&#xff0c;创建工程2.2&#xff0c;复用设计文件 3&#xff0c;复用方法二视频演示4&#xff0c;总结 欢迎点击浏览更多高清视频演示 1&#xff0c;概述 本文简述使用AD软件复用设计文件…