;;; ============================================================
;;;  딸깍(DDALKKAK) 웹판용 복사 명령 — EBTRON
;;;
;;;  설치: AutoCAD/캐디안에서 APPLOAD 명령 → 이 파일 선택
;;;        (또는 파일을 도면 창에 끌어다 놓기)
;;;  사용: 명령창에 DDK 입력 → 부품 뷰(단면+평면) 객체 선택 → Enter
;;;        → 웹 딸깍(https://ebtron-ddalkkak.pages.dev)에서 Ctrl+V
;;;
;;;  지원 객체: 선(LINE), 원(CIRCLE), 호(ARC), 폴리선(LWPOLYLINE)
;;;  실치수·레이어·색상이 그대로 전달됩니다.
;;; ============================================================

(defun ddk-w (c v f)
  (write-line (itoa c) f)
  (write-line v f)
)

(defun ddk-r (x) (rtos x 2 8))

(defun ddk-deg (a) (* 180.0 (/ a pi)))

(defun c:DDK (/ ss i ed et f fname lays lname col p ent)
  (setq fname (strcat (getenv "TEMP") "\\ddk_clip.dxf"))
  (princ "\n[딸깍] 웹으로 보낼 객체를 선택하세요 (단면+평면 전부): ")
  (setq ss (ssget '((0 . "LINE,CIRCLE,ARC,LWPOLYLINE"))))
  (if (null ss)
    (progn
      (princ "\n[딸깍] 대상 객체가 없습니다 (선/원/호/폴리선만 지원).")
      (princ)
    )
    (progn
      (setq f (open fname "w"))
      ;; --- 레이어 색상 표 ---
      (ddk-w 0 "SECTION" f)
      (ddk-w 2 "TABLES" f)
      (ddk-w 0 "TABLE" f)
      (ddk-w 2 "LAYER" f)
      (setq lays '())
      (setq i 0)
      (repeat (sslength ss)
        (setq lname (cdr (assoc 8 (entget (ssname ss i)))))
        (if (not (member lname lays)) (setq lays (cons lname lays)))
        (setq i (1+ i))
      )
      (foreach lname lays
        (setq col (cdr (assoc 62 (tblsearch "LAYER" lname))))
        (if (null col) (setq col 7))
        (ddk-w 0 "LAYER" f)
        (ddk-w 2 lname f)
        (ddk-w 62 (itoa (abs col)) f)
      )
      (ddk-w 0 "ENDTAB" f)
      (ddk-w 0 "ENDSEC" f)
      ;; --- 엔티티 ---
      (ddk-w 0 "SECTION" f)
      (ddk-w 2 "ENTITIES" f)
      (setq i 0)
      (repeat (sslength ss)
        (setq ed (entget (ssname ss i)))
        (setq et (cdr (assoc 0 ed)))
        (ddk-w 0 et f)
        (ddk-w 8 (cdr (assoc 8 ed)) f)
        (if (assoc 62 ed) (ddk-w 62 (itoa (cdr (assoc 62 ed))) f))
        (cond
          ((= et "LINE")
            (setq p (cdr (assoc 10 ed)))
            (ddk-w 10 (ddk-r (car p)) f)
            (ddk-w 20 (ddk-r (cadr p)) f)
            (setq p (cdr (assoc 11 ed)))
            (ddk-w 11 (ddk-r (car p)) f)
            (ddk-w 21 (ddk-r (cadr p)) f)
          )
          ((= et "CIRCLE")
            (setq p (cdr (assoc 10 ed)))
            (ddk-w 10 (ddk-r (car p)) f)
            (ddk-w 20 (ddk-r (cadr p)) f)
            (ddk-w 40 (ddk-r (cdr (assoc 40 ed))) f)
          )
          ((= et "ARC")
            (setq p (cdr (assoc 10 ed)))
            (ddk-w 10 (ddk-r (car p)) f)
            (ddk-w 20 (ddk-r (cadr p)) f)
            (ddk-w 40 (ddk-r (cdr (assoc 40 ed))) f)
            (ddk-w 50 (ddk-r (ddk-deg (cdr (assoc 50 ed)))) f)
            (ddk-w 51 (ddk-r (ddk-deg (cdr (assoc 51 ed)))) f)
          )
          ((= et "LWPOLYLINE")
            (if (assoc 70 ed) (ddk-w 70 (itoa (cdr (assoc 70 ed))) f))
            (foreach ent ed
              (if (= 10 (car ent))
                (progn
                  (ddk-w 10 (ddk-r (cadr ent)) f)
                  (ddk-w 20 (ddk-r (caddr ent)) f)
                )
              )
            )
          )
        )
        (setq i (1+ i))
      )
      (ddk-w 0 "ENDSEC" f)
      (ddk-w 0 "EOF" f)
      (close f)
      ;; 윈도우 내장 clip.exe 로 클립보드에 적재
      (startapp "cmd.exe" (strcat "/c clip < \"" fname "\""))
      (princ (strcat "\n[딸깍] " (itoa (sslength ss))
                     "개 객체를 클립보드에 복사했습니다. 웹 딸깍에서 Ctrl+V 하세요."))
      (princ)
    )
  )
)

;; 한글 별칭
(defun c:딸깍 () (c:DDK))

(princ "\n[딸깍] 로드 완료 — 명령: DDK (객체 선택 → 웹에서 Ctrl+V)")
(princ)
