
    ,jj                     8   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	 	 	 	 	 dGd0eTd1eYd2eYd3eZd4eZd5eYd6ee%ef         fd7Z[d8eEd6eeeZeZeZf         eeZeZeZf         f         fd9Z\	 	 	 	 	 	 dHd0eTd(eeZeZeZeZf         d<eeZeZeZeZf         d=eYd>eZd3eZd4eZd6e	e=         fd?Z]	 	 	 dId0eTd(eeZeZeZeZf         d3eZd4eZd6e<f
d@Z^	 	 dJd0eTd(eeZeZeZeZf         d3eZd6e	eeUef                  fdAZ_	 dKd0eTdBeYdCeeZ         d6ee%ef         fdDZ`d0eTd6eeGeeGeeUdEf         f         f         fdFZadS )L    )
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dS )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           	         t                      | _        d}d}d}d}d}|r|}d|                                v r|d         }d|                                v r|d         }d|                                v r|d         }| j                            t	          |          t	          |          |t	          |          t	          |                     t                      | _        d	S )
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           T/DATA/AppData/hermes/venv/lib/python3.11/site-packages/cadquery/occ_impl/assembly.py__init__zMaterial.__init__J   s     ()) %#  	EFKKMM))!-0L%%i(HFKKMM))%m4 	$U++$\22$\22$%566	
 	
 	
 /00    returnc                 X    | j                                                                         S )z6
        Get the string name of the material.
        )r<   GetName	ToCStringrH   s    rO   r>   zMaterial.namet   s$    
 |##%%//111rQ   c                 X    | j                                                                         S )z=
        Get the string description of the material.
        )r<   GetDescriptionrU   rV   s    rO   rC   zMaterial.description{   $    
 |**,,66888rQ   c                 4    | j                                         S )z8
        Get the density value of the material.
        )r<   
GetDensityrV   s    rO   rD   zMaterial.density   s    
 |&&(((rQ   c                 X    | 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                 F    | 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   s1     y&,&k7K88rQ   c                 D    t          |                                           S )zG
        Create a unique hash for this material via its tuple.
        hashr_   rV   s    rO   __hash__zMaterial.__hash__   s     DLLNN###rQ   c                 V    |                                  |                                 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                 *    |                                  S )"
        Allows pickling.
        re   rV   s    rO   __getstate__zMaterial.__getstate__   s     ||~~rQ   datac           
          t                      | _        | j                            t          |d                   t          |d                   |d         t          d          t          |d                              dS )rj   r   r1   r7   rB      N)r   r<   rG   r   rH   rl   s     rO   __setstate__zMaterial.__setstate__   st     ())$T!W--$T!W--G$^4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          $$$$(1 (1S4Z (1 (1 (1 (1T 2c 2 2 2 X2 9S 9 9 9 X9 ) ) ) ) X) 9S 9 9 9 X9	9sC34 	9 	9 	9 	9$ $ $1 1 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dS )Colorz?
    Wrapper for the OCCT color object Quantity_ColorRGBA.
    r<   r>   c                     dS )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   Trgbasrgbc                     dS )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                     dS )z7
        Construct a Color with default value.
        Nrz   rV   s    rO   rP   zColor.__init__   s	    
 	rQ   c                    t          |          dk    rt                      | _        d S t          |          dk    rot                      | _        t          j        |d         | j                  pt          j        |d         | j                  }|st          d|d                    d S t          |          dk    rv|\  }}}t          t          |||t                    d          | _        |                    d          r/| j        	                    |                    d                     d S d S t          |          dk    r3|\  }}}}t          t          |||t                    |          | _        d S t          |          dk    r=|\  }}}}}t          t          ||||rt          nt                    |          | _        d S 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   t99>>-//DLLLYY!^^-//DL'7Q  J#247DLII   C !AQ!A!ABBBC CYY!^^GAq!-q!Q(9::A DL zz# 7%%fjjoo666667 7YY!^^JAq!Q-q!Q(9::A DLLL YY!^^#Aq!Q-q!$L..<L  	 DLLL GtGGvGGHHHrQ   c                 D    t          |                                           S rq   ra   rV   s    rO   rc   zColor.__hash__  s    DLLNN###rQ   c                 V    |                                  |                                 k    S rq   re   rf   s     rO   rh   zColor.__eq__  s    ||~~00rQ   rR   c                     | j                                         }| j                                                             t                    }g ||R S )z-
        Convert Color to RGB tuple.
        )r<   AlphaGetRGBValuesr!   )rH   r   rgbs      rO   r_   zColor.toTuple	  sI     L  l!!##**+<==yayyrQ   c                 *    |                                  S rq   re   rV   s    rO   rk   zColor.__getstate__  s    ||~~rQ   rl   c                 "    t          | | _        d S 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|      sb           S    X 
 
% 
E 
e 
 
 
 
 
 X
   X I  I  ID$ $ $1 1 1ueUE9:    eE5%$>?    1ueUE'A!B 1 1 1 1 1 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(dS )*AssemblyProtocolNobjlocr>   colormaterialc                     d S rq   rz   rH   r   r   r>   r   r   s         rO   rP   zAssemblyProtocol.__init__  s	     	rQ   rR   c                     d S rq   rz   rV   s    rO   r   zAssemblyProtocol.loc&      rQ   valuec                     d S rq   rz   rH   r   s     rO   r   zAssemblyProtocol.loc*  r   rQ   c                     d S rq   rz   rV   s    rO   r>   zAssemblyProtocol.name.  r   rQ   c                     d S rq   rz   r   s     rO   r>   zAssemblyProtocol.name2  r   rQ   c                     d S rq   rz   rV   s    rO   parentzAssemblyProtocol.parent6  r   rQ   c                     d S rq   rz   rV   s    rO   r   zAssemblyProtocol.color:  r   rQ   c                     d S rq   rz   r   s     rO   r   zAssemblyProtocol.color>  r   rQ   c                     d S rq   rz   rV   s    rO   r   zAssemblyProtocol.materialB  r   rQ   c                     d S rq   rz   r   s     rO   r   zAssemblyProtocol.materialF  r   rQ   c                     d S rq   rz   rV   s    rO   r   zAssemblyProtocol.objJ  r   rQ   c                     d S rq   rz   r   s     rO   r   zAssemblyProtocol.objN  r   rQ   c                     d S rq   rz   rV   s    rO   objectszAssemblyProtocol.objectsR  r   rQ   c                     d S rq   rz   rV   s    rO   shapeszAssemblyProtocol.shapesV  r   rQ   c                     d S rq   rz   rV   s    rO   childrenzAssemblyProtocol.childrenZ  r   rQ   c                     d S rq   rz   rV   s    rO   _subshape_namesz AssemblyProtocol._subshape_names^  r   rQ   c                     d S rq   rz   rV   s    rO   _subshape_colorsz!AssemblyProtocol._subshape_colorsb  r   rQ   c                     d S rq   rz   rV   s    rO   _subshape_layersz!AssemblyProtocol._subshape_layersf  r   rQ   c                     d S rq   rz   r   s         rO   addzAssemblyProtocol.addj  s	     	rQ   metadatac                     d S rq   rz   )rH   r   r   r>   r   r   r   s          rO   r   zAssemblyProtocol.addu  s	     	rQ   rI   c                     dS )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                     d S rq   rz   )rH   r   r>   r   r   s        rO   addSubshapezAssemblyProtocol.addSubshape  r   rQ   c                     d S rq   rz   rV   s    rO   traversezAssemblyProtocol.traverse      rQ   c                     d S rq   rz   )rH   r   r>   r   s       rO   __iter__zAssemblyProtocol.__iter__  s	     	rQ   c                     d S rq   rz   r~   s     rO   __getitem__zAssemblyProtocol.__getitem__  r   rQ   c                     d S 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    X 	Z d    Z c    X 
[# $    [ !34    X x    X \8E? t    \ (8,    X _hx0 T    _ _    X 	Z T    Z c4i    X     X (#56    X s
!3    X &"6    X &"4    X  #'"!%37  h sm	
  53/0 
   X  #'"!%37-1	 		 h	 sm		
 	 53/0	 4S>*	 
	 	 	 X	 #'"!%37-1 4() h sm	
  53/0 4S>*  
   $ #!%#  sm 	
 } 
   (5.@)@#AB    
 #'"!%	 h sm 	
 
%sHhuo=>	?    u           rQ   r   lr>   c                 J    t          j        | t          |                     d S rq   )r   Set_sr   )r   r>   tools      rO   setNamer     s$    5d;;<<<<<rQ   r   c                 R    |                     | |j        t          j                   d S rq   )SetColorr<   r   XCAFDoc_ColorSurf)r   r   r   s      rO   setColorr     s$    MM!U]$5$GHHHHHrQ   r   c           
          |                     | t          |j                  t          |j                  |j        t          d          t          |j                             d S )NMassDensity)SetMaterialr   r>   rC   rD   rE   )r   r   r   s      rO   setMaterialr     sa    	 // !566 // !566    rQ   FMbP?皙?TassycoloredSTEPmesh	toleranceangularTolerancebinaryrR   c                 ,   	
 t          j                    }|r1t          j        |           t	          t          d                    }n0t          j        |           t	          t          d                    }|                    |           t          j	        |
                                                              d           t          j        |
                                          t          j        |
                                          t          j        |
                                          i i 
dt          dt           d z  dt           f	 
fd	 	 d           }                                 ||fS )NBinXCAFXmlXCAFFelancestorrR   c                 J   | j         r*                                }t          || j                   | j        r| j        nd }| j        r| j        nd }| j        r|| j        f}| j        }|v r	|         }nى                                }|v r|                                       }n6t          j	        | j
                  }r|                               ||<                       ||j                   t          || j         r
| j         dn| j                   ||<   r|rt          ||           |rt          ||           | j        }	| j        }
| j        }|	                                |
                                z  |                                z  D ]}                    ||j                  }|                                r
J d            ||
v r(t-          j        |t1          |
|                              ||	v r'                    ||	|         j        t4                     ||v r>                    t1          ||                             }                    ||           | j         r=                    ||t=                                }t          || j         d           n:|8                    ||| j        j                  }t          || j                    s2|r0| j         rt          ||           | j        rt          ||           | j         D ]} ||           |r+| j         r$                    ||| j        j                   |}n|r|}n| j         rFtA                      }!                    |j        j        |           t          |j                   nc| j        rM                                }                    ||| j        j                  }t          || j                    ntE          d          |S )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    ; 	,mmooGGRWd+++ %'H6$ +-+?2;;4 6 D	1!26*D6D{""!$'mmoo9$$(33D99HH'4RY??H C i1ABBB&.IdOc8#3444"+J....27DQQQ$'D!  8= 8S-777 $ >%5u=== !1O/N 1O  $$&&)<)<)>)>>AUAUAWAWW@ @ "&!1!1#qy!A!A *0022FF4FFF2 &&!'&(B>RSCT(U(U  
 ''NN&(:(BDT  
 ''"'..2?13EFF# #K NN>;???{ 1''o6G6GHH...5555%''#rv~FF\4000  	4} 	4{ 8-777v 4mU333 [ 	# 	#EF5'""""  	H 	Hh@@@BB 	HBB[ 	HB Wdh&6;;;B	4((((V 	HB##BRV^<<CCBGt,,,,FGGG	rQ   )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    
.
0
0C F%c***9)DDEE%c***9)DDEES+CHHJJ77D ,SXXZZ88E ,SXXZZ88E /

;;E JLK13Iv# vy4/? vI v v v v v v v v v v v v v v v v vr &t

C8OrQ   r   c                 T   | j                                         }|                                                                }t	          t          t          |                                                    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  s     	""$$A%%''E
GQ]]__334D4UVVXX C 3q63q63q6***rQ         ?r*  r*  r*          r,  r,  r,  	edgecoloredges	linewidthc                    g }| D ]\  }}	}
}|r|                                 n|}t          |
          \  }}|                    ||          }t                      }|                    |           |                    t                     |                    t                     |                                 |	                                }t                      }|                    |           |                    t                     |                                 |	                                }|                                                    d           t                      }|                    |           t                      }|                    |            |j        |   |j        |   |                                j        |d d           |                                                    |d                    |                    |           t                      }|                    |           t                      }|                    |            |j        |   |j        |  |                                                    |           |                    |            |                                j        |d d           |                    |           |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   	toVTKAssyrM  r  s    B# 4 4q#t $/dllnnn%c]]
s""9.>?? %&&%%%"""$$$^^%%
 %&&%%%&&&^^%%
 	!!--i888 !!*---

5!!c""$$c"1"g..&&s1v...
		%!!*---

5!!c""((333E"""$$im44
		%IrQ   c                 .   t                      }| D ]\  }}}}|r|                                n|}	t          |          \  }
}|                    ||          }t	                      }|                    |           |                    t                     |                    t                     |	                                 |
                                }t	                      }|                    |           |                    t                     |	                                 |
                                }|                                                    d           t                      }|                    |           t!                      }|                    |            |j        |
   |j        |   |                                j        |	d d           |                                                    |	d                    |                    |           t                      }|                    |           t!                      }|                    |            |j        |
   |j        |  |                    |           |S r1  )r+   r_   r(  r3  r-   r4  r5  r/   r0   r6  r7  r.   r8  r9  r:  r;  r)   r<  r=  r>  r?  r   r@  AddActor)r   r   r   r   rendererrD  rE  r   rF  rG  r&  r'  rl   rH  rI  rJ  rK  rL  s                     rO   toVTKrQ    sb    }}H# 1! 1!q#t $/dllnnn%c]]
s""9.>?? %&&%%%"""$$$^^%%
 %&&%%%&&&^^%%
 	!!--i888 !!*---

5!!c""$$c"1"g..&&s1v...%   !!*---

5!!c""%    OrQ   c                    g }| D ]\  }}}}i }t          ||          }	|                                \  }
}|	|d<   |r|                                n||d<   |
|d<   t          d |D                       |d<   |                    |           |S )zQ
    Export an object to a structure suitable for converting to VTK.js JSON.
    rD  r   positionc              3   4   K   | ]}t          |          V  d S rq   )r   ).0r   s     rO   	<genexpr>ztoJSON.<locals>.<genexpr>  s(      ";";!71::";";";";";";rQ   orientation)r6   r_   r   rA  )r   r   r   r  rD  rE  r   rF  valrl   r&  r'  s               rO   toJSONrY    s     
B#  q#ty))[[]]
sG)-8t||~~~5GJ"";";s";";";;;M
		#IrQ   gluetolc                 	   t          j                    }t          t          d                    }|                    |           t          j        |                                          }t          j        |                                          }t                      }t                      }t                      }	d}
g }g }| D ]V\  }}}}|                    |                    |                                                     |                    |           Wt          t          d          }
|st!          d| j         d          t%          |          dk    r|d         }|                                dk    rt)          j        |f          j        }
n|                                dk    r4|                    ||          }t)          j        |f          j        }
|g}n|                    |d         j                   |dd         D ]}|	                    |j                   |r|                    |           |r|                    t6          j                   |                    |           |                    |	           |                                 |                                 }
|!                    |
d	          }tE          j#        |t          | j                             tI          ||          D ]x\  }}|%                                D ]\}|&                    ||j                  }|rO|'                                s;|(                    |j                  s!|)                    ||j        tT                     |+                    |j                  }|D ]d}|&                    ||          }|rJ|'                                s6|(                    |          s!|)                    ||j        tT                     e|,                    |j                  }|D ]O}|&                    ||          }|r5|'                                s!|)                    ||j        tT                     P^z||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   )rZ  r[  F)-r   r  r   r   r  r   r  r  r  r#   r$   rA  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   rZ  r[  r  r  
shape_tool
color_toolfuse_opr   toolstop_level_shaper   colorsrD  rE  r   r   shtop_level_lblfacecur_lblmodded_listmodgen_listgens                            rO   
toFusedCAFr}    sp    
.
0
0C
5i@@
A
ACS &1#((**==J%1#((**==J   G!!D ""E O FF $  q#uekk#&&++--...e <..O  *E49EEEFFF	V		 AY<<>>Z''&3RE::BOO\\^^z))d,,B&3RE::BOTF 	F1I%&&&ABBZ 	( 	(ELL''''  	'!!#&&& 	@OO,>???T"""!--// ''??M'A$)'L'LMMM FF++ R RuKKMM 	R 	RD ,,]DLIIG NW^^-- Ng6G6G6U6U N##GU]<LMMM "**4<88K" R R$00DD R!1!1 R':K:KC:P:P R''@PQQQ ((66H R R$00DD R!1!1 R''@PQQQ	R%	R0 #rQ   .c                 R  
 i 
| D ]6\  }}}}|                     |                                          D ]}|
|<   7t                      }|                    d           |                    d           
D ]}|                    |j                   |                                 t          |                                          }i }|                                D ]E}t          
fd|
                    |j                  D                       }	|	r|	n
|         f||<   F||fS )zr
    Imprint all the solids and construct a dictionary mapping imprinted solids to names from the input assy.
    Tc              3   B   K   | ]}t          |                   V  d S rq   )r4   )rU  r   id_maps     rO   rV  zimprint.<locals>.<genexpr>  s.      KK"F599%KKKKKKrQ   )r^  Solidsr&   SetRunParallel	SetUseOBBAddArgumentr<   Performr3   r   
GetOrigins)r   r   r>   r   rE  r   bldrresoriginsidsr  s             @rO   imprintr  z  sF    F!  T33&&(( 	 	AF1II	 !""DNN4 & &%%%%LLNNN




C -/GZZ\\ 2 2KKKK	0J0JKKKKK1SSfQi\

<rQ   )FFr   r   T)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*   r:  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(  rM  rQ  rY  r}  r  rz   rQ   rO   <module>r     s                          - , , , , , , , ! ! ! ! ! ! ! ! 4 4 4 4 4 4 ( ( ( ( ( ( 6 6 6 6 6 6              , + + + + + - - - - - - - - - - - - & & & & & &       & & & & & &            - , , , , , - - - - - - ? ? ? ? ? ? ? ? # # # # # # # # # # # #            B A A A A A L L L L L L L L L L       * * * * * * * * * * # # # # # #             y$./x
 x
 x
 x
 x
v x
 x
 x
v]1 ]1 ]1 ]1 ]1F ]1 ]1 ]1@M M M M Mx M M M`=y = = = = =
I	 I% I I I I
	9 	 	 	 	 	 !] ]
]] ] 	]
 ] ] 9&&'] ] ] ]@+	+
5u$%uUE5-@'AAB+ + + +& 0D3G!B B
Bue+,B UE5%/0B 	B
 B B B 
)_B B B BN 0D!	< <
<ue+,< < 	<
 < < < <B 0D 
ue+,  
$sCx.	   : HLe e
e"&e5=e_e
9&&'e e e eP" uUDc3h9O4P-P'Q      rQ   