如下图这是我们熟悉的内层负片散热PAD Symbols,我们CAM制作时,为了满足PCB工厂生产制作能力,,会优化散热PAD尺寸,让热PAD的尺寸符合制作规范要求,通常我们只关注散热PAD的3个指标即可(外环,内环,开口),只要将这3个参数优化到位就可以了。

常规散热PAD 尺寸规范:(在此规范中:内径与外径,是基于孔的尺寸再预大值)

一.问题来了,我们如何更改散热PAD的尺寸

因为在CAM软件中,有N种的散热PAD类型,每一种散热PAD的Symbols对应的是一串文本,如:ths5000x3000x0x4x1000, rc_ths5000x3000x0x4x1000x500xr1000, 我们关注的3个参数就藏在这个串文本中,那直接更改是不可能了。

我们要解决这个问题。我们必须弄清楚,标准散热PAD的Symbols有多少种,每一种散热PAD 3关键参数(外环,内环,开口)所在这串文本位置, 我们可以要建立个散热PAD类,将原始Symbols字符串分解,并提取3个关键参数值, 这样才可以检测这个原始散热PAD尺寸是否符合要求了,符合要求就不更改,不符合要求就更改。

二.一共有多少种散热PAD,每个散热PAD的参数是什么?

共有7种标准散热PAD Symbols

1.Symbols名示例:

1.  ths5000x3000x0x4x1000

外径 内径 角度 开口个数 开口宽度 thr ths
       2.  s_tho5000x3000x45x4x1000 外径

内径 角度 开口个数 开口宽度 s_thr s_ths s_tho
       3. s_ths5000x4000x0x4x500xr1000

外径 内径 角度 开口个数 开口宽度 外圆角半径 s_ths
      4.  sr_ths5000x3000x0x4x1000

外径 内径 角度 开口个数 开口宽度 sr_ths
      5.  rc_ths5000x3000x45x4x1000x500

外径宽 外径高 角度 开口个数 开口宽度 环宽 rc_ths rc_tho
      6.  rc_ths5000x3000x0x4x1000x500xr1000

外径宽 外径高 角度 开口个数 开口宽度 环宽 外圆角半径 rc_ths
      7.  oblong_ths5000x3000x0x4x500x500xs

外径宽 外径高 角度 开口个数 开口宽度 环宽 尾随标识 oblong_ths(*)xs oblong_ths(*)xr

2.Symbols参数图示:

三.代码实现更改散热PAD symbols尺寸

1.更改散热PAD symbols类:

 public class symbolsThr
{
/// <summary>
/// 是否外形尺寸(即无外径长宽)
/// </summary>
public bool isOuterSize
{
get
{
return _isOuterSize;
}
set
{
this._isOuterSize = value;
}
}
private bool _isOuterSize = true;
/// <summary>
/// 散热PAD 外径
/// </summary>
public double OuterSize
{
get
{
return _OuterSize;
}
set
{
this._OuterSize = value;
this._OuterWidthSize = this._OuterSize;
this._OuterHeightSize = this._OuterSize;
this._isOuterSize = true;
}
}
private double _OuterSize;
/// <summary>
/// 散热PAD 外径宽
/// </summary>
public double OuterWidthSize
{
get
{
return _OuterWidthSize;
}
set
{
this._OuterWidthSize = value;
this._isOuterSize = false;
}
}
private double _OuterWidthSize;
/// <summary>
/// 散热PAD 外径高
/// </summary>
public double OuterHeightSize
{
get
{
return _OuterHeightSize;
}
set
{
this._OuterHeightSize = value;
this._isOuterSize = false;
}
}
private double _OuterHeightSize; /// <summary>
/// 散热PAD 内径 即(外径-环宽*2)
/// </summary>
public double InnerSize
{
get
{
return _InnerSize;
}
set
{
this._InnerSize = value;
this._RingWidth = (this._OuterSize - this._InnerSize) * 0.5;
}
}
private double _InnerSize; /// <summary>
/// 散热PAD 环宽
/// </summary>
public double RingWidth
{
get
{
return _RingWidth;
}
set
{
this._RingWidth = value;
this._InnerSize = this._OuterSize - this._RingWidth * ;
}
}
private double _RingWidth; /// <summary>
/// 散热PAD 开口宽
/// </summary>
public double GapWidth
{
get
{
return _GapWidth;
}
set
{
this._GapWidth = value;
}
}
private double _GapWidth; /// <summary>
/// 散热PAD 角度
/// </summary>
public double Angle { get; set; }
/// <summary>
/// 散热PAD 开口个数
/// </summary>
public double GapCount { get; set; }
/// <summary>
/// 散热PAD 外圆角半径
/// </summary>
public double OuterRoundRadius { get; set; } /// <summary>
/// 散热PAD 尾随标识
/// </summary>
public string SymbolsEndString { get; set; } = ""; private string _SymbolsStart;
/// <summary>
/// 初始化
/// </summary>
/// <param name="SymbolsName">原散热PAD symbols</param>
public symbolsThr(string SymbolsName)
{
List<string> symbolsStartList = new List<string>() { "thr", "ths", "s_thr", "s_ths", "s_tho", "sr_ths", "rc_ths", "rc_tho", "rc_ths", "oblong_ths" };
SymbolsName = SymbolsName.Trim().ToLower();
int symbolsID = symbolsStartList.FindIndex(tt => SymbolsName.StartsWith(tt));
if (symbolsID >= )
{
_SymbolsStart = symbolsStartList[symbolsID];
var MathesList = Regex.Matches(SymbolsName, "\\d+\\.?\\d*");
if (symbolsID >= )
{
this.OuterWidthSize = double.Parse(MathesList[].Value);
this.OuterHeightSize = double.Parse(MathesList[].Value);
this.Angle = double.Parse(MathesList[].Value);
this.GapCount = double.Parse(MathesList[].Value);
this.GapWidth = double.Parse(MathesList[].Value);
this.RingWidth = double.Parse(MathesList[].Value);
if (MathesList.Count == && _SymbolsStart == "rc_ths")
this.OuterRoundRadius = double.Parse(MathesList[].Value);
if (_SymbolsStart == "oblong_ths")
this.SymbolsEndString = SymbolsName.Substring(SymbolsName.Length - , ); }
else
{
this.OuterSize = double.Parse(MathesList[].Value);
this.InnerSize = double.Parse(MathesList[].Value);
this.Angle = double.Parse(MathesList[].Value);
this.GapCount = double.Parse(MathesList[].Value);
this.GapWidth = double.Parse(MathesList[].Value);
if (MathesList.Count == && _SymbolsStart == "s_ths")
this.OuterRoundRadius = double.Parse(MathesList[].Value);
}
}
} /// <summary>
/// 获取Symbols
/// </summary>
/// <returns></returns>
public string GetSymbolsThr
{
get
{
string symbolsName = "";
if (_isOuterSize)
{
symbolsName = $"{this._SymbolsStart}{this.OuterSize}x{this._InnerSize}x{this.Angle}x{this.GapCount}x{this.GapWidth}";
symbolsName += this.OuterRoundRadius < 0.01 ? "" : $"xr{this.OuterRoundRadius}";
}
else
{
symbolsName = $"{this._SymbolsStart}{this.OuterWidthSize}x{this.OuterHeightSize}x{this.Angle}x{this.GapCount}x{this.GapWidth}x{this.RingWidth}";
symbolsName += this.OuterRoundRadius < 0.01 ? "" : $"xr{this.OuterRoundRadius}";
symbolsName += string.IsNullOrEmpty(SymbolsEndString) ? "" : $"x{this.SymbolsEndString}";
}
return symbolsName;
}
}
/// <summary>
/// 更改圆形(方形)散热PAD
/// </summary>
/// <param name="OuterSize_">外形</param>
/// <param name="InnerSize_">内径</param>
/// <param name="GapWidth_">开口宽度</param>
/// <returns></returns>
public string SetThrSize(double OuterSize_, double InnerSize_, double GapWidth_)
{
this.OuterSize = (this.OuterSize < OuterSize_) ? OuterSize_ : this.OuterSize;
this.InnerSize = (this.InnerSize < InnerSize_) ? InnerSize_ : this.InnerSize;
this.GapWidth = (this.GapWidth < GapWidth_) ? GapWidth_ : this.GapWidth;
return this.GetSymbolsThr;
}
/// <summary>
/// 更改矩形散热PAD
/// </summary>
/// <param name="OuterWidthSize_">外径宽</param>
/// <param name="OuterHeightSize_">外径高</param>
/// <param name="RingWidth_">环宽</param>
/// <param name="GapWidth_">开口宽度</param>
/// <returns></returns>
public string SetThrSize(double OuterWidthSize_, double OuterHeightSize_, double RingWidth_, double GapWidth_)
{
this.OuterWidthSize = (this.OuterWidthSize < OuterWidthSize_) ? OuterWidthSize_ : this.OuterWidthSize;
this.OuterHeightSize = (this.OuterHeightSize < OuterHeightSize_) ? OuterHeightSize_ : this.OuterHeightSize;
this.RingWidth = (this.RingWidth < RingWidth_) ? RingWidth_ : this.RingWidth;
this.GapWidth = (this.GapWidth < GapWidth_) ? GapWidth_ : this.GapWidth;
return this.GetSymbolsThr;
}
}

2.调用例子:

            symbolsThr symThr = new symbolsThr("s_ths5000x4000x0x4x500xr1000");
string symbols = symThr.SetThrSize(, , ); //更改:外径 内径 开口 改后symbls为 s_ths6000x5000x0x4x1000xr1000

PCB 内层负片散热PAD Symbols尺寸更改方法的更多相关文章

  1. PCB genesis短槽加引导孔实现方法

    一.何为短槽 短槽通常定义:槽长小于2倍槽宽      如:槽长1.8mm,槽宽1.0mm 二.为什么要加短槽加引孔呢 短槽孔在钻孔时孔易偏斜导致槽长偏短, 当槽长宽比越小,则受力越不均匀,在钻第2个 ...

  2. WCF X.b 操作引用了已经从 Y.b 操作导出的消息元素 [http://tempuri.org/:b]。可以通过更改方法名称或使用 OperationContractAttribute 的 Name 属性更改其中一个操作的名称...

    详细错误如下: 很可能由 IncludeExceptionDetailInFaults=true 创建的 ExceptionDetail,其值为: System.InvalidOperationExc ...

  3. Chem 3D模型的参数值更改方法

    在化学绘图软件ChemOffice 15.1中有个专门用于绘制三维结构的组件,就是Chem 3D.通过这个组件用户可以绘制3D模型并可以通过这个组件来计算一些化学数据.在使用Chem 3D组件过程中, ...

  4. Thinkphp自定义生成缩略图尺寸的方法

    Thinkphp自定义生成缩略图尺寸的方法,本实例中生成两张不同尺寸的图片:第一张是大图350*350,第二张 50*50的缩略图 Image类是Thinkphp系统自带的,可以研究下,这个缩略图类很 ...

  5. MFC exe文件生成的图标更改方法

    MFC exe文件生成的图标更改方法 https://blog.csdn.net/txwtech/article/details/92980545

  6. Python镜像源集合——镜像源更改方法

    python在线安装库时会较慢,那是因为python的默认镜像源在国外,因此会慢:而国内有很多可以用的python镜像源,将python镜像源更改为国内的,则可以大大加快python库的安装速度. 1 ...

  7. Allegro PCB -内层分割,比如电源层需要分割几种电源

    内层分割,比如电源层需要分割几种电源. (1).点击Display -> Assign Color 在Option中,先取一种颜色作为高亮显示的颜色. (2).在Find中,选Net,点击mor ...

  8. IOS 获取网络图像尺寸 更改 图像色彩值 什么一套方法灰色

    直接在代码 头文件 // 图片处理 0 半灰色 1 灰度 2 深棕色 3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelType:(UII ...

  9. PCB genesis自制孔点 Font字体实现方法

    一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个 ...

随机推荐

  1. A useful logger function in C project.

    #cat log.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...

  2. 在PL/SQL DEV里面有把锁一样的按钮,点击它会跳出“these query result are not updateable,include the ROWID to get updateab

    在PL/SQL DEV里面有把锁一样的按钮,点击它会跳出“these query result are not updateable,include the ROWID to get updateab ...

  3. case when里的like功能 ////// 截取(substr)

    case when里的like功能 假如要用到case when又要用到like这样的功能,即如果字符串包含‘语文’就怎么怎么样,包含‘数学’就怎么怎么样,包含‘英语’就怎么怎么样,like是用于wh ...

  4. 个人Linux(ubuntu)使用记录——远程访问linux

    说明:记录自己的linux使用过程,并不打算把它当作一个教程,仅仅只是记录下自己使用过程中的一些命令,配置等东西,这样方便自己查阅,也就不用到处去网上搜索了,所以文章毫无章法可言,甚至会记录得很乱. ...

  5. code blocks 安装与实践

    背景 因为不是主要修习C/C++,仅用于写算法和数据结构,code blocks轻量但是安装老是出现问题,故有此记录 安装 官方地址:http://www.codeblocks.org/downloa ...

  6. Luogu P4016 「 网络流 24 题 」负载平衡问题

    吐槽题目难度,这个题建模好像比前两个都要难,但是难度评级却比第二个要低. 解题思路 依旧是考虑如何建模和建立源点汇点.每个点的货物数量到最后都一样的话肯定是等于他们的平均值.用 $num$ 数组存储原 ...

  7. Python学习第二阶段,Day2,import导入模块方法和内部原理

    怎样导入模块和导入包?? 1.模块定义:代码越来越多的时候,所有代码放在一个py文件无法维护.而将代码拆分成多个py文件,同一个名字的变量互不影响,模块本质上是一个.py文件或者".py&q ...

  8. https报错注销源文件内容

    open -a pycharm /Users/vivi/Library/Python/3.6/lib/python/site-packages/requests/packages/urllib3/co ...

  9. 根据屏幕的大小改变rem的参考值

    移动端一半会选用rem+flex布局的方式,下面是根据屏幕的宽度,动态的改变rem的参考值 var screenWidth;             var html = document.getEl ...

  10. idea 获取当前git最新分支

    菜单栏VCS->选中Git 选择Fetch 获取最新分支