
    vj                     <   d dl mZ d dlmZ d dlmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZ d d	lZd d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZ ddez  z  Zd Z d Z!d Z"d Z#d Z$d Z%e e!e"e#e#e$e%dZ&d Z'dg g fde(de)dee(   dee(   dee   f
d Z*y	)!    )OrderedDict)pi)List   )cq   )Vector)ShapeEdgeFacesortWiresByBuildOrderN)ShapeAnalysis_FreeBounds)TopTools_HSequenceOfShape)gp_Pnt)Geom_BSplineCurve)TColgp_Array1OfPnt)TColStd_Array1OfRealTColStd_Array1OfInteger)BRepBuilderAPI_MakeEdgeg     v@c                     	 t        j                  t        | j                  j                  j
                        t        | j                  j                  j
                              fS # t        $ r Y yw xY wN )r   makeLiner	   dxfstartxyzend	Exceptionels    L/DATA/.local/lib/python3.12/site-packages/cadquery/occ_impl/importers/dxf.py	_dxf_liner"      sQ    fRVV\\%5%56rvvzz~~8NOQQ s   A$A' '	A32A3c                     	 t        j                  | j                  j                  t	        | j                  j
                  j                              fS # t        $ r Y yw xY wr   )r   
makeCircler   radiusr	   centerr   r   r   s    r!   _dxf_circler'      sH    vbffmm6G6G/HIKK s   AA 	A A c                    	 t        j                  | j                  j                  t	        | j                  j
                  j                        | j                  j                  | j                  j                        fS # t        $ r Y yw xY w)N)angle1angle2r   )
r   r$   r   r%   r	   r&   r   start_angle	end_angler   r   s    r!   _dxf_arcr-   '   sl    
OOrvv}}(()vv))vv''	
 	
  s   A<A? ?	B
Bc                 B    d | j                         D        }d |D        S )Nc              3   `   K   | ]&  }t        |j                  j                     |       ( y w)N)DXF_CONVERTERSr   dxftype.0es     r!   	<genexpr>z _dxf_polyline.<locals>.<genexpr>8   s%     	J4Iq.
'
*4Is   ,.c              3   ,   K   | ]  }|s|d      yw)r   Nr   r2   s     r!   r5   z _dxf_polyline.<locals>.<genexpr>:   s     ""QAaD"s   
)virtual_entities)r    rvs     r!   _dxf_polyliner9   6   s     	JB4G4G4I	JB""""    c                    	 | j                   j                  }| j                  }d}t               }| j                  D ]  }||v r||xx   dz  cc<   d||<    t        dt        |            }t        dt        |            }t        |j                               D ]2  \  }\  }}	|j                  |dz   |       |j                  |dz   |	       4 | j                  rSd}t        dt        | j                              }
t        | j                        D ]  \  }}|
j                  |dz   |        t        dt        | j                              }t        | j                        D ]   \  }}|j                  |dz   t        |        " |rt        |
||||      }nt        |||||      }t!        t#        |      j!                               fS # t$        $ r Y yw xY w)NF   Tr   )r   degreeclosedr   knotsr   lenr   	enumerateitemsSetValueweightsr   control_pointsr   r   r   r   r   )r    r=   periodicrationalknots_uniquekr?   multiplicitiesimrD   wptspsplines                  r!   _dxf_splinerQ   =   s   *99"}AL Q1$"#Q	  %QL(9:0C4EF"<#5#5#78IAv1NN1q5!$##AE1- 9
 ::H*1c"**o>G!"**-1  Q* . !C(9(9$:;b//0DAqLLQ
+ 1 &We^VXF 'sE>68TF,V499;<>> s   GG 	GGc           
         	 t        j                  | j                  j                  j                  | j
                  j                  t        | j                  j                  j                        | j                  j                  j                  t        | j                  j                  j                        | j                  j                  t        z  | j                  j                  t        z        fS # t        $ r Y yw xY w)N)pntdirxdirr)   r*   r   )r   makeEllipser   
major_axis	magnitude
minor_axisr	   r&   r   	extrusionstart_paramRAD2DEG	end_paramr   r   s    r!   _dxf_ellipser^   l   s     !!++''266==,,-FF$$((BFF--112vv))G3vv'''1

 
	
  s   C0C3 3	C?>C?)LINECIRCLEARCPOLYLINE
LWPOLYLINESPLINEELLIPSEc                    g }g }| D ]E  }t         j                  |j                  j                        }|s/|j	                   ||             G |rpt               }t               }|D ]  }|j                  |j                          t        j                  ||d|       |D cg c]  }t        j                  |       }}|S c c}w )NF)r0   getr   r1   extendr   Appendwrappedr   ConnectEdgesToWires_sr
   cast)	elementstolr8   edgesr    convedges_in	wires_outr4   s	            r!   _dxf_convertrs      s    	BE!!"&&..1LLb" 
 ,.-/	AOOAII&  66xeYW'01yejjny1I 2s   #Cgư>filenamern   excludeincludereturnc           
         |r|rt        d      t        j                  |       }g }|j                         j	                  d      }t        |j                         D cg c]  }|j                          c}      }|r+|t        |D cg c]  }|j                          c}      z  }	n/|r+|t        |D cg c]  }|j                          c}      z
  }	n|}	|	st        d      |j                         D ]d  \  }}
|j                         |	v st        ||   |      }t        |      }|D ]-  }|j                  t        j                  |d   |dd              / f |S c c}w c c}w c c}w )a#  
    Loads a DXF file into a list of faces.

    :param fileName: The path and name of the DXF file to be imported
    :param tol: The tolerance used for merging edges into wires
    :param exclude: a list of layer names not to import
    :param include: a list of layer names to import
    z:you may specify either 'include' or 'exclude' but not bothlayer)	dxfattribzno DXF layers selectedr   r<   N)
ValueErrorezdxfreadfile
modelspacegroupbysetkeyslowerrB   rs   r   appendr   makeFromWires)rt   rn   ru   rv   r   faceslayersnamenamesselectedry   res	wire_setswire_sets                 r!   
_importDXFr      sI    7UVV
..
"CE^^%%%8F &++-8-$-89E3A

ABB	3A

ABB122||~e::<8#vd|S1C-c2I%T//Xab\JK &	 & L' 9  BAs   EE#
5E(
)+collectionsr   mathr   typingr    r   geomr	   shapesr
   r   r   r   r|   OCP.ShapeAnalysisr   OCP.TopToolsr   OCP.gpr   OCP.Geomr   
OCP.TColgpr   OCP.TColStdr   r   OCP.BRepBuilderAPIr   r\   r"   r'   r-   r9   rQ   r^   r0   rs   strfloatr   r   r:   r!   <module>r      s    #     = =  6 2  & ) E 6 1r6
#,^( 0 !%2TV(((/3Cy(HLS	(	$Z(r:   