如下图这是我们熟悉的内层负片散热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

最新文章

  1. JSON Web Token实际应用
  2. Windows Azure 虚拟机备份
  3. window.open参数设置及如何全屏显示(转)
  4. Python 的命令行参数处理 optparse-&gt;argparse
  5. poj3525Most Distant Point from the Sea(半平面交)
  6. 将U盘分成 启动盘+文件存储区
  7. WEBUS2.0 In Action - [源代码] - C#代码搜索器
  8. Android虚拟机Dalvik介绍
  9. C#多态联系之虚方法
  10. QT实现TCP通信服务器端和客户端(支持多个客户端)精简版
  11. Unity3D项目优化(转)
  12. HTML5新特性: 自定义属性前缀data-以及dataset的使用
  13. 使用python+requests+unittest实现接口自动化测试
  14. python 项目启动路径自动添加
  15. 将myeclipse中不适用的插件禁用掉
  16. org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session异常解决办法
  17. GPS数据包格式及数据包解析
  18. Win7没有防火墙:0x80070422
  19. BigDecimal 、BigInteger
  20. Maven学习(二)-----Maven启用代理访问

热门文章

  1. JAVA基础——Date和Calendar类
  2. JavaScript--小白入门篇3
  3. Luogu P3797 妖梦斩木棒
  4. UVA - 1611 Crane (思路题)
  5. MySQL4
  6. Import CAD geometry in BladeModeler, turbogrid
  7. streamwise veloicty along the jet axis using Matlab/Octave
  8. 处理回车提交、ctrl+enter和shift+enter都不提交-&gt;textarea正常换行
  9. Ural 1091 Tmutarakan Exams
  10. Introduction to TensorFlow