https://wwamf.lanzouu.com/iralL3t34eji
用sw官方api的isouter可以筛掉内孔的情况

面用法向和法向位置
不要回退,画不好就改算法,把面上的某条边投影到工程图,只要这条边的向量成投影矩阵不平行于z(不是一个点)就直接select这个棱的中点投影到工程图的坐标
已按你的思路改完,核心变化如下。
新算法
-
IsEdgeLineVisibleInDrawingView(benddim.geometry.cs)棱两端点经
ModelToView变换到图纸/doc 空间,计算方向(dx,dy,dz)。若
|dx,dy| / |(dx,dy,dz)| ≥ 2%(且 XY 跨度 ≥ 1µm),视为投影为线段 ;否则视为投影为点(方向 ∥ 视图法向 Z)。 -
TrySelectEdgeByProjectedMidpoint(benddim.logging.cs)对投影为线的棱:取端点投影中点
(docMidX, docMidY),单次SelectByRay(x, y, 0, 0, 0, -1),不再走 4 种射线策略回退。 -
选棱优先级 (
TrySelectEdgeOnFaceForDimension/ 线---线 / ⊥ 替代棱)- 先:指定棱投影选点
- 再:
FindVisibleEdge+Select4 - 仅当指定棱 ∥ 折弯轴且投影为点 时,才换面上 ⊥ 棱(同样走投影/Select4,不再射线穷举)
-
面点选点 (
TrySelectModelPointOnFaceByRay)改为
ModelToView一次投影 + 单次射线,去掉 Z0/图纸XY/变换Z/视图法向 四轮回退。 -
BendDimSelectByRayOnly = false恢复可见边
Select4路径。
编译
已编译并部署 slot 20260626162610173。在 SW 里重载插件后再跑折弯标注,观察:
- Ray 调试点应从 532 次 降到「每棱最多 1 次投影射线 + 少量 Select4」
- 节点间不再对同一图纸坐标(如
105.74,155)重复打几百次射线 - 日志里成功射线 tag 应为
棱投影中点而非Z0视图XY
若节点间 40mm 仍失败,下一步应查 AddDimension2 为何建出角度尺寸(几何选点已固定),而不是再加 SelectByRay 回退。需要的话我可以继续改那一块。