Improve drawing symbols and sample popup

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
CopilotandCopilot committed 2026-11-05 17:30:24 +09:00
1 parent 7efe9097ce
commit a0ec74b09b
11 files changed
+108 -21

No files matched your search

+25 -10
View File
@@ -98,7 +98,7 @@ export function bearingDetail(model:PierModel,scale:number,key?:string,dimension
}
const line=(a:Point,b:Point,layer:Entity['layer']='CENTER')=>entities.push({kind:'line',a,b,layer,source});
const text=(point:Point,t:string,height=1.8*scale,align:'left'|'center'|'right'='left')=>entities.push({kind:'text',point,text:t,height,align,layer:'TEXT',source});
const dim=(a:Point,b:Point,position:number,axis:'x'|'y')=>entities.push({kind:'dimension',a,b,position,axis,value:Math.abs(axis==='x'?a[0]-b[0]:a[1]-b[1]),height:1.7*scale,layer:'DIMENSION',source});
const dim=(a:Point,b:Point,position:number,axis:'x'|'y',label?:string)=>entities.push({kind:'dimension',a,b,position,axis,value:Math.abs(axis==='x'?a[0]-b[0]:a[1]-b[1]),height:1.7*scale,label,layer:'DIMENSION',source});
blocks.forEach((block,i)=>{
const x=(local[i].z-cx)*1000,z=(block.padTop-datum)*1000,idx=model.blocks.indexOf(block),s={member:'bearing-number',index:idx,pier:model.name};
entities.push({kind:'circle',center:[x,z+6*scale],radius:1.7*scale,layer:'TEXT',source:s});
@@ -114,19 +114,34 @@ export function bearingDetail(model:PierModel,scale:number,key?:string,dimension
['h1','h2','h3','T'].slice(0,zs.length-1).forEach((name,j)=>{
const yy=(zs[j]+zs[j+1])/2,target=(j*3-2)*scale;
line([x+sign*DIM.padSize*500,yy],[near,target],'TEXT');
text([near+sign*scale,target],`${name}=${value(zs[j+1]-zs[j])}`,1.55*scale,sign<0?'right':'left');
text([near+sign*scale,target],name,1.55*scale,sign<0?'right':'left');
});
}
});
if(pair&&dimensions){const a=(local[0].z-cx)*1000,b=(local[1].z-cx)*1000;dim([a,planY],[b,planY],planY-1000,'x');text([0,planY-1000-3*scale],'C · 전/후열 중심 간격',1.6*scale,'center');}
if(pair&&dimensions){const a=(local[0].z-cx)*1000,b=(local[1].z-cx)*1000;dim([a,planY],[b,planY],planY-1000,'x','C');}
const ib=model.integratedBlocks.find(b=>blocks.some(x=>x.row==='전열'&&x.no===b.frontNo));
if(ib)text([0,planY-1000-6*scale],`D=${value(INTEGRATED_BLOCK.length)} (일체 교좌면 길이)`,1.6*scale,'center');
const plan=selected.plan;
if(plan){
const p=solplateGeometry(selected,plan.h3,{A:plan.A,B:plan.B,margin:plan.margin,T:plan.T,slopePct:plan.S});
text([0,-650],`솔플 L=${value(p.L*1000)} / W=${value(p.W*1000)} · S=${plan.S.toFixed(3)}%`,1.6*scale,'center');
text([0,-800],`T=${value(plan.T)} / T1=${value(p.T1*1000)} / T2=${value(p.T2*1000)}`,1.6*scale,'center');
}else text([0,-650],'받침 본체·솔플레이트 제원 미확인',1.65*scale,'center');
if(ib&&dimensions)dim([-INTEGRATED_BLOCK.length/2,planY-600],[INTEGRATED_BLOCK.length/2,planY-600],planY-1000-5*scale,'x','D');
const rows=bearingSchedule(model);
if(dimensions)blocks.forEach((block,i)=>{
const row=rows.find(r=>r.index===model.blocks.indexOf(block))!,p=block.plan;
const x=(local[i].z-cx)*1000,y=(local[i].x-cy)*1000+planY;
if(!p)return;
// Symbolic dimensions retain measured numeric values for CAD and the schedule.
dim([x-p.A/2,y],[x+p.A/2,y],planY+700+3*scale,'x','A');
const side=i===0?-1:1;
dim([x,y-p.B/2],[x,y+p.B/2],x+side*(p.A/2+4*scale),'y','B');
const z=(block.padTop+p.h3/1000-datum)*1000;
const half=(row.L??p.A)/2;
if(row.E!==null)dim([x,(block.bottom-datum)*1000],[x,(block.bottom-datum)*1000+row.E],x+(i===0?-1:1)*(half+7*scale),'y','E');
for(const [symbol,edge,thickness] of [['T1',-1,row.T1],['T2',1,row.T2]] as const){
if(thickness!==null)dim([x+edge*half,z],[x+edge*half,z+thickness],x+edge*(half+2*scale),'y',symbol);
}
const slopeY=z+(row.T??0)+4*scale;
line([x-half,slopeY],[x+half,slopeY],'DIMENSION');
line([x+half,slopeY],[x+half-1.5*scale,slopeY+scale],'DIMENSION');
text([x,slopeY+scale],'S(%)',1.7*scale,'center');
});
text([0,-650],blocks.some(b=>!b.plan)?'받침 제원 미확인 · 치수표 참조':'문자 치수: 치수표 참조',1.4*scale,'center');
text([0,-1040],'교좌면 평면 · 가로 교축(n) / 세로 교직(s)',1.65*scale,'center');
return{entities,title:`상세 A · ${blocks.map(b=>`${b.no}(${b.row==='전열'?'전':'후'})`).join(' / ')}`};
}