标签:one play 问题 symbol reg his close 制作 示例
如下图这是我们熟悉的内层负片散热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 * 2; } } 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 >= 0) { _SymbolsStart = symbolsStartList[symbolsID]; var MathesList = Regex.Matches(SymbolsName, "\\d+\\.?\\d*"); if (symbolsID >= 6) { this.OuterWidthSize = double.Parse(MathesList[0].Value); this.OuterHeightSize = double.Parse(MathesList[1].Value); this.Angle = double.Parse(MathesList[2].Value); this.GapCount = double.Parse(MathesList[3].Value); this.GapWidth = double.Parse(MathesList[4].Value); this.RingWidth = double.Parse(MathesList[5].Value); if (MathesList.Count == 7 && _SymbolsStart == "rc_ths") this.OuterRoundRadius = double.Parse(MathesList[6].Value); if (_SymbolsStart == "oblong_ths") this.SymbolsEndString = SymbolsName.Substring(SymbolsName.Length - 1, 1); } else { this.OuterSize = double.Parse(MathesList[0].Value); this.InnerSize = double.Parse(MathesList[1].Value); this.Angle = double.Parse(MathesList[2].Value); this.GapCount = double.Parse(MathesList[3].Value); this.GapWidth = double.Parse(MathesList[4].Value); if (MathesList.Count == 5 && _SymbolsStart == "s_ths") this.OuterRoundRadius = double.Parse(MathesList[6].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(6000, 5000, 1000); //更改:外径 内径 开口 改后symbls为 s_ths6000x5000x0x4x1000xr1000
标签:one play 问题 symbol reg his close 制作 示例
原文地址:https://www.cnblogs.com/pcbren/p/9949665.html