Files
Pier_v1/검토파일/검토_운곡교P1/스크립트/표식_내용보기.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

91 lines
3.3 KiB
Python

# -*- coding: utf-8 -*-
"""운곡교 P1 코드 표식(코드표_*) 내용 보기.
사용법 (Rhino 명령줄에서 RunPythonScript → 이 파일 선택):
1) 표식(구슬·지시선·글자 중 아무거나)을 먼저 선택하고 실행 → 내용 창이 뜬다.
2) 아무것도 선택하지 않고 실행 → '선택하면 자동으로 창 띄우기' 켜기/끄기.
(켜 둔 동안 표식을 클릭하면 창이 뜬다. Rhino 를 끄면 해제된다.)
표식의 내용은 객체 속성 > 사용자 텍스트(Attribute User Text)에도 들어 있다.
"""
import Rhino
import scriptcontext as sc
import System
KEYS = [("code", u"코드"), ("gu", u"구분"), ("content", u"내용 (엑셀 비고코드설명)"), ("marks", u"관련 마크"),
("table_color", u"엑셀 대조표 색(판정)"), ("table_color_basis", u"색 근거"), ("detail", u"엑셀 ③ 대조·비고 내용"),
("where", u"출처")]
def build_text(obj):
a = obj.Attributes
if a.GetUserString("code") is None or a.GetUserString("code") == "":
return None
lines = []
for k, label in KEYS:
v = a.GetUserString(k)
if v:
if k == "detail":
lines.append(u"\n[" + label + u"]\n" + v)
else:
lines.append(u"[" + label + u"] " + v)
return u"\n".join(lines)
def show_for(objs):
seen = set()
texts = []
for o in objs:
t = build_text(o)
if t is None:
continue
code = o.Attributes.GetUserString("code")
if code in seen:
continue
seen.add(code)
texts.append(t)
if not texts:
return False
Rhino.UI.Dialogs.ShowTextDialog(u"\n\n" .join(texts) if len(texts) > 1 else texts[0], u"코드 표식 내용")
return True
def on_idle(sender, e):
Rhino.RhinoApp.Idle -= on_idle
pend = sc.sticky.get("ungok_marker_pending")
sc.sticky["ungok_marker_pending"] = None
if pend:
show_for(pend)
def on_select(sender, e):
if not sc.sticky.get("ungok_marker_auto"):
return
objs = [o for o in e.RhinoObjects if o.Attributes.GetUserString("code")]
if not objs:
return
sc.sticky["ungok_marker_pending"] = objs
Rhino.RhinoApp.Idle -= on_idle
Rhino.RhinoApp.Idle += on_idle
def main():
if sc.sticky.get("ungok_marker_launch"): # 라이노_시작.py 가 부른 경우: 무조건 '자동 보기 켬'
if not sc.sticky.get("ungok_marker_hooked"):
Rhino.RhinoDoc.SelectObjects += on_select
sc.sticky["ungok_marker_hooked"] = True
sc.sticky["ungok_marker_auto"] = True
Rhino.RhinoApp.WriteLine(u"표식 자동 보기: 켬 (표식을 클릭하면 창이 뜹니다)")
return
sel = [o for o in sc.doc.Objects.GetSelectedObjects(False, False)]
if sel and show_for(sel):
return
# 선택이 없거나 표식이 아니면 자동 모드 전환
if not sc.sticky.get("ungok_marker_hooked"):
Rhino.RhinoDoc.SelectObjects += on_select
sc.sticky["ungok_marker_hooked"] = True
sc.sticky["ungok_marker_auto"] = not sc.sticky.get("ungok_marker_auto", False)
Rhino.RhinoApp.WriteLine(u"표식 자동 보기: " + (u"켬 (표식을 클릭하면 창이 뜹니다)" if sc.sticky["ungok_marker_auto"] else u"끔"))
main()