
    vjg$                     z   d dl mZmZmZ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mZmZ ddlmZmZ ddlmZ 	 ed   Zed   Zed	   Zeed
      Z G d d      Z G d d      Z G d d      Zd Zdee   deee   ee   f   fdZdedeee f   fdZ!dedeeef   fdZ"dededefdZ#dededee$ef   fdZ%dededee$e$e$e$f   fdZ&dededee$ef   fdZ'dededee$ef   fdZ(d ed!edee$ef   fd"Z)d#ed$edee$ef   fd%Z*d&ed'e d(ee   d)ee$   d*ee   d+edeee$e+f   fd,Z,d+edefd-Z-dee   defd.Z.y/)0    )ListTupleUnionIterableSet)pisincosatan2sqrtinfdegrees)lexsortargminargmax   )EdgeWire)VectorArcPoint)r   r   )r   r   Segmentc                   D    e Zd ZU eed<   eed<   dedefdZd Zd Zd Zy)r   xyc                      || _         || _        y Nr   r   )selfr   r   s      :/DATA/.local/lib/python3.12/site-packages/cadquery/hull.py__init__zPoint.__init__           c                 <    d| j                    d| j                   dS )Nz( ,z )r   r   s    r    __repr__zPoint.__repr__    s    DFF81TVVHB''r#   c                 D    t        | j                  | j                  f      S r   )hashr   r   r&   s    r    __hash__zPoint.__hash__$   s    TVVTVV$%%r#   c                 d    | j                   | j                  f|j                   |j                  fk(  S r   r   )r   others     r    __eq__zPoint.__eq__(   s'    EGGUWW#555r#   N)	__name__
__module____qualname__float__annotations__r!   r'   r*   r-    r#   r    r   r      s.    HH% E 
(&6r#   c                   2    e Zd ZU eed<   eed<   dedefdZy)r   abc                      || _         || _        y r   )r5   r6   )r   r5   r6   s      r    r!   zSegment.__init__2   r"   r#   N)r.   r/   r0   r   r2   r!   r3   r#   r    r   r   -   s    HH% E r#   r   c                   l    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   dedededefdZy	)
r   csera1a2acc                    || _         || _        || _        || _        t	        |t        |      z  |t        |      z        | _        t	        |t        |      z  |t        |      z        | _        dt        z  ||z
  z
  | _
        y N   )r9   r<   r=   r>   r   r
   r	   r:   r;   r   r?   )r   r9   r<   r=   r>   s        r    r!   zArc.__init__B   sn    q3r7{ABK0q3r7{ABK0b&BG$r#   N)r.   r/   r0   r   r2   r1   r!   r3   r#   r    r   r   8   sF    HHHHIII	%% 	%E 	%u 	%% 	%r#   c                 T    t        ||       }|dk  rdt        z  |z   dt        z  z  }|S )Nr   rB   )r   r   )r   r   rvs      r    atan2prE   N   s/    	q!B	Av"frka"f%Ir#   edgesreturnc           	      l   t               }t               }| D ]  }|j                         }|dk(  rp|j                         }|j                         }|j	                  t        |j                  |j                        t        |j                  |j                        f       |dk(  ro|j                         }|j                         }|j                         \  }	}
|j                  t        t        |j                  |j                        ||	|
             t        d       t        |      t        |      fS )NLINECIRCLEzUnsupported geometry {gt})setgeomType
startPointendPointupdater   r   r   	arcCenterradius_boundsaddr   
ValueErrorlist)rF   arcspointsr;   gtp1p2r9   r<   r=   r>   s              r    convert_and_validater[   X   s    UDFZZ\<BBMM5rtt,eBDD"$$.?@A8^A
AYY[FBHHSqssACC!R45 899# & :tF|##r#   rW   c                     g }g }| D ]8  }|j                  |j                         |j                  |j                         : t        ||f      }| |d      |d   fS Nr   )appendr   r   r   )rW   r   r   pixss        r    select_lowest_pointra   s   sZ    
A
A		 
 1a&/C#a&>3q6!!r#   rV   c                 .   g }g }| D ]  }|j                   dt        z  k  rn|j                  dt        z  kD  rX|j                  |j                  j
                         |j                  |j                  j                  |j                  z
         t        |j                  |j                  g      \  }}|j                  |j
                         |j                  |j                          t        ||f      }t        ||d      ||d            | |d      fS )Ng      ?r   )r=   r   r>   r^   r9   r   r   r<   ra   r:   r;   r   r   )rV   r   r   r5   r_   _r`   s          r    select_lowest_arcrd      s    
A
A44#(?qttcBhHHQSSUUOHHQSSUUQSS[!&QSSz2DAqHHQSSMHHQSSM  1a&/C3q6Ac!fI&SV44r#   c                     |rt        |      nd }| rt        |       nd }|	|r|d   }|S |	||d   }|S |r+|r)t        |d   |d   g      \  }}|dk(  r|d   }|S |d   }|S t        d      )Nr   r   zNo entities specified)ra   rd   rT   )rV   rW   p_lowesta_lowestrD   rc   ixs          r    select_lowestri      s     /5"6*$H*. &DHHa[ I 
	("2a[ I 
h#Xa[(1+$>?2!GXa[ I	 *2! I 011r#   rY   rZ   c                     d}|j                   | j                   z
  |j                  | j                  z
  }}||fdk7  rt        ||      }|t        | |      fS )Nr   )r   r   )r   r   rE   r   )rY   rZ   angledxdys        r    pt_ptrn      sP    ETTBDD["$$+B
Bx6r2'"b/!!r#   r_   r5   c                 z   | j                   | j                  }}|j                  }|j                  j                   |j                  j                  }}||z
  ||z
  }}t	        |dz  |dz  z         }	|dz  |	dz  z  |z  ||	dz  z  t	        |	dz  |dz  z
        z  |z  z
  |z   }
|dz  |	dz  z  |z  ||	dz  z  t	        |	dz  |dz  z
        z  |z  z   |z   }|dz  |	dz  z  |z  ||	dz  z  t	        |	dz  |dz  z
        z  |z  z   |z   }|dz  |	dz  z  |z  ||	dz  z  t	        |	dz  |dz  z
        z  |z  z
  |z   }|
|||fS rA   )r   r   r<   r9   r   )r_   r5   r   r   r<   xcycrl   rm   lx1y1x2y2s                 r    _pt_arcrw      sw   33qA	ASSUUACCEEBVQVBR1WrQwA	
a!q&2	AF
T!q&16/-B BR G	G"	LB	
a!q&2	AF
T!q&16/-B BR G	G"	LB	
a!q&2	AF
T!q&16/-B BR G	G"	LB	
a!q&2	AF
T!q&16/-B BR G	G"	LBr2r>r#   c                    | j                   | j                  }}t        | |      \  }}}}t        ||z
  ||z
        t        ||z
  ||z
        f}t	        ||      t	        ||      f}	t        t        |            }
||
   t        | |	|
         fS r   )r   r   rw   rE   r   intr   r   )r_   r5   r   r   rs   rt   ru   rv   anglesrW   rh   s              r    pt_arcr{      s    33qAQ]NBBBFBF#VBFBF%;;F2r]E"bM)F	VF^	B":wq&*---r#   c                    |j                   |j                  }}t        ||       \  }}}}t        ||z
  ||z
        t        ||z
  ||z
        f}t	        ||      t	        ||      f}	t        t        |            }
||
   t        |	|
   |      fS r   )r   r   rw   rE   r   ry   r   r   )r5   r_   r   r   rs   rt   ru   rv   rz   rW   rh   s              r    arc_ptr}      s    33qAQ]NBBAFAF#VAFAF%;;F2r]E"bM)F	VF^	B":wvbz1---r#   r=   r>   c           	      r   | j                   }| j                  j                  | j                  j                  }}|j                   }|j                  j                  |j                  j                  }}||kD  rpt	        | j                  ||z
  | j
                  | j                        }t        |j                  |      \  }	}
}}||z
  }|	|z
  |z  }|
|z
  |z  }||z
  |z  }||z
  |z  }n||k  rpt	        |j                  ||z
  |j
                  |j                        }t        | j                  |      \  }	}
}}||z
  }|	|z
  |z  }|
|z
  |z  }||z
  |z  }||z
  |z  }n2||z
  }||z
  }t        |dz  |dz  z         }||z  }||z  }| }|}|}| }|||z  z   }|||z  z   }|||z  z   }|||z  z   }|||z  z   }|||z  z   }|||z  z   }|||z  z   }t        ||z
  ||z
        }t        ||z
  ||z
        }t        ||z
  ||z
        t        dz  z   dt        z  z  }t        ||z
  ||z
        t        dz  z   dt        z  z  } t        t        t        ||z
        t        | |z
        f            }!||f}"t        t        ||      t        ||            t        t        ||      t        ||            f}#|"|!   |#|!   fS rA   )r<   r9   r   r   r   r=   r>   rw   r   rE   r   ry   r   absr   r   )$r=   r>   r1xc1yc1r2xc2yc2arc_tmpxtmp1ytmp1xtmp2ytmp2delta_rdx1dy1dx2dy2rl   rm   rr   x11y11x12y12x21y21x22y22a1_outa2_outa11a21rh   rz   segmentss$                                       r    arc_arcr      s   	BttvvrttvvC	BttvvrttvvC 
BwbddBGRUUBEE2%,RTT7%;"ueUr's{g%s{g%s{g%s{g%	bbddBGRUUBEE2%,RTT7%;"ueUr's{g%s{g%s{g%s{g% 3Y3Yq27"#
a
acc b.C
b.C
b.C
b.C
b.C
b.C
b.C
b.CC#IsSy)FC#IsSy)F #)S3Y'"q&0QV
<C#)S3Y'"q&0QV
<C	VSv&C&L(9:;	<BfFc3sC1c3sC1H
 ":x|##r#   currentr;   c                 6   | |u r6t         t        t        t         t               t        t         t                     fS t        | t              r(t        |t              rt	        | |      S t        | |      S t        |t              rt        | |      S t        | |      S r   )r   r   r   
isinstancern   r{   r}   r   )r   r;   s     r    	get_angler   *  sy    !|GE#sOU3_==='5!a!$$'1%%a'1%%7A&&r#   	current_erh   entitiesrz   r   hullc                     ||   }||   }t        |t              r|j                  |       |j                  ||f       |||   ||d   u fS r]   )r   r   popextend)r   rh   r   rz   r   r   next_econnecting_segs           r    update_hullr   ;  sW     b\Fb\N&% RKK()6":va000r#   c           
      ^   g }t        | | dd  | dd        D ]  \  }}}t        |t              r|j                  t	        j
                  t        |j                  j                  |j                  j                        t        |j                  j                  |j                  j                                     t        |t              st        |t              st        |t              st        t        |j                  j                  |j                  j                  z
  |j                  j                  |j                  j                  z
              }t        t        |j                  j                  |j                  j                  z
  |j                  j                  |j                  j                  z
              }|j                  t	        j                  |j                   t        |j                  j                  |j                  j                        ||              | d   }t        t              r\t        t              rKt        |t              r:t        t        |j                  j                  |j                  j                  z
  |j                  j                  |j                  j                  z
              }t        t        |j                  j                  |j                  j                  z
  |j                  j                  |j                  j                  z
              }|j                  t	        j                  |j                   t        |j                  j                  |j                  j                        ||             t#        j$                  |      S )Nr   rB   )angle1angle2)zipr   r   r^   r   makeLiner   r5   r   r   r6   r   r   rE   r9   
makeCircler<   r   assembleEdges)r   rD   el_pelel_nr=   r>   el1s           r    finalize_hullr   O  s3   	BdDHd12h7b$b'"IIdmmF2446624466$:F2446624466<RSTr34)4)24466 146688bddff3DEFB24466 146688bddff3DEFBIIfRTTVVRTTVV&<RPRS 8  q'C"g:dC#8ZW=UVBDDFFTVVXX-rttvv/@ABVCEEGGdffhh.$&&((0BCD
		OODFFF46688TVVXX$>rRTU	
 b!!r#   c                    g }t        |       \  }}t        ||      }|j                  |       g }|j                  |       |j                  |       |}d}d}|srg }	g }
|D ]>  }t	        ||      \  }}|	j                  ||k\  r|nt
               |
j                  |       @ t        t        |	            }t        ||||	|
|      \  }}}|srt        |      S )Ng        F)
r[   ri   r^   r   r   r   ry   r   r   r   )rF   rD   rV   rW   startr   r   current_anglefinishedrz   r   r;   rk   segmentnext_ixs                  r    	find_hullr   o  s     B (.LD& $'EIIe  HOODOOFIMH A&y!4NE7MM5M#9%sCOOG$ 
 fVn%-8w&(B.
*	=(   r#   N)/typingr   r   r   r   r   mathr   r	   r
   r   r   r   r   numpyr   r   r   occ_impl.shapesr   r   occ_impl.geomr   ArcsPointsEntityHullr   r   r   rE   r[   ry   ra   rd   ri   r1   rn   rw   r{   r}   r   r   boolr   r   r   r3   r#   r    <module>r      sW   4 4 8 8 8 ) ) ' ! E{	g	~	E+,-6 6. % %,$ $5cDK9O3P $6" "5+< "5D 5U5#:%6 5( f  (	"e 	" 	"5#8 	"u  ueUE'A!B "	.e 	. 	.eWn 5 	.
.c 
.e 
.eWn 5 
.G$ G$ G$ug~!6 G$T'v '& 'U5'>-B '"111 6l1 K	1
 7m1 1 65$1(" " "@&Xd^ & &r#   