Altium 分形天线设计

程序运行界面

Cantor三分集

Koch雪花

Sierpinski垫片

源代码:

Iter_Num = 4     'diedai

PI = 3.1415926

Call Client.StartServer("PCB")

PcbFileName = "PCB1.PcbDoc"

Set Document  = Client.OpenDocument("PCB", PcbFileName)

If Not (Document Is Nothing) Then

'Add this schematic sheet in the newly created PCB project in DXP.

Set Workspace = GetWorkspace

If Not (Workspace Is Nothing) Then

Workspace.DM_FocusedProject.DM_AddSourceDocument(Document.FileName)

End If

Client.ShowDocument(Document)

End If

'Draw Line Function

Sub Paint_Line(x1,y1,x2,y2)

Dim Board

Dim Track

Set Board = PCBServer.GetCurrentPCBBoard

Track          = PCBServer.PCBObjectFactory(eTrackObject,eNoDimension,eCreate_Default)

Track.X1       = MilsToRealCoord(CLng(x1)+Board.GetState_XOrigin/10000)

Track.Y1       = MilsToRealCoord(CLng(y1)+Board.GetState_XOrigin/10000)

Track.X2       = MilsToRealCoord(CLng(x2)+Board.GetState_XOrigin/10000)

Track.Y2       = MilsToRealCoord(CLng(y2)+Board.GetState_XOrigin/10000)

Track.Layer    = eTopLayer

Track.Width    = MilsToCoord (10)

Board.AddPCBObject(Track)

Board.LayerIsDisplayed(ALayer) = True

End Sub

'Draw rectangle Function

Sub Paint_Rectangle(x1,y1,x2,y2)

call Paint_Line(x1,y1,x2,y1)

call Paint_Line(x1,y1,x1,y2)

call Paint_Line(x1,y2,x2,y2)

call Paint_Line(x2,y1,x2,y2)

End Sub

Sub Action_Redraw()

Call Client.SendMessage("PCB:Zoom","Action=Redraw", 255, Client.CurrentView)

Call Client.SendMessage("PCB:Zoom","Action=All", 255, Client.CurrentView)

End Sub

'SetState_Origin

Sub Set_Origin()

Set Board = PCBServer.GetCurrentPCBBoard

Board.SetState_YOrigin(40000000)

Board.SetState_XOrigin(40000000)

End Sub

Sub Board_Shape()

Call AddStringParameter("Scope", "All")

RunProcess("PCB:Select")

Call AddStringParameter("Mode", "BOARDOUTLINE_FROM_SEL_PRIMS")

RunProcess("PCB:PlaceBoardOutline")

Call AddStringParameter("Size", "2.500MM")

RunProcess("PCB:SnapGrid")

Call AddStringParameter("MeasurementUnit", "Toggle")

RunProcess("PCB:DocumentPreferences")

End Sub

Sub CantorClick(Sender)

Board_chang = 100/0.0254

Board_kuan = 100/0.0254

Iter_Num = 5

call Set_Origin()

call Paint_Rectangle(0,0,Board_chang,Board_kuan)

Call Board_Shape()

Call Cantor_digui(0,0,Board_chang,0,Iter_Num)

Action_Redraw()

Close

End Sub

Sub  Cantor_digui(ax,ay,bx,by,m)

If m=1 Then

Call Paint_Line(ax,ay,bx,by)

Else

Call Paint_Line(ax,ay,bx,by)

cx=ax+(bx-ax)/3

cy=ay+100

dx=bx-(bx-ax)/3

dy=by+100

ay=ay+100

by=by+100

Call Cantor_digui(ax,ay,cx,cy,m-1)

Call Cantor_digui(dx,dy,bx,by,m-1)

End If

m=m-1

End Sub

Sub KochClick(Sender)

Board_chang = 100/0.0254

Board_kuan  = 100/0.0254

m = Board_chang

Iter_Num = 11

call Set_Origin()

call Paint_Rectangle(0,0,Board_chang,Board_kuan)

Call Board_Shape()

Action_Redraw()

Call Fractal(m/2-sqr(3)/2*m/2,m/2+m/4,m/2+sqr(3)/2*m/2,m/2+m/4,Iter_Num)

Call Fractal(m/2,m/2-m/2,m/2-sqr(3)/2*m/2,m/2+m/4,Iter_Num)

Call Fractal(m/2+sqr(3)/2*m/2,m/2+m/4,m/2,m/2-m/2,Iter_Num)

Action_Redraw()

Close

End Sub

Sub Fractal(ax,ay,bx,by,Iter_Num)

if Iter_Num = 1 Then

Call Paint_Line(ax,ay,bx,by)

else

cx=ax+(bx-ax)/3

cy=ay+(by-ay)/3

ex=bx-(bx-ax)/3

ey=by-(by-ay)/3

Call Fractal(ax,ay,cx,cy,Iter_Num-1)

Call Fractal(ex,ey,bx,by,Iter_Num-1)

l=sqr((ex-cx)*(ex-cx)+(ey-cy)*(ey-cy))

alfa=Atn((ey-cy)/(ex-cx))

if ((alfa>=0 And (ex-cx)<0) Or (alfa<0 And (ex-cx)<0)) Then

alfa=alfa+PI

End if

dx=cx+cos(alfa+PI/3)*l

dy=cy+sin(alfa+PI/3)*l

Call Fractal(cx,cy,dx,dy,Iter_Num-1)

Call Fractal(dx,dy,ex,ey,Iter_Num-1)

End If

End Sub

Sub ArboresentClick(Sender)

prate=1.5

theta=atn(sqr(4/prate/prate-1))

t=PI-4*theta

alfa=55*PI/180

leval=1

x=500

y=500

size1=3000

Call DrawArboresent(x,y,size1,prate,alfa,thata,t,lexel)

End Sub

Sub DrawArboresent(x,y,size1,prate,alfa,thata,t,lexel)

L_X=200

L_Y=300

l=size1/prate

xe=x

ye=y

xa=x+size1*cos(alfa)

ya=y+size1*sin(alfa)

xb=x+l*cos(alfa-theta)

yb=y+l*sin(alfa-theta)

xc=x+l*cos(alfa-theta-t)

yc=x+l*sin(alfa-theta-t)

xd=x+size1*cos(alfa-theta*2-t)

yd=x+size1*sin(alfa-theta*2-t)

if level<=1 Then

Call Paint_Line(L_X-xa/15,L_Y-ya/15,L_X-xe/15,L_Y-ye/15)

Call Paint_Line(L_X-xe/15,L_Y-ye/15,L_X-xd/15,L_Y-yd/15)

Call Paint_Line(L_X-xd/15,L_Y-yd/15,L_X-xc/15,L_Y-yc/15)

Call Paint_Line(L_X-xc/15,L_Y-yc/15,L_X-xe/15,L_Y-ye/15)

Call Paint_Line(L_X-xe/15,L_Y-ye/15,L_X-xb/15,L_Y-yb/15)

Call Paint_Line(L_X-xb/15,L_Y-yb/15,L_X-xa/15,L_Y-ya/15)

End if

Call DrawArboresent(xb,yb,l,prate,alfa-theta+pi,thata,t,lexel-1)

Call DrawArboresent(xc,yc,l,prate,alfa-theta+pi,thata,t,lexel-1)

End Sub

Sub LevyClick(Sender)

m = (100/0.0254)

call Set_Origin()

call Paint_Rectangle(0,0,m,m)

Call Board_Shape()

Call drawC(0,0,10000,0)

Action_Redraw()

Close()

End Sub

Sub drawC(x1,y1,x2,y2)

if (x2-x1)<5 Then

Call Paint_Line(x1,y1,x2,y2)

else

Call Paint_Line(x1,y1,x2,y2)

x3=(x1+y1+x2-y2)/2

y3=(x2+y2+y1-x1)/2

Call Paint_Line(x1,y1,x3,y3)

Call Paint_Line(x3,y3,x2,y2)

Call drawC(x1,y1,x3,y3)

Call drawC(x3,y3,x2,y2)

End if

End Sub

Sub SierpinskiClick(Sender)

m = (100/0.0254)

Iter_Num = 7

call Set_Origin

call Paint_Rectangle(0,0,m,m)

Call Board_Shape()

Action_Redraw()

Call Sier(0,0,m,m,Iter_Num)

Action_Redraw()

Close()

End Sub

kkk=1

Sub Sier(x1,y1,x2,y2,k)

L=x2-x1

W=y2-y1

Set Board = PCBServer.GetCurrentPCBBoard

Region = PCBServer.PCBObjectFactory(eRegionObject, eNoDimension,eCreate_Default)

Contour = Region.MainContour.Replicate

Region.Layer = eTopLayer

Contour.Count = 4

if k=1 Then

Contour.X(1) = MilsToCoord(x1+L/3)

Contour.Y(1) = MilsToCoord(y1+W/3)

Contour.X(2) = MilsToCoord(x2-L/3)

Contour.Y(2) = MilsToCoord(y1+W/3)

Contour.X(3) = MilsToCoord(x2-L/3)

Contour.Y(3) = MilsToCoord(y2-W/3)

Contour.X(4) = MilsToCoord(x1+L/3)

Contour.Y(4) = MilsToCoord(y2-W/3)

Call Contour.Translate(MilsToCoord(4000), MilsToCoord(4000))

Region.SetOutlineContour(Contour)

Region.Kind = 1

Board.AddPCBObject(Region)

else

Contour.X(1) = MilsToCoord(x1+L/3)

Contour.Y(1) = MilsToCoord(y1+W/3)

Contour.X(2) = MilsToCoord(x2-L/3)

Contour.Y(2) = MilsToCoord(y1+W/3)

Contour.X(3) = MilsToCoord(x2-L/3)

Contour.Y(3) = MilsToCoord(y2-W/3)

Contour.X(4) = MilsToCoord(x1+L/3)

Contour.Y(4) = MilsToCoord(y2-W/3)

Call Contour.Translate(MilsToCoord(4000), MilsToCoord(4000))

Region.SetOutlineContour(Contour)

Region.Kind = 1

Board.AddPCBObject(Region)

Call Sier(x1,y1,x1+L/3,y1+W/3,k-1)

Call Sier(x1+L/3,y1,x2-L/3,y1+W/3,k-1)

Call Sier(x2-L/3,y1,x2,y1+W/3,k-1)

Call Sier(x1,y1+W/3,x1+L/3,y2-W/3,k-1)

Call Sier(x2-L/3,y1+W/3,x2,y2-W/3,k-1)

Call Sier(x1,y2-W/3,x1+L/3,y2,k-1)

Call Sier(x1+L/3,y2-W/3,x2-L/3,y2,k-1)

Call Sier(x2-L/3,y2-W/3,x2,y2,k-1)

End if

if kkk=1000 Then

Call Client.SendMessage("PCB:Zoom","Action=Redraw" , 255, Client.CurrentView)

kkk=1

End if

kkk=kkk+1

End Sub

Altium 分形天线设计的更多相关文章

  1. 2.4G高频PCB天线设计

    2.4G高频PCB天线设计 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.   参考链接: http://bbs.rfeda.cn/read-htm-t ...

  2. 射频识别技术漫谈(21)——RC系列射频芯片的天线设计

    个人感觉使用RC系列射频芯片开发卡片读写器,主要的关键点有两个,分别涉及硬件和软件.软件上的关键是如何正确设置RC系列射频芯片内部的64个寄存器,硬件上的关键则是RC系列射频芯片的天线设计.天线提供了 ...

  3. Altium Designer 多通道设计

    转chenzelin2009的csdn博客:http://blog.csdn.net/chenzelin2009/article/details/5751251# Altium Designer的多图 ...

  4. 每天进步一点点------Altium Designer PCB设计规则中英对照

    Electrical(电气规则) Clearance:安全间距规则 Short Circuit:短路规则 UnRouted Net:未布线网络规则 UnConnected Pin:未连线引脚规则 Ro ...

  5. [转]ZigBee On Windows Mobile--ZigBee模块天线设计

    原文出处:http://www.cnblogs.com/dearsj001/archive/2008/10/26/1320029.html

  6. Y分形的平面微带天线生成过程

    Y分形的平面微带天线生成过程 本文介绍了使用Altium Designer脚本程序生成Y型天线的过程,在窗体中线宽.迭代次数,边框长度可以直接设置. Y分形天线用户界面由一个窗体.1个TImage控件 ...

  7. Mysql存储引擎之TokuDB以及它的数据结构Fractal tree(分形树)

    在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文 ...

  8. Altium Designer PCB制作入门实例

    概要:本章旨在说明如何生成电路原理图.把设计信息更新到PCB文件中以及在PCB中布线和生成器件输出文件.并且介绍了工程和集成库的概念以及提供了3D PCB开发环境的简要说明.欢迎使用Altium De ...

  9. Altium Designer规划电路板

           所谓规划电路板就是根据电路的规模以及用户的需求,确定所要制作电路板的物理外形尺寸和电气边界.电路板规划的原则是在满足用户要求的前提下,使板面美观而且利于后面的布线工作. 1. 定义板的外 ...

随机推荐

  1. TCP数据报结构以及三次握手(图解)

    简要介绍 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的.可靠的.基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接.客户端在收发 ...

  2. 数据采集实战:通过Python获取和分析Google趋势中Covid-19的关注程度

    在传染病研究领域,社交媒体数据已被证明可作为预测感冒和流感季节的发作和进展的指标.在本文中,我们将使用Google Trends API来衡量与冠状病毒的状态.我们将使用python谷歌趋势API p ...

  3. go源码分析(三) 使用go http包开发web时遇到的坑之卸载插件,重启插件管理,仍然可以访问已经卸载的插件

    问题描述: web页面下发重启指令后,对卸载插件的处理不完整(虽然列表已经没有插件描述,但是在HandleFunc的路由列表中依然存在) 我们需要清空路由列表map 路由列表结构见代码: net/ht ...

  4. JavaScript数组排序(冒泡排序、选择排序、桶排序、快速排序)

    * 以下均是以实现数组的从小到大排序为例 1.冒泡排序 先遍历数组,让相邻的两个元素进行两两比较 .如果要求小到大排:最大的应该在最后面,如果前面的比后面的大,就要换位置: 数组遍历一遍以后,也就是第 ...

  5. CSS每日学习笔记(0)

    7.29.2019 1. CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解 ...

  6. 一些http知识

    一些http知识 前置知识 首先放一张非常经典的计算机网络 关于五层结构 「物理层」「数据链路层」「网络层」「运输层」「应用层」我们依次来讲 我们拿wireshark 抓个http包看一下就能明白各层 ...

  7. 金三银四,还在为spring源码发愁吗?bean生命周期,看了这篇就够了

    第一,这绝对是一个面试高频题. 比第一还重要的第二,这绝对是一个让人爱恨交加的面试题.为什么这么说?我觉得可以从三个方面来说: 先说会不会.看过源码的人,这个不难:没看过源码的人,无论是学.硬背.还是 ...

  8. 欲善事先利器-IEAD插件篇

    工欲善其事,必先利其器,好鞋踢好球是非常合乎逻辑的事情. --<长江七号> 同样的开场白,不一样的酒,不一样的故事. 上篇<欲善事先利器--系统篇>已经推荐了一些个人常用的效率 ...

  9. 2020年Java基础高频面试题汇总(1.4W字详细解析)

    1. Java语言有哪些特点 (1)简单易学.有丰富的类库 (2)面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) (3)与平台无关性(JVM是Java跨平台使用的根本) (4)可靠安全 ...

  10. [暴力+前缀和]2019牛客暑期多校训练营(第六场)Upgrading Technology

    链接:https://ac.nowcoder.com/acm/contest/886/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...