@@ -80,9 +80,6 @@ def GetCurrent(self):
8080 def __str__ (self ) -> str :
8181 return f"<{ self .__class__ .__name__ } 0x{ id (self ):X} vec:{ self .Count ()} >"
8282
83- def __iter__ (self ):
84- return self ._vecList .__iter__ ()
85-
8683
8784def MakeVec2D (xy1xy2 : Tuple [TPoint2i , TPoint2i ]):
8885 ptStart , ptEnd = xy1xy2
@@ -131,7 +128,7 @@ def PolylineToVecList(pl: Polyline2D):
131128def CheckPairPolar (
132129 referVec : Vec2D ,
133130 diffPt2 : Tuple [TPoint2i , TPoint2i ],
134- rad_tolerance = G_ANGLE_RAD_TOLERANCE ,
131+ rad_tolerance = 0.000001
135132):
136133 logger .info ("" )
137134 logger .info (f"{ CheckPairPolar .__name__ } ():" )
@@ -141,7 +138,7 @@ def CheckPairPolar(
141138 logger .info (f" 参考 { referVec } " )
142139 logger .info (f" 差分 { diffVec } " )
143140
144- ret = Vec2D .isParallel (diffVec , referVec , 0.000001 )
141+ ret = Vec2D .isParallel (diffVec , referVec , rad_tolerance )
145142 assert ret == 1 or ret == - 1 , "错误(起点差分对不平行)"
146143
147144 if ret == - 1 :
@@ -164,7 +161,7 @@ def GenerateNewPointList(
164161 logger .info (f"{ GenerateNewPointList .__name__ } ():" )
165162
166163 vec_rotate = G_RAD_P90DEG if vec_distance > 0 else G_RAD_N90DEG
167- logger .info ("旋转极型 :" )
164+ logger .info ("旋转极性 :" )
168165 logger .info (f" { vec_rotate } " )
169166
170167 # 重置单端向量表指针
@@ -189,7 +186,7 @@ def GetJunction(a, b):
189186 # 从单端向量表转换指定距离的差分向量表
190187 logger .info ("构造差分向量表:" )
191188 vecList = VecList2D ()
192- for v in sVecList :
189+ for v in sVecList . GetList () :
193190 vec = GetDiffLine (v , vec_distance , vec_rotate )
194191 vecList .Append (vec )
195192 logger .info (f" +向量{ vecList .Count ()} { vec } " )
@@ -206,7 +203,9 @@ def GetJunction(a, b):
206203 # 后移向量表指针 到结尾时无法移动 增加终点 退出循环
207204 if vecList .pMoveNext () is False :
208205 # 增加终点 末尾向量的结束点
209- ptList .Append (vec1 .withBias )
206+ vecEnd = vec1 .withBias
207+ ptList .Append (vecEnd )
208+ logger .info (f" +终点{ ptList .Count ()} ({ vecEnd .x } ,{ vecEnd .y } )" )
210209 break
211210 # 获取后一个向量 指针已经后移
212211 vec2 = vecList .GetCurrent ()
@@ -238,22 +237,22 @@ def InstanceNewDiff(
238237 logger .info (f" +端点{ pl .GetPointCount ()} { diffStart [1 ]} " )
239238
240239 # 交点列表的结构是 新生成差分线不包括起点 仅包括 所有交点 + 终点
241- skip_obj = None
242- if diffEnd is not None :
243- skip_obj = ptList .GetList ()[- 1 ]
240+ ptEnd = ptList .GetList ()[- 1 ]
244241
245- for pt in ptList :
246- # 如果输入包括结尾参考差分线 需要先把交点列表里的终点去掉
247- if pt is skip_obj :
242+ for pt in ptList . GetList () :
243+ # 交点列表最后一点是终点 无需增加PCB线路
244+ if pt is ptEnd :
248245 continue
249-
250246 # 折线的终点 视为当前遍历交点的上一点
251247 prvePt = pl .GetEnd ()
252248 assert prvePt .BindCount () == 1 , f"错误(非法差分折线 终点绑定了{ prvePt .BindCount ()} 个线路)"
253249 # 应用交点到折线终点
254250 prvePt .SetXY (pt .x , pt .y )
255251
256- # 构建PCB线路 以交点为起点 终点任意
252+ # 构建PCB线路 以交点为起点 终点x+1
253+ # 本次循环PCB线路的终点 设计上由下一轮循环(下一个交点)来设置
254+ # 只有交点才能构建PCB线路 因为是由交点发起的 所以交点列表最后一点(终点)不能参与循环
255+ # 最后一个交点必须在完成本层循环后 在独立设置 与参考差分线合并或和交点列表最后一点合并
257256 pobj = PY_PCB_TRACK ((board , pt , pt + Vec2D (1 , 0 )))
258257 pobj .setWidth (info .width )
259258 pobj .SetLayer (info .layer )
@@ -265,30 +264,37 @@ def InstanceNewDiff(
265264 StartBind = TPoint2i .bindInfo (pobj , TPoint2i .TRACK_START_POINT )
266265 EndBind = TPoint2i .bindInfo (pobj , TPoint2i .TRACK_END_POINT )
267266
268- # 把起点 绑定到折线终点
267+ # 把线路起点 绑定到折线目前的终点
269268 prvePt .AppendBind (StartBind )
270- # logger.info(f" 更新{pl.GetPointCount()} {prvePt}")
271269
272- # 把终点 绑定到新的端点 后插入多边形末尾
273- thisPt = TPoint2i (pt .x , pt .y , EndBind )
270+ # 把线路终点 绑定到新的端点 后插入多边形末尾
271+ thisPt = TPoint2i (pt .x + 1 , pt .y , EndBind )
274272 pl .AddPoint (thisPt )
275273 logger .info (f" +端点{ pl .GetPointCount ()} { thisPt } " )
276274
277275 continue
278276
279- # 完成差分折线 结束于参考差分线(头 )的终点
277+ # 设置终点 = 参考差分线(尾 )的终点
280278 if diffEnd is not None :
281279 # 折线的终点 视为参考差分线(尾)的起点
282280 endPt = pl .GetEnd ()
283281 assert endPt .BindCount () == 1 , f"错误(非法差分折线 终点绑定了{ endPt .BindCount ()} 个线路)"
284282
285283 # 参考差分线(尾)的起点 绑定到折线终点
286284 endPt .AppendBind (diffEnd [0 ].GetBindFirst ())
287- logger .info (f" 更新终点 { endPt } " )
288285 # 参考差分线(尾)的终点 插入多边形末尾
289286 pl .AddPoint (diffEnd [1 ])
290287 logger .info (f" +终点{ pl .GetPointCount ()} { diffEnd [1 ]} " )
291288
289+ # 设置终点 = 交点列表的最后一点
290+ else :
291+ endPt = pl .GetEnd ()
292+ assert endPt .BindCount () == 1 , f"错误(非法差分折线 终点绑定了{ endPt .BindCount ()} 个线路)"
293+ # 在主循环中最后构建的PCB线路 依然保持在等待设置的状态
294+ # 交点列表的最后一点 视为终点 设置到折线终点的坐标
295+ endPt .SetXY (ptEnd .x ,ptEnd .y )
296+
297+
292298 # 更新折线内所有端点到绑定的PCB线路
293299 logger .info ("差分线段列表:" )
294300 for pt in pl .GetList ():
@@ -391,7 +397,7 @@ def GetInputTracks(board):
391397 )
392398
393399 # 增加交点锁定 新建PCB形状
394- AddCuShapeTrackLock (refer_pl , infoResult , board )
395- AddCuShapeTrackLock (diff_pl , infoResult , board )
400+ # AddCuShapeTrackLock(refer_pl, infoResult, board)
401+ # AddCuShapeTrackLock(diff_pl, infoResult, board)
396402
397403 return
0 commit comments