
    vj                         d dl m Z  d dlmZ d dlmc mZ d dlmZm	Z	m
Z
mZmZ d dlmZmZmZ ddlmZmZmZ  G d d	e      Z G d
 de      Ze
d   Z G d de      Zy)    )datetime)PathLikeN)IOListLiteralTupleUnion)ZipFileZIP_DEFLATED
ZIP_STORED   )CompoundShapeVectorc                       e Zd ZdZdZy)CONTENT_TYPESz6application/vnd.ms-package.3dmanufacturing-3dmodel+xmlz8application/vnd.openxmlformats-package.relationships+xmlN)__name__
__module____qualname__MODELRELATION     P/DATA/.local/lib/python3.12/site-packages/cadquery/occ_impl/exporters/threemf.pyr   r   
   s    DEIHr   r   c                       e Zd ZdZdZdZdZy)SCHEMASz<http://schemas.openxmlformats.org/package/2006/content-typesz<http://schemas.openxmlformats.org/package/2006/relationshipsz9http://schemas.microsoft.com/3dmanufacturing/core/2015/02z<http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodelN)r   r   r   r   r   COREr   r   r   r   r   r      s    RMMHFDJEr   r   )micron
millimeter
centimetermeterinchfootc                       e Zd Z	 ddedededefdZdeee	e
e   f   fdZde	fd	Zd
ej                  de	deee   eeeeef      f   fdZde	fdZde	fdZy)ThreeMFWritershape	toleranceangularToleranceunitc                     || _         t        |t              rt        |      }n|g}|D cg c]  }|j	                  ||       }}|D cg c]  }t        |      s| c}| _        yc c}w c c}w )z]
        Initialize the writer.
        Used to write the given Shape to a 3MF file.
        N)r)   
isinstancer   list
tessellatealltessellations)	selfr&   r'   r(   r)   shapessr/   ts	            r   __init__zThreeMFWriter.__init__   sk     	eX&%[FWFLRSFqi1ABFS)6AA#a&aA TAs   A(
A-A-outfilec                 H   	 ddl }t        }t	        |d|      5 }|j                  d| j                                |j                  d| j                                |j                  d| j                                ddd       y# t        $ r	 t        }Y w xY w# 1 sw Y   yxY w)z*
        Write to the given file.
        r   Nwz_rels/.relsz[Content_Types].xmlz3D/3dmodel.model)	zlibr   ImportErrorr   r
   writestr_write_relationships_write_content_types	_write_3d)r0   r5   r8   compressionzfs        r   write3mfzThreeMFWriter.write3mf0   s    	%&K Wc;/2KKt'@'@'BCKK-t/H/H/JKKK*DNN,<= 0/  	%$K	% 0/s   
B A!BBBB!returnc                 V   t        | j                        }t        j                  ddt        j
                  d| j                        }dt        j                  |dd      _        t        j                         j                         t        j                  |dd	      _        t        j                  |d
      }t        | j                        D ]!  \  }}| j                  |t        |      |       # t        j                  |dt        |      dd      }t        j                  |d      }t        |      D ]#  }t        j                  |dt        |             % t        j                  |d      }t        j                  |dt        |             t        j                   |dd      S )Nmodelzen-US)zxml:langxmlns)r)   zCadQuery 3MF ExportermetadataApplication)nameCreationDate	resourcesobjectzCadQuery ComponentidrG   type
components	component)objectidbuilditemTutf-8xml_declarationencoding)lenr/   ETElementr   r   r)   
SubElementtextr   now	isoformat	enumerate	_add_meshstrrangetostring)	r0   	no_meshesrC   rI   itessellationcomp_objectrN   rQ   s	            r   r=   zThreeMFWriter._write_3dC   sR   **+	

'GLLB
 ) 	:M	

 ))+ 	:N	

MM%5	  )););<OA|NN9c!fl;  = mm9~%
 ]];=
 y!AMMK#a& " eW-
eVc)n={{5$IIr   torL   re   c                    t        j                  |d|d| d      }t        j                  |d      }t        j                  |d      }|d   D ]U  }t        j                  |dt        |j                        t        |j                        t        |j
                        	       W t        j                  |d
      }|d   D ]@  }	t        j                  |dt        |	d         t        |	d         t        |	d                B y )NrJ   zCadQuery Shape rC   rK   meshverticesr   vertex)xyz	triangles   triangler   )v1v2v3)rX   rZ   r`   rl   rm   rn   )
r0   rg   rL   re   rJ   ri   rj   vvolumer3   s
             r   r_   zThreeMFWriter._add_mesho   s     Rt&<7
 }}VV, ==z2aAMM(HACCCHACCQ ! t[1aAMM&*QqTs1Q4ySQRSTQUYW !r   c                 8   t        j                  d      }|j                  dt        j                         t        j
                  |ddt        j                         t        j
                  |ddt        j                         t        j                  |dd	      S )
NTypesrD   Override/3D/3dmodel.model)PartNameContentTypez/_rels/.relsTrS   rT   )	rX   rY   setr   r   rZ   r   r   rb   r0   roots     r   r<   z"ThreeMFWriter._write_content_types   sw    zz'"'//0
(%++		
 	#%..		
 {{4HHr   c                     t        j                  d      }|j                  dt        j                         t        j
                  |dddt        j                  d       t        j                  |dd	
      S )NRelationshipsrD   Relationshiprz   zrel-1Internal)TargetIdType
TargetModeTrS   rT   )rX   rY   r}   r   r   rZ   r   rb   r~   s     r   r;   z"ThreeMFWriter._write_relationships   s[    zz/*'**+
&!	
 {{4HHr   N)r   )r   r   r   r   floatUnitr4   r	   r   r`   r   bytesr@   r=   rX   rY   r   r   r   intr_   r<   r;   r   r   r   r%   r%      s     "BB B  	B
 B,>XsBuI56>&*J3 *JXXJJX X DL$uS#s]/C*DDE	X*Ic I&Ic Ir   r%   )r   osr   xml.etree.cElementTreeetreecElementTreerX   typingr   r   r   r   r	   zipfiler
   r   r   r1   r   r   r   rJ   r   r   r   r%   r   r   r   <module>r      s\      # # 2 2 5 5 , ,JF J
Kf K LMKIF KIr   