§
     ’j«  ã                  óŒ   — d Z ddlmZ ddlZddlZddlmZ ddlZddlm	Z	 ddl
mZ  ej        d¦  «        Z G d„ d	¦  «        ZdS )
zÊCAD & PDF Rendering and Vector Export Engine for Drawing Takeoff.
Handles PyMuPDF rasterization, CAD font transcoding, multi-page chunking,
and high-resolution A3 Landscape / Portrait blueprint export.
é    )ÚannotationsN)ÚPath)Úget_cad_converter_service)Ú"get_vietnamese_cad_font_transcoderzdscons.takeoff.cad_converterc                  ó6   — e Zd ZdZd„ Z	 	 ddd„Z	 	 	 ddd„ZdS )ÚCadBlueprintConverterz<Converter for AutoCAD DWG/DXF and multi-page technical PDFs.c                óR   — t          ¦   «         | _        t          ¦   «         | _        d S )N)r   Ú_font_transcoderr   Ú_cad_converter)Úselfs    úCC:\Projects\DSCons\app\modules\takeoff\application\cad_converter.pyÚ__init__zCadBlueprintConverter.__init__   s$   € Ý BÑ DÔ DˆÔÝ7Ñ9Ô9ˆÔÐÐó    éÈ   é   Úpdf_pathú
Path | strÚ
output_dirÚdpiÚintÚ	max_pagesÚreturnú	list[str]c                ó¢  — t          |¦  «        }t          |¦  «        }|                     dd¬¦  «         |                     ¦   «         st                               d|¦  «         g S g }	 t          j        t          |¦  «        ¦  «        }|dz  }	t          j        |	|	¦  «        }
t          t          |¦  «        |¦  «        }t          |¦  «        D ]‡}|                     |¦  «        }|                     |
d¬¦  «        }|j        › d|dz   › d	�}||z  }|                     t          |¦  «        ¦  «         |                     t          |¦  «        ¦  «         Œˆ|                     ¦   «          t                               d
t          |¦  «        |j        |¦  «         n2# t(          $ r%}t                               d|¦  «         Y d}~nd}~ww xY w|S )z^Render all pages of engineering PDF blueprint to high-res PNG images for Multimodal AI Vision.T©ÚparentsÚexist_oku)   [TAKEOFF] File PDF khÃ´ng tá»“n táº¡i: %sg      R@F)ÚmatrixÚalphaÚ_page_é   z.pngu5   [TAKEOFF] Ä�Ã£ render %d trang áº£nh tá»« %s (DPI=%d)u)   [TAKEOFF] Lá»—i render PDF sang áº£nh: %sN)r   ÚmkdirÚexistsÚloggerÚwarningÚfitzÚopenÚstrÚMatrixÚminÚlenÚrangeÚ	load_pageÚ
get_pixmapÚstemÚsaveÚappendÚcloseÚinfoÚnameÚ	ExceptionÚerror)r   r   r   r   r   Úpdf_pÚout_dÚimage_pathsÚdocÚzoomÚmatÚ	num_pagesÚpage_numÚpageÚpixÚimg_nameÚimg_destÚes                     r   Úrender_pdf_to_imagesz*CadBlueprintConverter.render_pdf_to_images   sÒ  € õ �X‘”ˆÝ�ZÑ Ô ˆØ�Š˜D¨4ˆÑ0Ô0Ð0à�|Š|‰~Œ~ð 	Ý�NŠNÐFÈÑNÔNÐNØˆIàˆð	IÝ”)�C ™JœJÑ'Ô'ˆCØ˜‘:ˆDÝ”+˜d DÑ)Ô)ˆCå�C ™HœH iÑ0Ô0ˆIÝ! )Ñ,Ô,ð 2ð 2�Ø—}’} XÑ.Ô.�Ø—o’o¨S¸�oÑ>Ô>�Ø#œjÐBÐB°¸1±ÐBÐBÐB�Ø  8Ñ+�Ø—’�˜X™œÑ'Ô'Ð'Ø×"Ò"¥3 x¡=¤=Ñ1Ô1Ð1Ð1à�IŠI‰KŒKˆKÝ�KŠKØGÝ�KÑ Ô Ø”
Øñ	ô ð ð øõ ð 	Ið 	Ið 	IÝ�LŠLÐDÀaÑHÔHÐHÐHÐHÐHÐHÐHøøøøð	Iøøøð Ðs   Á*D2F Æ
GÆ'GÇGNÚ	landscapeÚ	blueprintÚsource_pathú
str | PathÚtarget_pdf_pathústr | Path | NoneÚorientationr(   Úcolor_schemer   c           
     ó€	  — t          |¦  «        }|                     ¦   «         st          d|› �¦  «        ‚|j                             ¦   «         }|s6t          d¦  «        }|                     dd¬¦  «         ||j        › d|› d�z  }t          |¦  «        }|j                             dd¬¦  «         |dk    �r£	 t          j	        t          |¦  «        ¦  «        }	t          j	        ¦   «         }
|                     ¦   «         dk    rd\  }}nd	\  }}t          t          |	¦  «        ¦  «        D �]v}|	|         }|j        }|
                     ||¬
¦  «        }|dk    r.|                     t          j        dd||¦  «        dd¬¦  «         n3|dk    r-|                     t          j        dd||¦  «        dd¬¦  «         d}|d|z  z
  }|d|z  z
  }t#          ||j        z  ||j        z  ¦  «        }|j        |z  }|j        |z  }|||z
  dz  z   }|||z
  dz  z   }t          j        ||||z   ||z   ¦  «        }|                     ||	|¦  «         |dk    rdnd}|                     ||d¬¦  «         t          j        |j        dz
  |j        dz
  |j        |j        ¦  «        }|                     |||dk    rdndd¬¦  «         |                     t          j        |j        dz   |j        dz   ¦  «        d d!|¬"¦  «         |                     t          j        |j        dz   |j        d#z   ¦  «        d$|j        d%d&…         › �d'|dk    rdnd(¬"¦  «         |                     t          j        |j        dz   |j        d)z   ¦  «        d*|d+z   › d,t          |	¦  «        › �d-d.¬"¦  «         �Œx|
                     t          |¦  «        ¦  «         |
                     ¦   «          |	                     ¦   «          t:                               d/|j        ||¦  «         |S # t@          $ r<}t:           !                    d0|¦  «         tE          j#        ||¦  «         |cY d%}~S d%}~ww xY w| j$         %                    t          |¦  «        t          |¦  «        ¦  «        }|r|                     ¦   «         r|S tE          j#        ||¦  «         |S )1z_Standardize CAD Drawing (.dwg, .dxf) or PDF to crisp, print-ready A3 PDF (1:100 / 1:200 scale).u,   KhÃ´ng tÃ¬m tháº¥y file nguá»“n báº£n váº½: zapp/static/drawings/a3_exportsTr   Ú_A3_z.pdfÚportrait)ç     PŠ@ç     œ’@)rQ   rP   )ÚwidthÚheightrF   r   )g{®Gáz¤?ç¸…ëQ¸®?g¸…ëQ¸¾?)ÚcolorÚfillÚsepia)g\�Âõ(\ï?gffffffî?gÍÌÌÌÌÌì?g      9@é   g       @)g        g      à?ç      ð?)çš™™™™™¹?rZ   rZ   g      ø?)rU   rR   i  éA   )rT   g
×£p=
·?g
×£p=
Ç?)r!   r!   r!   rY   )rU   rV   rR   é
   é   u8   CÃ”NG TY TNHH XÃ‚Y Dá»°NG Ä�á»ŠNH SÆ N (MST: 0202111150)é   )ÚfontsizerU   é"   u   Há»’ SÆ  THIáº¾T Káº¾: Né(   é	   )r   r   r   é0   u;   QUY CHUáº¨N: KHá»” A3 (300 DPI) | Tá»¶ Lá»†: 1:100 | TRANG r!   ú/g      @)çffffffæ?re   re   u<   [TAKEOFF] Ä�Ã£ xuáº¥t A3 PDF thÃ nh cÃ´ng: %s (Khá»• %s, %s)uI   [TAKEOFF] Lá»—i Ä‘Ã³ng gÃ³i A3 PDF: %s. Fallback sao chÃ©p nguyÃªn báº£n.)&r   r#   ÚFileNotFoundErrorÚsuffixÚlowerr"   r/   Úparentr&   r'   r(   r,   r+   ÚrectÚnew_pageÚ	draw_rectÚRectr*   rR   rS   Úshow_pdf_pageÚx1Úy1Úinsert_textÚPointÚx0Úy0r0   r2   r$   r3   r4   r5   r6   ÚshutilÚcopyfiler   Úexport_a3_vector_pdf)r   rG   rI   rK   rL   ÚsrcÚextÚout_dirÚtargetÚsrc_docÚa3_docÚa3_widthÚ	a3_heightÚpage_idxÚsrc_pageÚsrc_rectÚa3_pageÚmarginÚtarget_wÚtarget_hÚscaleÚscaled_wÚscaled_hÚoffset_xÚoffset_yÚfit_rectÚborder_colorÚ	title_boxrC   Úsuccesss                                 r   Úexport_cad_drawing_to_a3_pdfz2CadBlueprintConverter.export_cad_drawing_to_a3_pdfH   sw  € õ �;ÑÔˆØ�zŠz‰|Œ|ð 	ZÝ#Ð$XÐSVÐ$XÐ$XÑYÔYÐYàŒj×ÒÑ Ô ˆØð 	KÝÐ;Ñ<Ô<ˆGØ�MŠM $°ˆMÑ6Ô6Ð6Ø%¨3¬8Ð(JÐ(J¸Ð(JÐ(JÐ(JÑJˆOÝ�oÑ&Ô&ˆØŒ×Ò D°4ÐÑ8Ô8Ð8à�&Š=‰=ðbÝœ)¥C¨¡H¤HÑ-Ô-�Ýœ™œ�à×$Ò$Ñ&Ô&¨*Ò4Ð4Ø*7Ñ'�H˜i˜ià*7Ñ'�H˜iå %¥c¨'¡l¤lÑ 3Ô 3ð Gñ G�HØ& xÔ0�HØ'œ}�Hà$Ÿošo°HÀY˜oÑOÔO�Gà# {Ò2Ð2Ø×)Ò)Ý œI a¨¨H°iÑ@Ô@Ø"4Ø!3ð *ñ ô ð ð ð
 &¨Ò0Ð0Ø×)Ò)Ý œI a¨¨H°iÑ@Ô@Ø"4Ø!3ð *ñ ô ð ð "�FØ'¨1¨v©:Ñ6�HØ(¨A°©JÑ7�Hå ¨8¬>Ñ 9¸8ÀhÄoÑ;UÑVÔV�EØ'œ~°Ñ5�HØ'œ°Ñ6�Hà%¨°HÑ)<ÀÑ(CÑC�HØ%¨°HÑ)<ÀÑ(CÑC�HÝ#œyØ  (¨H°xÑ,?ÀÈHÑATñ ô  �Hð ×)Ò)¨(°G¸XÑFÔFÐFð
 (¨;Ò6Ð6ð (˜à,ð !ð
 ×%Ò% h°lÈ#Ð%ÑNÔNÐNå $¤	Ø œ cÑ)¨8¬;¸Ñ+;¸X¼[È(Ì+ñ!ô !�Ið ×%Ò%Ø!Ø*à'¨;Ò6Ð6ð 0Ð/à&Ø!ð &ñ ô ð ð ×'Ò'Ýœ
 9¤<°"Ñ#4°i´lÀRÑ6GÑHÔHØRØ!"Ø*ð	 (ñ ô ð ð ×'Ò'Ýœ
 9¤<°"Ñ#4°i´lÀRÑ6GÑHÔHØA°#´(¸3¸B¸3´-ÐAÐAØ!"Ø+7¸;Ò+FÐ+F˜i˜iÈIð	 (ñ ô ð ð ×'Ò'Ýœ
 9¤<°"Ñ#4°i´lÀRÑ6GÑHÔHØsÐV^ÐabÑVbÐsÐsÕehÐipÑeqÔeqÐsÐsØ!$Ø-ð	 (ñ ô ð ñ ð —’�C ™KœKÑ(Ô(Ð(Ø—’‘”�Ø—’‘”�Ý—’ØRØ”KØØ ñ	ô ð ð �øÝð ð ð Ý—’Ø_Øñô ð õ ”  VÑ,Ô,Ð,Ø������øøøøðøøøð Ô%×:Ò:½3¸s¹8¼8ÅSÈÁ[Ä[ÑQÔQˆØð 	�v—}’}‘”ð 	ØˆMõ 	Œ˜˜VÑ$Ô$Ð$Øˆs   Â:MP Ð
QÐ1QÑQÑQ)r   r   )
r   r   r   r   r   r   r   r   r   r   )NrE   rF   )
rG   rH   rI   rJ   rK   r(   rL   r(   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rD   r�   © r   r   r   r      sv   € € € € € ØFÐFð:ð :ð :ð Øð)ð )ð )ð )ð )ð\ .2Ø&Ø'ð@ð @ð @ð @ð @ð @ð @r   r   )r”   Ú
__future__r   Úloggingru   Úpathlibr   r&   Ú5app.modules.takeoff.application.cad_converter_servicer   Ú>app.modules.takeoff.application.vietnamese_cad_font_transcoderr   Ú	getLoggerr$   r   r•   r   r   ú<module>rœ      sÑ   ððð ð
 #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ð Ð à €€€à [Ð [Ð [Ð [Ð [Ð [ðð ð ð ð ð ð 
ˆÔ	Ð9Ñ	:Ô	:€ðrð rð rð rð rñ rô rð rð rð rr   