
    vj8              3          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       j}                  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!ZFdWd"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d/ZJd(ee$e#ee$   f   dee#   fd0ZK	 	 	 	 	 	 	 	 	 	 	 	 	 	 dXd(eAd#eBdeBd,eBd*eHd3eHd4eHd5eBd+eBd6eHd7eHdeEd)eEd8eEd9eEdee$   f d:ZLd1d d'd2d%d;d<d%d=d>d?dd<d<d<d<d@d@d%dAd%ddd%dBdeAd#eBdeBd,eBd*eHd4eHdCeEdDeeE   dEeHdFeBdGeBdHeBdIeBdJeeeBeBeBf      dKeeeBeBeBf      dLeeeBeBeBf      dMeeeBeBf      dNeeMeBf   dOeeMeBf   dPeHdQeNeBeBeBf   dReHdSeeMeBf   dTeeMeBf   dUeHf2dVZOeOZPy<)Y   )
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 | |       }|D ]  }t        |t        t        t         f      r|j                  |       0t        |t              r%|j                  t        j                  |             et        |t              r|j                  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        9/DATA/.local/lib/python3.12/site-packages/cadquery/vis.py_to_assyr>   B   s     %.../DcE9h78HHSMV$HHX**3/0\*HHU3Z u$:49+FGG  K    c                    g }g }g }g }| D ]  }t        |t              r|j                  |       %t        |t              r|j                  |       Gt        |t
              r|j                  |       it        |t              r|j                  |       t        |t              st        |      \  }}}}	|j                  |       |j                  |       |j                  |       |j                  |	        ||||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   s     DDDDr9%KKOF#KKOH%KKOI&KKOD!%5b%9"D$dKKKKKKKK " tT!!r?   vecssizec                 (   t               }t               }t               }t               }t	               }|j                  |       |j                  |       | D ]A  } |j                  |j                          }	|j                  d       |j                  |	       C |j                  |       |j                  |       |j                         j                  t               j!                  |             |j                         j#                  |       |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NE=DNN6MM%#V##QYY[1Qb! 
 LLNNn.99%@ANN!!$'Ir?   locsscalec                     t               }| D ]k  }t        |      \  }}t               }|j                  d        |j                  |   |j
                  |  |j                  |       |j                  |       m |gS )z(
    Convert Locations to vtkActor.
    r   )r!   r   r   SetAxisLabelsSetPositionSetOrientationSetScaleAddPart)rf   rg   r^   ltransrotaxs          r=   _to_vtk_axsrr      su    
 
Ba[
s^
3
E


2  4Kr?   T   gMbP?r<   	edgecoloredges	linewidth	tolerancec                 @    t        t        | ||dg |d|||      S )z(
    Convert Shapes to vtkAssembly.
    r0   r   )rt   ru   rv   rw   )r   r>   )r<   r1   rt   ru   rv   r2   rw   s          r=   _to_vtk_shapesry      s1     #U%0!I/q/ r?   sc           	         t               }t               }t               }t               }t	               }|j                  |       |j                  |       |j                  |       t        | t              rt        | j                         t              rt        t        | j                               }nt        d| j                                |j                         }	|j                         }
|j!                         }|j#                         }t%        |	      D ]g  }t%        |
      D ]W  }|j'                  |dz   |dz         }|j)                  |j+                         |j-                         |j/                                Y i t%        |
      D ][  }t%        |	dz
        D ]%  }|j1                  d|
|z  |z   |
|dz   z  |z   f       ' |s<|j1                  d|
dz   z  |z   d|z   f       ] t%        |	      D ]^  }t%        |
dz
        D ]%  }|j1                  d|
|z  |z   |
|z  |z   dz   f       ' |s<|j1                  d|
|z  z   dz   |
|z  dz   f       ` n| j3                         dk(  r| j                         j5                         }nt        d| j3                                |j7                         D ]?  }|j)                  |j+                         |j-                         |j/                                A |j9                         }t%        |dz
        D ]  }|j1                  d||dz   f        |j;                         r|j1                  ddz   df       |j=                  |       |j?                  |       |jA                         }|jC                  tE               jG                  |             |jI                  |       |jK                  |dz         |jM                  d       |S )	zI
    Convert Edge or Face to a vtkActor representing control points.
    z/Only NURBS surfaces are supported, encountered r   rs   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)rz   rP   r1   r^   r_   r`   cellsrb   surfNuNv
u_periodic
v_periodicijptcurveNpropss                      r=   ctrlPtsr      sc    
B F[FNE=DNN6MM%MM%!Tann&(;<+Q^^-=>DA!..BRAST  ]]_]]_%%'
%%'
 rA2YYYq1ua!e,&&rttvrttvrttv>   rA26]$$Qa!R1q5\A5E(FG # $$Qq1u)91q5(AB  rA26]$$Qa!R!VaZ!^(DE # $$Qa!aa!(DE  ::<9$NN$,,.E ?

~N  ++-B""244624462446:   MMOq1uA  QAJ/    QUAJ/
LLNNE	NN>#..u56	t	tax 	""4(Ir?   c              #      K   t        | t              r|  yt        | t              r| D ]  }t        |t              s|  yyw)z:
    Iterate over vtkActors, other props are ignored.
    N)r6   r   rC   )r<   rJ   s     r=   _iterate_actorsr      s?      #x 		C	B"h'  
s
   ;AA皙?Fmeshspecular
markersizespherestubes	meshcolorvertexcolorc           	        	
 	
fd}fd}t        | g      \  }}}}|rZt        |t               j                        t               j                  |      ||      }t	        |      D ]
  } ||        |S |r t        |      } ||        ||       |g}|S |rt        ||      }|S g }|D ]3  }t	        |      D ]#  } ||        ||       |j                  |       % 5 |S )zK
    Apply styling to CQ objects. To be used in conjunction with show.
    c                    | j                         }|j                  t               j                               |j	                  t               j                  	             |j                         |j                         |j                         |j                         |j                         r@|j                  t               |j                  t               |j                  t               y y N)rZ   SetEdgeColorr)   r\   SetVertexColorr]   r   r   SetRenderLinesAsTubesSetEdgeVisibilitySetSpecularSPECULARSetSpecularPowerSPECULAR_POWERSetSpecularColorSPECULAR_COLOR)
actorr   rv   r   r   r   r   r   r   r   s
     r=   _apply_stylezstyle.<locals>._apply_styleE  s    !!#>+66yAB^-88EF:&9%&&w/##E*%h'"">2"">2 r?   c                     | j                         }|j                  t               j                               |j	                         y r   )rZ   r[   r)   r\   
SetOpacity)r   r   r2   r1   s     r=   _apply_colorzstyle.<locals>._apply_colorT  s9    !!#~'2259:r?   )r1   rt   ru   rv   r2   rw   rg   )rD   ry   r)   r\   r   re   rr   rB   )r<   rg   r2   rw   ru   r   r   r   rv   r   r   r1   rt   r   r   kwargsr   r   shapesrO   rf   actorsr^   atmpps     `  ``````` ``           r=   styler   .  s   .3 3  "23&!9FD$
  "--e4$&11)<
 !$AO %* I% 
$SSU I 
U+ I A$Q'QQ		! (  Ir?   z	CQ viewerN      ?iig      ?)r   r   r   )rg   r2   rw   ru   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 ]  }!| j                  |!        t               }"|s|"j                  d       |"j                  |       |"j                  |        t        t        t           | j                               D ]f  }!|!j                         }#|r|#j!                          |s(|#j#                  t$               |#j'                  t(               |#j+                  t,               h t/        j0                          t/        j2                  dd       t/        j4                  dd       t7               }$|$j9                  t;                      |$j=                  |"       t?               }%|%jA                  d       |%jC                         jE                         }&|&jG                  ddd       |%jI                         jE                         jK                  |&       |%jM                         jE                         jK                  |&       |rqtO               }'|'jQ                  |%       |'jS                  ddd	d
       |'jU                  d       |'jW                  |$       |'jY                          |'j[                           | j\                  |  |r| j_                          | ja                  |       | j                  |       |D ]  }(| j                  |(        |D ]  })| j                  |)        | jc                         }*|r |*jd                  |  |r |*jf                  |  |r |*jh                  |  |s|s| jk                          |*jm                  |	       |*jo                  |
       |*jq                  |       |*js                  |       |r |*jt                  |  n| jw                          |$jy                          |"j{                         \  }+},|"j}                  t        |t              rt        |+|z        n|t        |t              rt        |,|z        n|       |"ji                  t        |t              rt        |+|z        n|t        |t              rt        |,|z        n|       |"j                          |rt               }-|-j                  |"       |-j                          |-j                          |-j                          t               }.|.j                  |       |.j                  |-j                                |.j                          |r|$j                          yy)zZ
    Show CQ objects using VTK. This functions optionally allows to make screenshots.
    r2   r   )rw   r   r   g?g        r   r   g?N)NrD   r>   re   rr   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SetFocalPointrj   ResetCameraRoll	ElevationAzimuthZoomSetClippingRangeResetCameraClippingRange
InitializeGetScreenSizeSetSizer6   floatintRenderr#   SetInputSetInputBufferTypeToRGBReadFrontBufferOffUpdater*   SetFileNameSetInputConnectionGetOutputPortWriteStart)/rg   r2   rw   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   rO   rf   r   r;   ptsaxsrendereractwinproptinteraxestporient_widgetrq   r   camerawh	win2imagewriters/                                                  r=   showr    s   @ !1 6FD$ V)5)D d
C
d%
(C }H3# 4 
C !!!$eOOH HX&(:(:(<=!""$h'"">2"">2 > 99;AA!QG>>r1E &'E	>@A	# >DQ		$	$	&	=	=	?BKK1a!88:FFrJ!88:FFrJ 24**40!!#sC5c"##E*!$$& HG$%%'  c"  !  %%'F &!e$H% KK
Y
NN7 KK0))+ 
DAqKK$UE2AI%fe4AJ& OO#D%0AHd#D%0AHd JJL *,	3))+$$&:&!!)"9"9";<  r?   )g?)r   r   g{Gz?TFT   rs   FFgoldblack	lightgreycyan)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   rr   boolry   r   r   r   r   tupler  show_object r?   r=   <module>r9     sG     3 D D D # ( G : L   / C 4 .   !  !,,W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T4Z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n  $59263748" #*33t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p r?   