
    Hj                     P    d Z ddlZddlmZ d ZdZdZdede	d	ee
   fd
Z	 	 ddZy)u   
weld_jbi.py — 블럭: JBI 파일 생성 (Motoman 포맷, POSTYPE PULSE)
(welding_pipeline.py에서 2026-07-04 분할 — 로직 원문 그대로, 수정 없음)
⚠️ 동결 로직: _deg_to_pulse_inline은 ik_ar2010.py의 deg_to_pulse와 동일 — 수정 절대 금지(철칙 7조).
    N)
_load_kinec                 P    | \  }}}|j                  dd      }|\  }}}||||||fS )u{   
    pos_mm: (3,) mm
    rot: scipy Rotation
    반환: (x, y, z, Rx, Ry, Rz) — mm, degrees (Motoman 오일러 ZYX)
    ZYXT)degrees)as_euler)	pos_mmrotxyzeulerRzRyRxs	            T   E:\도진팩토리\3D스캔및티칭시스템\02_TOOLS\welding_auto_path\weld_jbi.pypose_to_motoman_xyzwprr   
   s?     GAq!LLL-EJBBaBB    z\/JOB
//NAME WELDING_AUTO
//POS
///NPOS {npos},0,0,0,0,0
///TOOL 0
///POSTYPE PULSE
///PULSE
z/END
joint_deg_6kinereturnc                     |d   }|d   }|d   }g d}t        |      D cg c]H  \  }}t        t        |j                  |d      |j                  |d      | |   z  ||   z  z               J c}}S c c}}w )u   
    관절각(도, SLURBT 순, 6개) → 펄스 정수 변환.
    ar2010_kinematics.json 기준. (ik_ar2010.py의 deg_to_pulse와 동일 로직)
    pulses_per_degcalibration_offset	axis_sign)SLURBTr      )	enumerateintroundget)r   r   ppdcalsignaxesiaxs           r   _deg_to_pulse_inliner,   #   s    
  !C$%CD)D t_$EAr 	E#''"a.488B?[^#Cc"g#MMNO$  s   AA3c           
         |
t               }g }t        |       D ]J  \  }\  }}}	|	t        d| d       t        |	      dd }
t	        |
|      }|j                  ||||f       L t        |      }g }|j                  t        j                  |             t        |      D ]A  \  }\  }}}}|j                  dj                  |dj                  d |D                           C |j                  d	       |j                  d
t        d      j                  j                         j                  d              |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       t        |      D ]#  }|j                  dj                  ||             % |j                  d       |j                  d       |j                  d       t        |dd      5 }|j!                  dj                  |             ddd       t        d| d| dt        |               y# 1 sw Y   'xY w)u"  
    poses_with_joints: list of (pos_mm, rot, joint_deg_list)
      joint_deg_list: 6개 관절각(도, SLURBT 순) — ik_ar2010.ik() 반환값
    output_path: 저장할 .JBI 파일 경로
    kine: ar2010_kinematics.json dict. None이면 자동 로드.

    수정 이력:
      - [BUG FIX] XYZ 좌표 기록 → 펄스 변환으로 교체 (POSTYPE PULSE 선언과 일치)
      - [BUG FIX] /INST → //INST (실제 JBI 포맷 기준)
      - [BUG FIX] ///GROUP1 RB1 추가
      - IK 미수렴(None) 점은 쓰지 않고 경고만 출력
    Nz[JBI WARN] point u6   : IK 미수렴 — 건너뜀 (잘못된 펄스 금지)   )nposz
C{:05d}={},c              3   2   K   | ]  }t        |        y w)N)str).0ps     r   	<genexpr>zgenerate_jbi.<locals>.<genexpr>R   s     5Mfc!ffs   z//INSTz///DATE datetimez%Y/%m/%d %H:%Mz///ATTR SC,RWz///GROUP1 RB1NOPzMOVJ C00000 VJ=25.00z$ARCON AS=10 AF=0.0 AC=0 AVP=0 T=0.00zMOVL C{:05d} V={:.1f}ARCOFENDwzutf-8)encoding
u   [JBI] 저장완료: u    | 유효 포인트: /)r   r"   printlistr,   appendlen
JBI_HEADERformatjoin
__import__r6   nowstrftimerangeopenwrite)poses_with_jointsoutput_pathweld_speed_vapproach_distr   validr*   posr	   jointsjoints_6pulsesr/   linesciorig_ifs                    r   generate_jbirX   2   s    || E!*+<!=Cf>%aS(^_`<#%h5ac*+ "> u:DE	LL"""-.*3E*:&&VVS#\((SXX5Mf5M-MNO +; 
LL	LL8Jz2;;??AJJK[\]^_	LL!	LL!	LL	LL'(	LL78Dk,33BEF  
LL	LL'(	LL	k3	1Q			% ! 
2 
 -B4&#N_J`Ia
bc 
2	1s   !II)g      I@g      Y@N)__doc__numpynpweld_ikr   r   rB   
JBI_FOOTERr?   dictr#   r,   rX    r   r   <module>r`      sS   
  	

d $ 49  SX4dr   