
    Og>                       d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ d dlZd dlmZ d dlmZmZmZmZ  ej.                  d      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zi dddddddddddd d!d"d#d$d%d&d'd(d)d*d+dd,dd-dd.dd/dd0d d"d$d&d1Z h d2Z!d3Z"d4Z#d5Z$dId6Z%dId7Z&dJd8Z'dKd9Z(	 dLd:d;	 	 	 	 	 	 	 dMd<Z)	 dLd:d:d=	 	 	 	 	 	 	 	 	 	 	 dNd>Z*	 dOd%d?d:d@	 	 	 dPdAZ+dQdBZ,	 	 	 dR	 	 	 	 	 	 	 	 	 	 	 	 	 dSdCZ-dTdDZ.edE        Z/	 	 	 	 	 	 	 	 dUdFZ0dVdGZ1dWdHZ2y)X    )annotations)OptionalN)contextmanager)Path)Drawing)is_dxf_filedxf_infois_binary_dxf_filedwg_versionezdxfc                      e Zd Zy)
ODAFCErrorN__name__
__module____qualname__     W/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/addons/odafc.pyr   r          r   r   c                      e Zd Zy)UnknownODAFCErrorNr   r   r   r   r   r       r   r   r   c                      e Zd Zy)ODAFCNotInstalledErrorNr   r   r   r   r   r   $   r   r   r   c                      e Zd Zy)UnsupportedFileFormatNr   r   r   r   r   r   (   r   r   r   c                      e Zd Zy)UnsupportedPlatformNr   r   r   r   r   r   ,   r   r   r   c                      e Zd Zy)UnsupportedVersionNr   r   r   r   r    r    0   r   r   r    R12ACAD12R13ACAD13R14ACAD14R2000ACAD2000R2004ACAD2004R2007ACAD2007R2010ACAD2010R2013ACAD2013R2018ACAD2018AC1004ACAD9AC1006ACAD10AC1009AC1012AC1014AC1015AC1018AC1021)AC1024AC1027AC1032>   r4   r6   r"   r$   r&   r(   r*   r,   r.   r0   r2   WindowsLinuxDarwinc                 `    t         j                  j                  dd      j                  d      S )Nodafc-addonwin_exec_path"r   optionsgetstripr   r   r   get_win_exec_pathrK   ^   s$    ==]O<BB3GGr   c                 `    t         j                  j                  dd      j                  d      S )NrD   unix_exec_pathrF   rG   r   r   r   get_unix_exec_pathrN   b   s%    ==],<=CCCHHr   c                 
   t        j                         t        t        fv r=t	               } | rt        |       j                         ryt        j                  d      duS t        j                  j                  t                     S )z6Returns ``True`` if the ODAFileConverter is installed.TODAFileConverterN)platformsystemLINUXDARWINrN   r   is_fileshutilwhichospathexistsrK   )rM   s    r   is_installedr[   f   s_    UFO++-d>2::<||./t;;77>>+-..r   c                f    t         j                  | j                         | j                               S N)VERSION_MAPrI   upper)versions    r   map_versionra   q   s    ??7==?GMMO<<r   F)auditc          	        t        |       j                         }|j                         st        d| d      t	        |t
              rt        |      }nt        |       }t        j                  d      5 }t        |j                  t        |j                        |d||      }t        |       t        |      |j                  d      j                  z  }|j                         rHt!        j"                  t        |            }t        |j                  d            |_        |cddd       S 	 ddd       t'        d	      # 1 sw Y   t'        d	      xY w)
a  Uses an installed `ODA File Converter`_ to convert a DWG/DXB/DXF file
    into a temporary DXF file and load this file by `ezdxf`.

    Args:
        filename: file to load by ODA File Converter
        version: load file as specific DXF version, by default the same version
            as the source file or if not detectable the latest by `ezdxf`
            supported version.
        audit: audit source file before loading

    Raises:
        FileNotFoundError: source file not found
        odafc.UnknownODAFCError: conversion failed for unknown reasons
        odafc.UnsupportedVersion: invalid DWG version specified
        odafc.UnsupportedFileFormat: unsupported file extension
        odafc.ODAFCNotInstalledError: ODA File Converter not installed

    zNo such file: ''odafc_prefixDXFoutput_formatr`   rb   .dxfNz%Failed to convert file: Unknown Error)r   absoluterU   FileNotFoundError
isinstancestrra   _detect_versiontempfileTemporaryDirectory_odafc_argumentsnameparent_execute_odafcwith_suffixrZ   r   readfilefilenamer   )ry   r`   rb   infiletmp_dirargsout_filedocs           r   rx   rx   u   s%   * (^$$&F>>/& ;<<'3g&!(+		$	$H	5 KK
 	t=6#5#5f#=#B#BB??..X/Cv11&9:CL   C
DD C
DDs   6B/EE)rb   replacec          	        || j                   }t        |   }t        |      j                         }t        |j                        }|j                         r!|r|j                          nt        d|       |j                         rt        j                  d      5 }t        |      |j                  d      j                  z  }	| j                  }
| j                  |	       |
| _        t        |	j                  |t        |      d||      }t!        |       ddd       yt#        dt        |       d	      # 1 sw Y   yxY w)
a  Uses an installed `ODA File Converter`_ to export the DXF document `doc`
    as a DWG file.

    A temporary DXF file will be created and converted to DWG by the
    ODA File Converter. If `version` is not specified the DXF version of the
    source document is used.

    Args:
        doc: `ezdxf` DXF document as :class:`~ezdxf.drawing.Drawing` object
        filename: output DWG filename, the extension will be set to ".dwg"
        version: DWG version to export, by default the same version as
            the source document.
        audit: audit source file by ODA File Converter at exporting
        replace: replace existing DWG file if ``True``

    Raises:
        FileExistsError: target file already exists, and argument `replace` is
            ``False``
        FileNotFoundError: parent directory of target file does not exist
        odafc.UnknownODAFCError: exporting DWG failed for unknown reasons
        odafc.ODAFCNotInstalledError: ODA File Converter not installed

    NzFile already exists: re   rf   rk   DWGri   zNo such file or directory: 'rd   )
dxfversionr^   r   rl   ru   rZ   unlinkFileExistsErrorrq   rr   rw   rt   ry   saveasrs   ro   rv   rm   )r~   ry   r`   rb   r   export_versiondwg_file
out_folderr{   dxf_fileold_filename	argumentss               r   
export_dwgr      s#   > .. )NH~&&(Hhoo&JOO!$9("DEE((9 	&WG}x';';F'C'H'HHH <<LJJx 'CL(J#&I 9%!	& 	&$  ">s:>Oq QRR%	& 	&s   A;D99ET)r`   rb   r   c          	        t        |      }|t        vrt        d| d      t        |       j	                         j                         }|j                         st        d|  d      |rt        |      }nW|j                  j                         }|dk(  r|j                  d      }n&|dk(  r|j                  d      }nt        d| d      |j                         r|st        d| d      |j                  }|j                         r|j                         st        d| d      |j                  }|j                         d	d
 }	|	dvrt        d| d      t!        j"                  d      5 }
t%        |j&                  t)        |j                        t)        |
      |	||      }t+        |       t-        t        |
      j/                               }|r	 t1        j2                  |d   |       nt9        d|	 d       d
d
d
       y
# t4        $ r t1        j6                  |d   |       Y -w xY w# 1 sw Y   y
xY w)a  Convert `source` file to `dest` file.

    The file extension defines the target format
    e.g. :code:`convert("test.dxf", "Test.dwg")` converts the source file to a
    DWG file.
    If `dest` is an empty string the conversion depends on the source file
    format and is DXF to DWG or DWG to DXF.
    To convert DXF to DXF an explicit destination filename is required:
    :code:`convert("r12.dxf", "r2013.dxf", version="R2013")`

    Args:
        source: source file
        dest: destination file, an empty string uses the source filename with
            the extension of the target format e.g. "test.dxf" -> "test.dwg"
        version: output DXF/DWG version e.g. "ACAD2018", "R2018", "AC1032"
        audit: audit files
        replace: replace existing destination file

    Raises:
        FileNotFoundError: source file or destination folder does not exist
        FileExistsError: destination file already exists and argument `replace`
            is ``False``
        odafc.UnsupportedVersion: invalid DXF version specified
        odafc.UnsupportedFileFormat: unsupported file extension
        odafc.UnknownODAFCError: conversion failed for unknown reasons
        odafc.ODAFCNotInstalledError: ODA File Converter not installed

    zInvalid version: 'rd   zSource file not found: '.dwgrk   Unsupported file format: 'zTarget file already exists: 'z$Destination folder does not exist: '   N)rh   r   re   rf   )	in_folderr   rj   r`   rb   r   zUnknown error: no z file was created)ra   VALID_VERSIONSr    r   
expanduserrl   rZ   rm   suffixlowerrw   r   r   ru   is_dirr_   rq   rr   rs   rt   ro   rv   listiterdirrV   moveIOErrorcopyr   )sourcedestr`   rb   r   src_path	dest_pathext
parent_dirfmtr{   r   results                r   convertr      s*   H '"Gn$ #5gYa!@AAF|&&(113H??":6(! DEEJ	oo##%&= ,,V4IF] ,,V4I'*DSE(KLL' =i[JKK!!Jj&7&7&9"FzlRS TUU


C
))+ab/C
. #&@Q$GHH		$	$H	5 K$MM(//*7|
	 	y!d7m++-.2F1Iy1  23%7HIJ#K K  2F1Iy12K Ks1   2A'H4H3H4"H1.H40H11H44H=c                   d}t         j                  j                  |       d   j                         }|dk(  r`t	        |       r	 t        |      S t        |       rjt        | d      5 }t        |      }t        |j                     }ddd       t        |      S |dk(  rt        |       }|t        d      t        d| d	      t        |      S # 1 sw Y   t        |      S xY w)
zReturns the DXF/DWG version of file `path` as ODAFC compatible version
    string.

    Raises:
        odafc.UnsupportedVersion: unknown or unsupported DWG version
        odafc.UnsupportedFileFormat; unsupported file extension

    r2   r   rk   rtNr   z#Unknown or unsupported DWG version.r   rd   )rX   rY   splitextr   r
   r   openr	   r^   r`   r   r    r   ra   )rY   r`   r   fpinfos        r   rp   rp   6  s     G
''

4
 
#
)
)
+C
f}d# w dD! 4R|%dll34 w 
d#?$%JKK#&@Q$GHHw4 ws   &CC"c                $    d}|rdnd}||||||| gS )a  ODA File Converter command line format:

    ODAFileConverter "Input Folder" "Output Folder" version type recurse audit [filter]

        - version: output version: "ACAD9" - "ACAD2018"
        - type: output file type: "DWG", "DXF", "DXB"
        - recurse: recurse Input Folder: "0" or "1"
        - audit: audit each file: "0" or "1"
        - optional Input files filter: default "*.DWG,*.DXF"

    01r   )ry   r   r   rj   r`   rb   recurse	audit_strs           r   rs   rs   R  s1    & G#I r   c                <   t               }| t        k7  r6|r4t        |      j                         r|S t        j                  d| d       t        j                  d      }|s.| t        k(  r%t               }t        |      j                         sd}|st        d      |S )zuGet ODAFC application path.

    Raises:
        odafc.ODAFCNotInstalledError: ODA File Converter not installed

    z	command 'z%' not found, using 'ODAFileConverter'rP   Nz~Could not find ODAFileConverter in the path. Install application from https://www.opendesign.com/guestfiles/oda_file_converter)
rN   WINDOWSr   rU   loggerwarningrV   rW   rK   r   )rR   rM   rY   s      r   _get_odafc_pathr   r  s     ()N^'')!!NNN++PQ <<*+DFg% "Dz!!#D$`
 	
 Kr   c               #    K   t        j                  d      rvd} t        j                  d| dddgt        j                  t        j                        }t        j                  d       |  	 |j                          |j                          y
t        j                  d       t        j                  d	    y
# t        $ r Y y
w xY ww)zCSee xvbfwrapper library for a more feature complete xvfb interface.Xvfbz:123z-screenr   
800x600x24)stdoutstderrg?z=Install xvfb to prevent the ODAFileConverter GUI from openingDISPLAYN)rV   rW   
subprocessPopenDEVNULLtimesleep	terminatewaitOSErrorr   r   rX   environ)displayprocs     r   _linux_dummy_displayr     s      ||FWil;%%%%

 	

3	NNIIK 	VXjj##	  		s*   A*C- B9 ,C9	CCCCc                   | t         k(  rUt               5 }t        j                  j	                         }||d<   t        j                  |g|z   dd|      }ddd       |S | t        k(  rt        j                  |g|z   dd      }|S | t        k(  rt        j                         }t
        j                  t
        j                  z  |_        t
        j                  |_        t        j                  |g|z   t
        j                   t
        j                   |      }|j#                          |S t%        d|        # 1 sw Y   S xY w)aT  Execute ODAFC application without launching the GUI.

    Args:
        system: "Linux", "Windows" or "Darwin"
        command: application to execute
        arguments: ODAFC argument list

    Raises:
        odafc.UnsupportedPlatform: for unsupported platforms
        odafc.ODAFCNotInstalledError: ODA File Converter not installed

    r   T)textcapture_outputenvN)r   r   )r   r   startupinfozUnsupported platform: )rS   r   rX   r   r   r   runrT   r   STARTUPINFOCREATE_NEW_CONSOLESTARTF_USESHOWWINDOWdwFlagsSW_HIDEwShowWindowr   PIPEr   r   )rR   commandr   r   r   r   r   s          r   _run_with_no_guir     s(    !# 	w**//#C$C	N>>	I%D3D	: K- 
6	~~wi)3$tT( K% 
7	 ,,.))J,K,KK 	 #-"4"4I	!????#	
 			
 K "$:6("CDD9	: Ks   AD77Ec                b    |j                         }| t        k(  r|dk7  xr |dk7  S |dk7  ry|dk7  S )N zQuit (core dumped)r   T)rJ   rS   )rR   
returncoder   s      r   _odafc_failedr     s=    \\^F|>*> >>	q|r   c                   t         j                  d|         t        j                         }t	        |      }t        |||       }|j                  }|t        k(  rS|j                  j                         j                  d      }|j                  j                         j                  d      }n|j                  }|j                  }t        |||      r+d| d| d| }t         j                  |       t        |      |S )a)  Execute ODAFC application.

    Args:
        arguments: ODAFC argument list

    Raises:
        odafc.ODAFCNotInstalledError: ODA File Converter not installed
        odafc.UnknownODAFCError: execution failed for unknown reasons
        odafc.UnsupportedPlatform: for unsupported platforms

    z)Running ODAFileConverter with arguments: zutf-8z)ODA File Converter failed: return code = z
.
stdout: z	
stderr: )r   debugrQ   rR   r   r   r   r   r   readdecoder   r   r   )r   rR   oda_fcr   r   r   r   msgs           r   rv   rv     s     LL<YKHI__FV$FFFI6DJ!!#**73!!#**73VZ07
| Dhj2 	 	S$$Mr   )returnro   )r   bool)r`   ro   r   ro   r]   )ry   str | os.PathLiker`   Optional[str]rb   r   r   r   )r~   r   ry   r   r`   r   rb   r   r   r   r   None)r   )r   r   r   r   )rY   ro   r   ro   )rh   r0   F)ry   ro   r   ro   r   ro   rj   ro   r`   ro   rb   r   r   	list[str])rR   ro   r   ro   )rR   ro   r   ro   r   r   r   zsubprocess.Popen)rR   ro   r   intr   ro   r   r   )r   r   r   zOptional[bytes])3
__future__r   typingr   loggingrX   rQ   rV   r   rq   r   
contextlibr   pathlibr   r   ezdxf.documentr   ezdxf.lldxf.validatorr   r	   r
   r   	getLoggerr   r   r   r   r   r   r   r    r^   r   r   rS   rT   rK   rN   r[   ra   rx   r   r   rp   rs   r   r   r   r   rv   r   r   r   <module>r      s   #   	      %   "  
		7	#	 		
 		Z 		J 		* 		 		8	8 
8 Z	
 Z Z Z Z Z g h h h h j  j!" j#$ ). 	HI/=
 ;?,EQV,E,E*7,EJN,E,Ed "<S
 <S	<S<S <S
 <S <S 
<SB !PK 
PKPK
PKf @   	
   @ F $ $*---*3--`	r   