- 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>
91 lines
3.3 KiB
Python
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()
|