
    ,j8              3       x   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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!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 d dl4m5Z5 dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ= e1            >                    d          Z?eeeeeef         Z@ee@ee@         eee         e$ee$         eee         f         ZAe6d dde@deeBeBeBf         deBdefdZCdeee@         ee         ee         ee$         f         fdZDe8e9fdee         d eBdeEde#fd!ZFd^d#ee         d$eBdee$         fd%ZGe6e7d&d'd d(fd)ee@         deeBeBeBf         d*eeBeBeBf         d+eHd,eBdeBd-eBdee$         fd.ZIe;e:fd/ee	e
f         d eBdeEde#fd0ZJd)ee$e#ee$         f         dee#         fd1ZK	 	 	 	 	 	 	 	 	 	 	 	 	 	 d_d)eAd$eBdeBd-eBd+eHd:eHd;eHd<eBd,eBd=eHd>eHdeEd*eEd?eEd@eEdee$         f dAZLd2d d(d4d&dBdCd&dDdEdFddCdCdCdCdGdGd&dHd&ddd&dIdeAd$eBdeBd-eBd+eHd;eHdJeEdKeeE         dLeHdMeBdNeBdOeBdPeBdQeeeBeBeBf                  dReeeBeBeBf                  dSeeeBeBeBf                  dTeeeBeBf                  dUeeMeBf         dVeeMeBf         dWeHdXeNeBeBeBf         dYeHdZeeMeBf         d[eeMeBf         d\eHf2d]ZOeOZPdCS )`   )
Shape	WorkplaneAssemblySketchCompoundColorVectorLocationFaceEdge)_loc2vtk	toVTKAssy    )UnionAnyListTupleIterablecastOptional)TopoDS_Shape)Geom_BSplineSurface)vtkOrientationMarkerWidget)vtkAxesActor)!vtkInteractorStyleTrackballCamera)
	vtkMappervtkRenderWindowInteractorvtkActor	vtkProp3DvtkPolyDataMappervtkAssemblyvtkRenderWindowvtkWindowToImageFiltervtkRenderervtkPropCollection)	vtkPoints)vtkCellArrayvtkPolyData)vtkNamedColors)vtkPNGWriter)instance_of)r   g?r   )r   r   r   g      @
darkvioletcrimsong333333?d   Whitecoloralphaobjsr1   r2   returnc                    t          t          g | |R            }|D ]}t          |t          t          t           f          r|                    |           :t          |t                    r(|                    t          j        |                     wt          |t                    r#|                    t          |                     t          | dt          |                     |S )z%
    Convert shapes to Assembly.
    )r1   z has unsupported type )r   r   
isinstancer   r   addr   r   makeCompoundr   
ValueErrortype)r1   r2   r3   assyobjs        F/DATA/AppData/hermes/venv/lib/python3.11/site-packages/cadquery/vis.py_to_assyr>   B   s     %.....///D H HcE9h788 	HHHSMMMMV$$ 	HHHX*3//0000\** 	HHHU3ZZ    FF499FFGGGK    c                 ~   g }g }g }g }| D ],}t          |t                    r|                    |           .t          |t                    r|                    |           Yt          |t
                    r|                    |           t          |t                    r|                    |           t          |t                    rht          |          \  }}}}	|	                    |           |	                    |           |	                    |           |	                    |	           .||||fS )z*
    Split into showables and others.
    )
r+   	ShapeLikeappendr6   r	   r
   r   list_split_showablesextend)
r3   rv_srv_vrv_lrv_aeltmp1tmp2tmp3tmp4s
             r=   rD   rD   Z   s3    DDDD  r9%% 	KKOOOOF## 	KKOOOOH%% 
	KKOOOOI&& 	KKOOOOD!! 	%5b%9%9"D$dKKKKKKKKtT!!r?   vecssizec                    t                      }t                      }t                      }t                      }t	                      }|                    |           |                    |           | D ]H} |j        |                                 }	|	                    d           |
                    |	           I|                    |           |                    |           |                                                    t                                          |                     |                                                    |           |S )z&
    Convert Vectors to vtkActor.
    r   )r   r    r&   r'   r(   	SetPointsSetVertsInsertNextPointtoTupleInsertNextCellInsertCellPointSetInputData	SetMapperGetPropertySetColorr)   
GetColor3dSetPointSize)
rO   rP   r1   rvmapperpointsvertsdatavixs
             r=   _to_vtk_ptsre   z   s#    
B  F[[FNNE==DNN6MM% " "#V#QYY[[1Qb!!!!
LLNNn..99%@@AAANN!!$'''Ir?   皙?locsscalec                    t                      }| D ]u}t          |          \  }}t                      }|                    d            |j        |   |j        |  |                    |           |                    |           v|gS )z(
    Convert Locations to vtkActor.
    r   )r!   r   r   SetAxisLabelsSetPositionSetOrientationSetScaleAddPart)rg   rh   r^   ltransrotaxs          r=   _to_vtk_axsrs      s    
 
B 	 	a[[
s^^
3
E


24Kr?   T   gMbP?r<   	edgecoloredges	linewidth	tolerancec                 J    t          t          | ||dg |dR |||          S )z(
    Convert Shapes to vtkAssembly.
    r0   r   )ru   rv   rw   rx   )r   r>   )r<   r1   ru   rv   rw   r2   rx   s          r=   _to_vtk_shapesrz      sC     #U%000!I/q//   r?   sc           	      	   t                      }t                      }t                      }t                      }t	                      }|                    |           |                    |           |                    |           t          | t                    r=t          | 
                                t                    r(t          t          | 
                                          }n$t          d| 
                                           |                                }	|                                }
|                                }|                                }t%          |	          D ]}}t%          |
          D ]k}|                    |dz   |dz             }|                    |                                |                                |                                           l~t%          |
          D ]d}t%          |	dz
            D ])}|                    d|
|z  |z   |
|dz   z  |z   f           *|r$|                    d|
|dz   z  |z   d|z   f           et%          |	          D ]g}t%          |
dz
            D ])}|                    d|
|z  |z   |
|z  |z   dz   f           *|r'|                    d|
|z  |z   dz   |
|z  dz   f           hn:|                                 dk    r'| 
                                                                }n$t          d|                                            |                                D ]O}|                    |                                |                                |                                           P|                                }t%          |dz
            D ]}|                    d||dz   f           |                                r|                    d|dz   df           |                    |           |                    |           |                                 }|!                    tE                      #                    |                     |$                    |           |%                    |dz             |&                    d           |S )	zI
    Convert Edge or Face to a vtkActor representing control points.
    z/Only NURBS surfaces are supported, encountered r   rt   r   BSPLINEz-Only NURBS curves are supported, encountered    T)'r   r    r&   r'   r(   rR   rS   SetLinesr6   r   _geomAdaptorr   r   r9   NbUPolesNbVPolesIsUPeriodicIsVPeriodicrangePolerT   XYZrV   geomTypeBSplinePolesNbPoles
IsPeriodicrX   rY   rZ   r[   r)   r\   r]   SetLineWidthSetRenderPointsAsSpheres)r{   rP   r1   r^   r_   r`   cellsrb   surfNuNv
u_periodic
v_periodicijptcurveNpropss                      r=   ctrlPtsr      s    
B  F[[FNNE==DNN6MM%MM%!T 80ann&&(;<< 	+Q^^-=-=>>DDT!..BRBRTT   ]]__]]__%%''
%%''
 r 	? 	?A2YY ? ?YYq1ua!e,,&&rttvvrttvvrttvv>>>>?
 r 	C 	CA26]] H H$$Qa!R1q5\A5E(FGGGG C$$Qq1u)91q5(ABBB r 	F 	FA26]] F F$$Qa!R!VaZ!^(DEEEE F$$Qa!aa!(DEEE	F ::<<9$$NN$$,,..EE N

NN   ++-- 	; 	;B""244662446624466::::MMOOq1u 	0 	0A  QAJ//// 	0  QUAJ///
LLNNE	NN>##..u55666	t	tax   	""4(((Ir?   c              #      K   t          | t                    r| V  dS t          | t                    r| D ]}t          |t                    r|V  dS dS )z:
    Iterate over vtkActors, other props are ignored.
    N)r6   r   rC   )r<   rJ   s     r=   _iterate_actorsr      sx       #x   						C		  	 	B"h''  	 	r?   皙?{Gz?F   goldblack	lightgreycyanmeshspecular
markersizespherestubes	meshcolorvertexcolorc           	      V  	
 	
fd}fd}t          | g          \  }}}}|rrt          |t                                                    t                                          |          ||          }t	          |          D ]} ||           n|r)t          |          } ||            ||           |g}nX|rt          ||          }nDg }|D ]?}t	          |          D ]-} ||            ||           |                    |           .@|S )zK
    Apply styling to CQ objects. To be used in conjunction with show.
    c                 v   |                                  }|                    t                                                               |                    t                                          	                     |                               |                               |                               |                               |	                               rP|
                    t                     |                    t                     |                    t                     d S d S N)rZ   SetEdgeColorr)   r\   SetVertexColorr]   r   r   SetRenderLinesAsTubesSetEdgeVisibilitySetSpecularSPECULARSetSpecularPowerSPECULAR_POWERSetSpecularColorSPECULAR_COLOR)
actorr   rw   r   r   r   r   r   r   r   s
     r=   _apply_stylezstyle.<locals>._apply_styleE  s   !!##>++66yAABBB^--88EEFFF:&&&9%%%&&w///##E***%%% 	3h'''"">222"">22222	3 	3r?   c                     |                                  }|                    t                                                               |                               d S r   )rZ   r[   r)   r\   
SetOpacity)r   r   r2   r1   s     r=   _apply_colorzstyle.<locals>._apply_colorT  sT    !!##~''22599:::r?   )r1   ru   rv   rw   r2   rx   rh   )rD   rz   r)   r\   r   re   rs   rB   )r<   rh   r2   rx   rv   r   r   r   rw   r   r   r1   ru   r   r   kwargsr   r   shapesrO   rg   actorsr^   atmpps     `  ``````` ``           r=   styler   .  s   .3 3 3 3 3 3 3 3 3 3 3 3            "23&!9!9FD$
   ""--e44$&&11)<<
 
 
 !$$ 	 	ALOOOO	 
 $SSU	 
U+++  	 	A$Q''  QQ		!
 Ir?   z	CQ viewerN      ?iig      ?)r   r   r   )rh   r2   rx   rv   r   title
screenshotinteractzoomroll	elevationazimuthpositionfocusviewupclipping_rangewidthheight	trihedronbgcolorgradientxposyposfxaar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                    t          |          \  }}}}t          |d|i}t          |          }t          ||           }t	                      } t          ||          D ]}!|                     |!           t                      }"|s|"                    d           |"	                    |           |"
                    |            t          t          t                   |                                           D ]|}!|!                                }#|r|#                                 |rN|#                    t$                     |#                    t(                     |#                    t,                     }t/          j                     t/          j        dd           t/          j        dd           t7                      }$|$                    t;                                 |$                    |"           t?                      }%|%                     d           |%!                                "                                }&|&#                    ddd           |%$                                "                                %                    |&           |%&                                "                                %                    |&           |rtO                      }'|'(                    |%           |')                    ddd	d
           |'*                    d           |'+                    |$           |',                                 |'-                                  | j.        |  |r| /                                 | 0                    |           |                     |           |D ]}(|                     |(           |D ]})|                     |)           | 1                                }*|r
 |*j2        |  |r
 |*j3        |  |r
 |*j4        |  |s|s| 5                                 |*6                    |	           |*7                    |
           |*8                    |           |*9                    |           |r |*j:        |  n| ;                                 |$<                                 |"=                                \  }+},|">                    t          |t                    rt          |+|z            n|t          |t                    rt          |,|z            n|           |"4                    t          |t                    rt          |+|z            n|t          |t                    rt          |,|z            n|           |"B                                 |rt                      }-|-D                    |"           |-E                                 |-F                                 |-G                                 t                      }.|.I                    |           |.J                    |-K                                           |.L                                 |r|$M                                 dS dS )zZ
    Show CQ objects using VTK. This functions optionally allows to make screenshots.
    r2   r   )rx   r   r   g?g        r   r   g?N)NrD   r>   re   rs   r$   r   AddActorr"   SetOffScreenRenderingSetWindowNameAddRendererr   r   r   	GetActorsrZ   EdgeVisibilityOnr   r   r   r   r   r   r   +SetResolveCoincidentTopologyToPolygonOffset3SetResolveCoincidentTopologyPolygonOffsetParameters0SetResolveCoincidentTopologyLineOffsetParametersr   SetInteractorStyler   SetRenderWindowr   SetDragableGetXAxisCaptionActor2DGetCaptionTextPropertyr[   GetYAxisCaptionActor2DShallowCopyGetZAxisCaptionActor2Dr   SetOrientationMarkerSetViewportSetZoomSetInteractor	EnabledOnInteractiveOffSetBackgroundGradientBackgroundOn
SetUseFXAAGetActiveCamera	SetViewUpSetFocalPointrk   ResetCameraRoll	ElevationAzimuthZoomSetClippingRangeResetCameraClippingRange
InitializeGetScreenSizeSetSizer6   floatintRenderr#   SetInputSetInputBufferTypeToRGBReadFrontBufferOffUpdater*   SetFileNameSetInputConnectionGetOutputPortWriteStart)/rh   r2   rx   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   rO   rg   r   r;   ptsaxsrendereractwinproptinteraxestporient_widgetrr   r   camerawh	win2imagewriters/                                                  r=   showr     sx   @ !1 6 6FD$ V)5))D d

C
d%
(
(
(C }}H333  # 

C  %!!!$$$eOOH HX&(:(:(<(<== 
3 
3!! 	%""$$$ 	3h'''"">222"">222 9;;;A!QGGG>r1EEE &''E	>@@AAA	# >>DQ		$	$	&	&	=	=	?	?BKK1a!!88::FFrJJJ!!88::FFrJJJ  '244**4000!!#sC555c"""##E***!!!$$&&& HG$$ (%%'''  c  "   ! %%''F  "&!! %e$$ &H%%   KK
Y
NN7 KK ,000))+++ 
DAqKK$UE22=AI%fe44@AJ&   OO#D%00:AHd#D%00:AHd   JJLLL  
*,,	3))+++$$&&&:&&&!!)"9"9";";<<<   r?   )rf   )r   r   r   TFTr   rt   FFr   r   r   r   )Q r   r   r   r   r   r   r	   r
   r   r   occ_impl.assemblyr   r   typingr   r   r   r   r   r   r   
OCP.TopoDSr   OCP.Geomr    vtkmodules.vtkInteractionWidgetsr   !vtkmodules.vtkRenderingAnnotationr   vtkmodules.vtkInteractionStyler   vtkmodules.vtkRenderingCorer   r   r   r   r    r!   r"   r#   r$   r%   vtkmodules.vtkCommonCorer&   vtkmodules.vtkCommonDataModelr'   r(   vtkmodules.vtkCommonColorr)   vtkmodules.vtkIOImager*   utilsr+   DEFAULT_COLORDEFAULT_EDGE_COLORDEFAULT_PT_SIZEDEFAULT_PT_COLORDEFAULT_CTRL_PT_COLORDEFAULT_CTRL_PT_SIZEr   r   r\   r   rA   Showabler  r>   rD   strre   rs   boolrz   r   r   r   r  tupler   show_object r?   r=   <module>r;     s                          3 2 2 2 2 2 2 2 D D D D D D D D D D D D D D D D D D # # # # # # ( ( ( ( ( ( G G G G G G : : : : : : L L L L L L                        / . . . . . C C C C C C C C 4 4 4 4 4 4 . . . . . .        !  !!,,W55%HflBC	O
LON	 )6  u$%  	   0"
4	?DL$x.$y/IJ" " " "B '6DT 
v,#>A   @ d8n U T)_    . )6,> 	iu$% UE5() 	
    
)_   0 '&X XT4ZX
X X 	X X X Xv	y(DO3	4h      R R	RR R 	R
 R R R R R R R R R R R" 
)_#R R R Rn  $59263748" #*33t t ttt t 	t
 t t t t t t t t t uUE5012t E%-./t  U5%./0!t" U5%<01#t$ e%t& #u*'t( )t* 5%&'+t, -t. U

/t0 U

1t2 3t t t tp r?   