
    vjj                        d dl mZmZmZmZmZmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZ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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% d dl&m'Z' d dl(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z;m<Z<m=Z= d dl>m?Z? d dl@mAZAmBZBmCZC ddlDmEZE ddlFmGZGmHZHmIZI ddlJmKZK ddlLmMZM ddlNmOZO eeGeMdf   ZP G d d eQ      ZR G d! d"eQ      ZS G d# d$e      ZTd%e%d&eUfd'ZVd%e%d(eSfd)ZWd%e%d*eRfd+ZX	 	 	 	 	 dAd,eTd-eYd.eYd/eZd0eZd1eYd2ee%ef   fd3Z[d4eEd2eeeZeZeZf   eeZeZeZf   f   fd5Z\	 	 	 	 	 	 dBd,eTd(eeZeZeZeZf   d6eeZeZeZeZf   d7eYd8eZd/eZd0eZd2e	e=   fd9Z]	 	 	 dCd,eTd(eeZeZeZeZf   d/eZd0eZd2e<f
d:Z^	 	 dDd,eTd(eeZeZeZeZf   d/eZd2e	eeUef      fd;Z_	 dEd,eTd<eYd=eeZ   d2ee%ef   fd>Z`d,eTd2eeGeeGeeUd?f   f   f   fd@Zay)F    )
UnionIterableIteratorTupleDictoverloadOptionalAnyListcast)ProtocolSelf)degreesradians)TCollection_HAsciiString)TDocStd_Document)TCollection_ExtendedString)XCAFDoc_DocumentToolXCAFDoc_ColorTypeXCAFDoc_ColorGenXCAFDoc_MaterialXCAFDoc_VisMaterial)XCAFApp_Application)BinXCAFDrivers)XmlXCAFDrivers)TDataStd_Name)	TDF_Label)TopLoc_Location)Quantity_ColorRGBAQuantity_ColorQuantity_TOC_sRGBQuantity_TOC_RGB)BRepAlgoAPI_Fuse)TopTools_ListOfShape)BOPAlgo_GlueEnumBOPAlgo_MakeConnected)TopoDS_Shape)gp_EulerSequence)vtkActorvtkPolyDataMappervtkRenderer	vtkProp3D)vtkExtractCellsByType)VTK_TRIANGLEVTK_LINE
VTK_VERTEX   )Location)ShapeSolidCompound)toString   )	Workplane)BiDictNc                       e Zd ZU dZeed<   eed<   ddedz  fdZe	defd       Z
e	defd	       Ze	defd
       Ze	defd       Zdeeeeef   fdZd Zd Zdeeeeef   fdZdeeeeef   fdZy)Materialz
    Wrapper for the OCCT material classes XCAFDoc_Material and XCAFDoc_VisMaterial.
    XCAFDoc_Material is focused on physical material properties and
    XCAFDoc_VisMaterial is for visual properties to be used when rendering.
    wrappedwrapped_visNnamec           	      l   t               | _        d}d}d}d}d}|r|}d|j                         v r|d   }d|j                         v r|d   }d|j                         v r|d   }| j                  j                  t	        |      t	        |      |t	        |      t	        |             t               | _        y	)
z
        Can be passed an arbitrary string name for the material along with keyword
        arguments defining some other characteristics of the material. If nothing is
        passed, arbitrary defaults are used.
        Default gffffff@Mass densityzg/cm^3descriptiondensitydensityUnitN)r   r<   keysSetr   r   r=   )selfr>   kwargsaNameaDescriptionaDensityaDensityNameaDensityTypeNames           G/DATA/.local/lib/python3.12/site-packages/cadquery/occ_impl/assembly.py__init__zMaterial.__init__J   s     () %# EFKKM)!-0L%i(HFKKM)%m4 	$U+$\2$\2$%56	
 /0    returnc                 R    | j                   j                         j                         S )z6
        Get the string name of the material.
        )r<   GetName	ToCStringrH   s    rO   r>   zMaterial.namet   s     
 ||##%//11rQ   c                 R    | j                   j                         j                         S )z=
        Get the string description of the material.
        )r<   GetDescriptionrU   rV   s    rO   rC   zMaterial.description{        
 ||**,6688rQ   c                 6    | j                   j                         S )z8
        Get the density value of the material.
        )r<   
GetDensityrV   s    rO   rD   zMaterial.density   s    
 ||&&((rQ   c                 R    | j                   j                         j                         S )zH
        Get the units that the material density is defined in.
        )r<   GetDensValTyperU   rV   s    rO   rE   zMaterial.densityUnit   rY   rQ   c                 n    | j                   }| j                  }| j                  }| j                  }||||fS )z.
        Convert Material to a tuple.
        )r>   rC   rD   rE   )rH   r>   rC   rD   rE   s        rO   toTuplezMaterial.toTuple   s;     yy&&,,&&k7K88rQ   c                 4    t        | j                               S )zG
        Create a unique hash for this material via its tuple.
        hashr_   rV   s    rO   __hash__zMaterial.__hash__   s     DLLN##rQ   c                 D    | j                         |j                         k(  S )zP
        Check equality of this material against another via its tuple.
        r_   rH   others     rO   __eq__zMaterial.__eq__   s     ||~00rQ   c                 "    | j                         S )"
        Allows pickling.
        re   rV   s    rO   __getstate__zMaterial.__getstate__   s     ||~rQ   datac           
          t               | _        | j                  j                  t        |d         t        |d         |d   t        d      t        |d                y)rj   r   r1   r7   rB      N)r   r<   rG   r   rH   rl   s     rO   __setstate__zMaterial.__setstate__   sS     ()$T!W-$T!W-G$^4$T!W-	
rQ   N)__name__
__module____qualname____doc__r   __annotations__r   strrP   propertyr>   rC   floatrD   rE   r   r_   rc   rh   rk   rp    rQ   rO   r;   r;   @   s     $$(1S4Z (1T 2c 2 2 9S 9 9 ) ) ) 9S 9 9	9sC34 	9$1eCeS$89 
sC';!< 
rQ   r;   c                       e Zd ZU dZeed<   edefd       Zedde	de	de	de	d	e
f
d
       Zed        Zd Zd Zd Zdee	e	e	e	f   fdZdee	e	e	e	f   fdZdee	e	e	e	f   fdZy)Colorz?
    Wrapper for the OCCT color object Quantity_ColorRGBA.
    r<   r>   c                      y)zd
        Construct a Color from a name.

        :param name: name of the color, e.g. green
        Nrz   rH   r>   s     rO   rP   zColor.__init__        	rQ   rgbasrgbc                      y)a  
        Construct a Color from RGB(A) values.

        :param r: red value, 0-1
        :param g: green value, 0-1
        :param b: blue value, 0-1
        :param a: alpha value, 0-1 (default: 0)
        :param srgb: srgb/linear rgb switch, bool (default: True)
        Nrz   )rH   r   r   r   r   r   s         rO   rP   zColor.__init__   s     	rQ   c                      y)z7
        Construct a Color with default value.
        Nrz   rV   s    rO   rP   zColor.__init__   s    
 	rQ   c                 $   t        |      dk(  rt               | _        y t        |      dk(  rkt               | _        t        j                  |d   | j                        xs# t        j                  |d   | j                        }|st        d|d          y t        |      dk(  rd|\  }}}t        t        |||t              d      | _        |j                  d      r+| j                  j                  |j                  d             y y t        |      dk(  r)|\  }}}}t        t        |||t              |      | _        y t        |      dk(  r2|\  }}}}}t        t        ||||rt        nt              |      | _        y t        d| d	|       )
Nr   r1   zUnknown color name: rn   r         zUnsupported arguments: z, )lenr   r<   ColorFromName_sColorFromHex_s
ValueErrorr    r!   getSetAlphar"   )	rH   argsrI   existsr   r   r   r   r   s	            rO   rP   zColor.__init__   s   t9>-/DLY!^-/DL'77Q J#2247DLLI   #7Qy!ABB Y!^GAq!-q!Q(9:ADL zz#%%fjjo6 Y!^JAq!Q-q!Q(9:ADL Y!^#Aq!Q-q!$.<L 	DL 6tfBvhGHHrQ   c                 4    t        | j                               S rq   ra   rV   s    rO   rc   zColor.__hash__  s    DLLN##rQ   c                 D    | j                         |j                         k(  S rq   re   rf   s     rO   rh   zColor.__eq__  s    ||~00rQ   rR   c                     | j                   j                         }| j                   j                         j                  t              }g ||S )z-
        Convert Color to RGB tuple.
        )r<   AlphaGetRGBValuesr!   )rH   r   rgbs      rO   r_   zColor.toTuple	  sB     LL ll!!#**+<=yayrQ   c                 "    | j                         S rq   re   rV   s    rO   rk   zColor.__getstate__  s    ||~rQ   rl   c                     t        | | _        y rq   )r   r<   ro   s     rO   rp   zColor.__setstate__  s    )40rQ   N)r   T)rr   rs   rt   ru   r   rv   r   rw   rP   ry   boolrc   rh   r   r_   rk   rp   rz   rQ   rO   r|   r|      s      S   
% 
E 
e 
 
 
 
   ID$1ueUE9: eE5%$>? 1ueUE'A!B 1rQ   r|   c                      e Zd Z	 	 	 	 	 d'dedee   dee   dee   dee   f
dZ	e
defd	       Zej                  d
eddfd       Ze
defd       Zej                  d
eddfd       Ze
ded    fd       Ze
dee   fd       Zej                  d
ee   ddfd       Ze
dee   fd       Zej                  d
ee   ddfd       Ze
defd       Zej                  d
eddfd       Ze
deeef   fd       Ze
dee   fd       Ze
ded    fd       Ze
deeef   fd       Ze
deeef   fd       Ze
deeef   fd       Ze	 	 	 	 d(dedee   dee   dee   deeeef      defd       Ze	 	 	 	 	 d'dedee   dee   dee   deeeef      deeee f      defd       Z	 	 	 	 	 d'deeef   dee   dee   dee   deeeef      deeee f      de defdZ	 	 	 d)d edee   dee   d!ee   def
d"Z!dee"ed f      fd#Z#	 	 	 d)dee   dee   dee   de$e"eeeee   f      fd$Z%dedeez  fd%Z&dede'fd&Z(y)*AssemblyProtocolNobjlocr>   colormaterialc                      y rq   rz   rH   r   r   r>   r   r   s         rO   rP   zAssemblyProtocol.__init__  s     	rQ   rR   c                      y rq   rz   rV   s    rO   r   zAssemblyProtocol.loc&      rQ   valuec                      y rq   rz   rH   r   s     rO   r   zAssemblyProtocol.loc*  r   rQ   c                      y rq   rz   rV   s    rO   r>   zAssemblyProtocol.name.  r   rQ   c                      y rq   rz   r   s     rO   r>   zAssemblyProtocol.name2  r   rQ   c                      y rq   rz   rV   s    rO   parentzAssemblyProtocol.parent6  r   rQ   c                      y rq   rz   rV   s    rO   r   zAssemblyProtocol.color:  r   rQ   c                      y rq   rz   r   s     rO   r   zAssemblyProtocol.color>  r   rQ   c                      y rq   rz   rV   s    rO   r   zAssemblyProtocol.materialB  r   rQ   c                      y rq   rz   r   s     rO   r   zAssemblyProtocol.materialF  r   rQ   c                      y rq   rz   rV   s    rO   r   zAssemblyProtocol.objJ  r   rQ   c                      y rq   rz   r   s     rO   r   zAssemblyProtocol.objN  r   rQ   c                      y rq   rz   rV   s    rO   objectszAssemblyProtocol.objectsR  r   rQ   c                      y rq   rz   rV   s    rO   shapeszAssemblyProtocol.shapesV  r   rQ   c                      y rq   rz   rV   s    rO   childrenzAssemblyProtocol.childrenZ  r   rQ   c                      y rq   rz   rV   s    rO   _subshape_namesz AssemblyProtocol._subshape_names^  r   rQ   c                      y rq   rz   rV   s    rO   _subshape_colorsz!AssemblyProtocol._subshape_colorsb  r   rQ   c                      y rq   rz   rV   s    rO   _subshape_layersz!AssemblyProtocol._subshape_layersf  r   rQ   c                      y rq   rz   r   s         rO   addzAssemblyProtocol.addj  s     	rQ   metadatac                      y rq   rz   )rH   r   r   r>   r   r   r   s          rO   r   zAssemblyProtocol.addu  s     	rQ   rI   c                      y)z<
        Add a subassembly to the current assembly.
        Nrz   )rH   r   r   r>   r   r   r   rI   s           rO   r   zAssemblyProtocol.add  s     	rQ   slayerc                      y rq   rz   )rH   r   r>   r   r   s        rO   addSubshapezAssemblyProtocol.addSubshape  r   rQ   c                      y rq   rz   rV   s    rO   traversezAssemblyProtocol.traverse      rQ   c                      y rq   rz   )rH   r   r>   r   s       rO   __iter__zAssemblyProtocol.__iter__  s     	rQ   c                      y rq   rz   r~   s     rO   __getitem__zAssemblyProtocol.__getitem__  r   rQ   c                      y rq   rz   r~   s     rO   __contains__zAssemblyProtocol.__contains__  r   rQ   )NNNNN)NNNN)NNN))rr   rs   rt   AssemblyObjectsr	   r2   rw   r|   r;   rP   rx   r   setterr>   r   r   r   r   r   r   r   r   r3   r   r   r9   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r   rz   rQ   rO   r   r     s+     $"&"!%'+ h sm	
  8$ X   	ZZ d   c   
[[# $   !34   x   \\8E? t   (8,   __hx0 T   _   	ZZ T   c4i      (#56   s
!3   &"6   &"4    #'"!%37 h sm	
  53/0 
   #'"!%37-1		 h	 sm		
 	 53/0	 4S>*	 
	 	 #'"!%37-14() h sm	
  53/0 4S>*  
$ #!%# sm 	
 } 
(5.@)@#AB 
 #'"!%	h sm 	
 
%sHhuo=>	? u   rQ   r   lr>   c                 B    t        j                  | t        |             y rq   )r   Set_sr   )r   r>   tools      rO   setNamer     s    5d;<rQ   r   c                 Z    |j                  | |j                  t        j                         y rq   )SetColorr<   r   XCAFDoc_ColorSurf)r   r   r   s      rO   setColorr     s    MM!U]]$5$G$GHrQ   r   c           
          |j                  | t        |j                        t        |j                        |j                  t        d      t        |j
                               y )NMassDensity)SetMaterialr   r>   rC   rD   rE   )r   r   r   s      rO   setMaterialr     sL    	 / !5!56 / !5!56rQ   assycoloredSTEPmesh	toleranceangularTolerancebinaryrR   c                    	
 t        j                         }|r*t        j                  |       t	        t        d            }n)t        j                  |       t	        t        d            }|j                  |       t        j                  |j                               j                  d       t        j                  |j                               t        j                  |j                               t        j                  |j                               i i 
dt        dt         d z  dt         f	 
fd	 	 d       }j#                          ||fS )NBinXCAFXmlXCAFFelancestorrR   c                    | j                   r'j                         }t        || j                         | j                  r| j                  nd }| j
                  r| j
                  nd }| j                  r|| j                  f}| j                  }|v r|   }nԉj                         }|v r|   j                        }n8t        j                  | j                        }r|j                         ||<   j                  ||j                         t        || j                   r| j                   dn| j                         ||<   r|rt        ||       |rt        ||       | j                   }	| j"                  }
| j$                  }|	j'                         |
j'                         z  |j'                         z  D ]  }j)                  ||j                        }|j+                         rJ d       ||
v r"t-        j.                  |t1        |
|                ||	v r$j3                  ||	|   j                  t4               ||v sj7                  t1        ||               }j9                  ||        | j                   r6j;                  |t=                     }t        || j                   d       nA|?j;                  ||| j>                  j                        }t        || j                          s4|r2| j                   rt        |       | j                  rt        |       | j                   D ]  } |        |r7| j                   r+j;                  || j>                  j                         |}|S |r|}|S | j                   rJtA               }jC                  j>                  j                  |       t        |j                         |S | j                  rQj                         }j;                  || j>                  j                        }t        || j                          |S tE        d      )N_partzInvalid subshapez'Cannot convert an empty assembly to CAF)#r   NewShaper   r>   r   r   r   copyr5   makeCompoundr   r   SetShaper<   r   r   r   r   r   rF   AddSubShapeIsNullr   r   r   r   r   AddLayerSetLayerAddComponentr   r   r   SetLocationr   )r   r   subassycurrent_colorcurrent_materialkey0key1labcompoundsubshape_colorssubshape_namessubshape_layersksubshape_labellayer_labelchildrv_toCAFr   r   r   	compoundsctoolltoolr   mtoolr   r   unique_objss                    rO   r  ztoCAF.<locals>._toCAF  s    ;;mmoGGRWWd+ %'HH$ +-++2;;4 66!266*D66D{"!$'mmo9$(33D9H'44RYY?H i1AB&.IdOc8#3#34"++y.277DQ$'D! =S-7 $%5u= !11O//N 11O  $$&)<)<)>>AUAUAWW  "&!1!1#qyy!A *002F4FF2 &!''&(B>RSCT(U
 'NN&(:(B(BDT
 '"'..2?13EF#K NN>;?3 X6 {{''o6GHy.5%''#rvv~~Fy40 }{{-7vvmU3 [[E5'" ! h@B& 	% B" 	! [[B Wdhh&6&6;B		4( 	 VVB##BRVV^^<CCBGG9t, 	 FGGrQ   )r   GetApplication_sr   DefineFormat_sr   r   r   InitDocumentr   ShapeTool_sMainSetAutoNaming_sColorTool_sLayerTool_sMaterialTool_sr   r   UpdateAssemblies)r   r   r   r   r   r   appdoctopr  r  r  r	  r
  r   r  s   `````    @@@@@@@rO   toCAFr    s)    
.
.
0C%%c*9)DE%%c*9)DES++CHHJ7D ,,SXXZ8E ,,SXXZ8E //
;E JLK13Iv# vy4/? vI v v vr t
C8OrQ   r   c                    | j                   j                         }|j                         j                         }t	        t        t        |j                         j                  t        j                                    }||d   |d   |d   ffS )zB
    Convert location to t,rot pair following vtk conventions
    r1   r7   r   )r<   TransformationTranslationPartCoordtuplemapr   GetRotationGetEulerAnglesr(   gp_Intrinsic_ZXY)r   Ttransrots       rO   _loc2vtkr&  a  sy     	""$A%%'E
GQ]]_334D4U4UVXC 3q63q63q6***rQ   	edgecoloredges	linewidthc                    g }| D ]l  \  }}	}
}|r|j                         n|}t        |
      \  }}|j                  ||      }t               }|j	                  |       |j                  t               |j                  t               |j                          |j                         }t               }|j	                  |       |j                  t               |j                          |j                         }|j                         j                  d       t               }|j                  |       t               }|j!                  |        |j"                  |   |j$                  |   |j'                         j(                  |d d   |j'                         j+                  |d          |j-                  |       t               }|j                  |       t               }|j!                  |        |j"                  |   |j$                  |  |j'                         j/                  |       |j1                  |        |j'                         j(                  |d d   |j-                  |       o |S NNormalsrn   )r_   r&  toVtkPolyDatar-   SetInputDataObjectAddCellTyper/   r0   Update	GetOutputr.   GetPointDataRemoveArray	vtkMapperAddInputDataObjectr)   	SetMapperSetPositionSetOrientationGetPropertyr   
SetOpacityappendSetLineWidthSetVisibility)r   r   r'  r(  r)  r   r   r  shape_r   col_colr$  r%  rl   extr
data_edges
data_facesmapperactors                        rO   	toVTKAssyrG  r  s    B#q#t $dlln%c]
s""9.>? %&%"$^^%
 %&%&^^%
 	!--i8 !!*-
5!c"$$$c"1g.&&s1v.
		%!!*-
5!c"((3E"$$$im4
		%i  $l IrQ   c                 ^   t               }| D ]  \  }}}}|r|j                         n|}	t        |      \  }
}|j                  ||      }t	               }|j                  |       |j                  t               |j                  t               |j                          |j                         }t	               }|j                  |       |j                  t               |j                          |j                         }|j                         j                  d       t               }|j                  |       t!               }|j#                  |        |j$                  |
   |j&                  |   |j)                         j*                  |	d d   |j)                         j-                  |	d          |j/                  |       t               }|j                  |       t!               }|j#                  |        |j$                  |
   |j&                  |  |j/                  |        |S r+  )r+   r_   r&  r-  r-   r.  r/  r/   r0   r0  r1  r.   r2  r3  r4  r5  r)   r6  r7  r8  r9  r   r:  AddActor)r   r   r   r   rendererr>  r?  r   r@  rA  r$  r%  rl   rB  rC  rD  rE  rF  s                     rO   toVTKrK    s    }H#q#t $dlln%c]
s""9.>? %&%"$^^%
 %&%&^^%
 	!--i8 !!*-
5!c"$$$c"1g.&&s1v.% !!*-
5!c"% c  $f OrQ   c                     g }| D ]o  \  }}}}i }t        ||      }	|j                         \  }
}|	|d<   |r|j                         n||d<   |
|d<   t        d |D              |d<   |j                  |       q |S )zQ
    Export an object to a structure suitable for converting to VTK.js JSON.
    r>  r   positionc              3   2   K   | ]  }t        |        y wrq   )r   ).0r   s     rO   	<genexpr>ztoJSON.<locals>.<genexpr>  s     ";s!71:ss   orientation)r6   r_   r  r;  )r   r   r   r  r>  r?  r   r@  valrl   r$  r%  s               rO   toJSONrS    s     
B#q#ty)[[]
sG)-t||~5GJ"";s";;M
		#  $ IrQ   gluetolc                 >   t        j                         }t        t        d            }|j	                  |       t        j                  |j                               }t        j                  |j                               }t               }t               }t               }	d}
g }g }| D ]F  \  }}}}|j                  |j                  |      j                                |j                  |       H t        t        d      }
|st!        d| j"                   d      t%        |      dk(  r|d   }|j'                         dk7  r"t)        j*                  |f      j,                  }
n|j'                         dk(  r|j/                  ||      }t)        j*                  |f      j,                  }
|g}n|j1                  |d   j,                         |dd D ]  }|	j1                  |j,                          |r|j3                  |       |r|j5                  t6        j8                         |j;                  |       |j=                  |	       |j?                          |jA                         }
|jC                  |
d	      }tE        jF                  |t        | j"                               tI        ||      D ]k  \  }}|jK                         D ]Q  }|jM                  ||j,                        }|rL|jO                         s<|jQ                  |j,                        s!|jS                  ||j,                  tT               |jW                  |j,                        }|D ][  }|jM                  ||      }|s|jO                         r)|jQ                  |      r;|jS                  ||j,                  tT               ] |jY                  |j,                        }|D ]I  }|jM                  ||      }|s|jO                         r)|jS                  ||j,                  tT               K T n ||fS )
aO  
    Converts the assembly to a fused compound and saves that within the document
    to be exported in a way that preserves the face colors. Because of the use of
    boolean operations in this method, performance may be slow in some cases.

    :param assy: Assembly that is being converted to a fused compound for the document.
    XmlOcafNzError: Assembly z has no shapes.r1   r   r5   )rT  rU  F)-r   r  r   r   r  r   r  r  r  r#   r$   r;  movedr   r   r'   	Exceptionr>   r   	ShapeTyper5   r   r<   fuseAppendSetFuzzyValueSetGluer%   BOPAlgo_GlueShiftSetArgumentsSetToolsBuildr3   AddShaper   r   zipFacesr   r   	IsDeletedr   r   Modified	Generated)r   rT  rU  r  r  
shape_tool
color_toolfuse_opr   toolstop_level_shaper   colorsr>  r?  r   r   shtop_level_lblfacecur_lblmodded_listmodgen_listgens                            rO   
toFusedCAFrw    sd    
.
.
0C
5i@
ACS &11#((*=J%11#((*=J  G!D "E O FF $q#uekk#&++-.e !%
 <.O *499+_EFF	V	 AY<<>Z'&33RE:BBO\\^z)d,B&33RE:BBOTF 	F1I%%&ABZELL'   !!#&OO,>>?T"!--/ ''?M'A$))'LM FF+uKKMD ,,]DLLIGW^^-g6G6G6U##GU]]<LM "**4<<8K"$00D!1':K:KC:P''@PQ	 # ((6H$00D!1''@PQ	  % " ,2 #rQ   .c                 
  
 i 
| D ]0  \  }}}}|j                  |      j                         D ]  }|
|<   	 2 t               }|j                  d       |j	                  d       
D ]  }|j                  |j                          |j                          t        |j                               }i }|j                         D ]<  }t        
fd|j                  |j                        D              }	|	r|	n
|   f||<   > ||fS )zr
    Imprint all the solids and construct a dictionary mapping imprinted solids to names from the input assy.
    Tc              3   :   K   | ]  }t        |           y wrq   )r4   )rO  r   id_maps     rO   rP  zimprint.<locals>.<genexpr>  s     K0J"F59%0Js   )rX  Solidsr&   SetRunParallel	SetUseOBBAddArgumentr<   Performr3   r  
GetOrigins)r   r   r>   r   r?  r   bldrresoriginsidsrz  s             @rO   imprintr  z  s     F!T33&&(AF1I ) "
 !"DNN4%  	LLN



C -/GZZ\K		0JKKSfQi\
 
 <rQ   )FFMbP?皙?T)      ?r  r  r  )        r  r  r  Tr7   r  r  )r  r  r  )r  r  )FN)btypingr   r   r   r   r   r   r	   r
   r   r   typing_extensionsr   r   mathr   r   OCP.TCollectionr   OCP.TDocStdr   r   OCP.XCAFDocr   r   r   r   r   OCP.XCAFAppr   OCP.BinXCAFDriversr   OCP.XmlXCAFDriversr   OCP.TDataStdr   OCP.TDFr   
OCP.TopLocr   OCP.Quantityr   r    r!   r"   OCP.BRepAlgoAPIr#   OCP.TopToolsr$   OCP.BOPAlgor%   r&   
OCP.TopoDSr'   OCP.gpr(   vtkmodules.vtkRenderingCorer)   r*   r4  r+   r,   vtkmodules.vtkFiltersExtractionr-   vtkmodules.vtkCommonDataModelr.   r/   r0   geomr2   r   r3   r4   r5   exporters.vtkr6   cqr8   utilsr9   r   objectr;   r|   r   rw   r   r   r   r   ry   r  r&  rG  rK  rS  rw  r  rz   rQ   rO   <module>r     sA     - ! 4 ( 6  , - - &  &  - - ? # #  B L L  * * #   y$./x
v x
v]1F ]1@Mx M`=y = =
I	 I% I
	9 	 	 !]
]] ] 	]
 ] ] 9&&']@+	+
5u$%uUE5-@'AAB+& 0D3G!B
Bue+,B UE5%/0B 	B
 B B B 
)_BN 0D!	<
<ue+,< < 	<
 <B 0D
ue+,  
$sCx.	: HLe
e"&e5=e_e
9&&'eP" uUDc3h9O4P-P'Q rQ   