Files
Pier_v1/RAG/design-model-box-sample_2/tools/check_connection_rounded_geometry.py
T
ahnyongjooandClaude Sonnet 5.5 964a841de1 chore(rebar): Pier_T_rebar 작업 폴더 초기 구성 및 외부 의존 파일 통합
- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환
- Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용
- pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관)
- worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md)
- D:\Rhino-MCP 경로 참조를 새 위치로 치환

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:20:18 +09:00

41 lines
2.0 KiB
Python

"""Read-only: compare source corners with the viewer's actual bend geometry."""
import argparse
import json
from pathlib import Path
import subprocess
import sys
root=Path(__file__).resolve().parents[1]
sys.path.insert(0,str(root/'src/backend'if (root/'src/backend').is_dir()else root))
from repair_source_cycle_connections import path_key
def inspect(path,node):
import server
server.require_modeling_rules()
data=json.loads(path.read_text());group=data['group']
kernel=root/'model_kernel.js'
if not kernel.is_file():kernel=root/'src/frontend/src/model_kernel.js'
script="const fs=require('fs');require(process.argv[1]);const g=JSON.parse(fs.readFileSync(0,'utf8'));process.stdout.write(JSON.stringify(g.instance_paths_m.map((p,i)=>ModelKernel.bendPath(p,g,i))));"
process=subprocess.run([node,'-e',script,str(kernel)],input=json.dumps(group),
capture_output=True,text=True,check=True)
bends=json.loads(process.stdout);previous={path_key(p)for p in data['previous_paths']}
rows=[]
for i,(raw,bend)in enumerate(zip(group['instance_paths_m'],bends)):
if path_key(raw)in previous:continue
before,first_raw=server.tube_path_outside_component_union(
[raw],group['diameter_mm'],data['concrete_components'])
after,first_bent=server.tube_path_outside_component_union(
[bend['path']],group['diameter_mm'],data['concrete_components'])
rows.append({'index':i,'source_length_m':bend['sourceLengthM'],
'rounded_length_m':bend['lengthM'],'warnings':bend['warnings'],
'source_corner_outside_samples':before,'rounded_outside_samples':after,
'first_source_outside':first_raw,'first_rounded_outside':first_bent})
return {'id':group['id'],'rows':rows,'published':False}
if __name__=='__main__':
parser=argparse.ArgumentParser(description=__doc__)
parser.add_argument('candidate',type=Path);parser.add_argument('--node',default='node')
args=parser.parse_args();print(json.dumps(inspect(args.candidate,args.node),ensure_ascii=False,indent=2))