diff --git a/src/Add-on/Viewport/OneKeyLayout.ts b/src/Add-on/Viewport/OneKeyLayout.ts index b4d31eac7..bd4116c4c 100644 --- a/src/Add-on/Viewport/OneKeyLayout.ts +++ b/src/Add-on/Viewport/OneKeyLayout.ts @@ -85,7 +85,7 @@ export class OneKeyLayout implements Command let p2: Vector3;//视口的第二个点 UCS let tkBoxMinP = new Vector3();//图框盒子的最小点 let tkPolylineDrawObjects: Object3D[] = [];//图框内的多段线绘制对象 - let specialTexts = new Set(); + let specialTexts = new Set(); let pagTexts = new Set(); let paperTexts = new Set(); let dateTexts = new Set(); @@ -668,15 +668,27 @@ export class OneKeyLayout implements Command let g = new GroupRecord(); g.Name = "图框"; app.Database.GroupTable.Add(g); - let board = bs.find(b => b instanceof Board) as Board; + let boards = bs.filter(b => b instanceof Board) as Board[]; for (let c of curves) { if (this._cacheRect.has(c.TempData)) continue; let cloneC = c.Clone(); if (specialTexts.has(c)) { - this.HandleTextMetaData(cloneC as Text, board); - if (!(cloneC).TextString) + let strSet: Set = new Set(); + let metaData = (cloneC as Text).TextString.slice(1); + + for (let br of boards) + { + //由于不同板的 材名 材料 颜色多样式,遍历所有板 其他(如房间名)跳过 + if (!this.HandleTextMetaData(metaData, strSet, br)) + break; + } + + let str = Array.from(strSet).filter((str) => str !== "").join(", "); + (cloneC as Text).TextString = str; + + if (!(cloneC as Text).TextString) continue; } if (paperTexts.has(c)) @@ -755,9 +767,9 @@ export class OneKeyLayout implements Command } } - private HandleTextMetaData(text: Text, en?: Board) + private HandleTextMetaData(metaData: string, strSet: Set, en?: Board) { - let metaData = text.TextString.slice(1); + let isMaterial = false; if (en) { const option = en.BoardProcessOption; @@ -766,26 +778,31 @@ export class OneKeyLayout implements Command { case "房名": case "房间名": - text.TextString = option[EBoardKeyList.RoomName]; + strSet.add(option[EBoardKeyList.RoomName]); break; case "柜名": - text.TextString = option[EBoardKeyList.CabinetName]; + strSet.add(option[EBoardKeyList.CabinetName]); break; case "板材名": - text.TextString = option[EBoardKeyList.BrMat]; + strSet.add(option[EBoardKeyList.BrMat]); + isMaterial = true; break; case "材料": - text.TextString = option[EBoardKeyList.Mat]; + strSet.add(option[EBoardKeyList.Mat]); + isMaterial = true; break; case "颜色": - text.TextString = option[EBoardKeyList.Color]; + strSet.add(option[EBoardKeyList.Color]); + isMaterial = true; break; case "图纸名称": - text.TextString = option[EBoardKeyList.PaperName]; + strSet.add(option[EBoardKeyList.PaperName]); break; default: break; } } + + return isMaterial; } }