
    ,jg$                        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.d/S )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                   F    e Zd ZU eed<   eed<   dedefdZd Zd Zd ZdS )r   xyc                 "    || _         || _        d S Nr   r   )selfr   r   s      G/DATA/AppData/hermes/venv/lib/python3.11/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    'DF''TV''''r#   c                 8    t          | j        | j        f          S r   )hashr   r   r&   s    r    __hash__zPoint.__hash__$   s    TVTV$%%%r#   c                 >    | j         | j        f|j         |j        fk    S r   r   )r   others     r    __eq__zPoint.__eq__(   s    EGUW#555r#   N)	__name__
__module____qualname__float__annotations__r!   r'   r*   r-    r#   r    r   r      sw         HHHHHH% E    
( ( (& & &6 6 6 6 6r#   c                   4    e Zd ZU eed<   eed<   dedefdZdS )r   abc                 "    || _         || _        d S 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   -   sJ         HHHHHH% E      r#   r   c                   n    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d	S )
r   csera1a2acc                 <   || _         || _        || _        || _        t	          |t          |          z  |t          |          z            | _        t	          |t          |          z  |t          |          z            | _        dt          z  ||z
  z
  | _
        d S N   )r9   r<   r=   r>   r   r
   r	   r:   r;   r   r?   )r   r9   r<   r=   r>   s        r    r!   zArc.__init__B   s    q3r77{ABK00q3r77{ABK00b&BG$r#   N)r.   r/   r0   r   r2   r1   r!   r3   r#   r    r   r   8   s         HHHHHHHHHHHHIIIIIIIII	%% 	%E 	%u 	%% 	% 	% 	% 	% 	% 	%r#   c                 b    t          ||           }|dk     rdt          z  |z   dt          z  z  }|S )Nr   rB   )r   r   )r   r   rvs      r    atan2prE   N   s3    	q!B	Avv"frka"f%Ir#   edgesreturnc           	         t                      }t                      }| D ]}|                                }|dk    rp|                                }|                                }|                    t          |j        |j                  t          |j        |j                  f           |dk    r~|                                }|	                                }|
                                \  }	}
|                    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   UUDF : :ZZ\\<<BBMM5rt,,eBD"$.?.?@AAAA8^^A

AYY[[FBHHSqsAC!R445555 8999::tF||##r#   rW   c                     g }g }| D ]6}|                     |j                   |                     |j                   7t          ||f          }| |d                  |d         fS Nr   )appendr   r   r   )rW   r   r   pixss        r    select_lowest_pointra   s   sg    
A
A  		 1a&//C#a&>3q6!!r#   rV   c                     g }g }| D ]}|j         dt          z  k     rZ|j        dt          z  k    rG|                    |j        j                   |                    |j        j        |j        z
             ot          |j	        |j
        g          \  }}|                    |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  4#(??qtcBhHHQSUOOOHHQSUQS[!!!!&QSz22DAqHHQSMMMHHQSMMMM
1a&//C3q6Ac!fI&&SV44r#   c                    |rt          |          nd }| rt          |           nd }||r	|d         }nW||	|d         }nJ|r9|r7t          |d         |d         g          \  }}|dk    r|d         n|d         }nt          d          |S )Nr   r   zNo entities specified)ra   rd   rT   )rV   rW   p_lowesta_lowestrD   rc   ixs          r    select_lowestri      s     /5>"6***$H*.8 &&&DHHa[		("2a[	 2h 2#Xa[(1+$>??2!GGXa[[!0111Ir#   rY   rZ   c                     d}|j         | j         z
  |j        | j        z
  }}||fdk    rt          ||          }|t          | |          fS )Nr   )r   r   )r   r   rE   r   )rY   rZ   angledxdys        r    pt_ptrn      sO    ETBD["$+B
Bx6r2'"b//!!r#   r_   r5   c                 \   | 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      sx   3qA	ASUACEBVQVBR1WrQwA	
a!q&2	AF
T!q&16/-B-B BR G	G"	LB	
a!q&2	AF
T!q&16/-B-B BR G	G"	LB	
a!q&2	AF
T!q&16/-B-B BR G	G"	LB	
a!q&2	AF
T!q&16/-B-B BR G	G"	LBr2r>r#   c                 T   | 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    3qAQ]]NBBBFBF##VBFBF%;%;;F2r]]E"bMM)F	VF^^		B":wq&*----r#   c                 T   |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    3qAQ]]NBBAFAF##VAFAF%;%;;F2r]]E"bMM)F	VF^^		B":wvbz1----r#   r=   r>   c           	      n   | j         }| j        j        | j        j        }}|j         }|j        j        |j        j        }}||k    rdt	          | j        ||z
  | j        | j                  }t          |j        |          \  }	}
}}||z
  }|	|z
  |z  }|
|z
  |z  }||z
  |z  }||z
  |z  }n||k     rdt	          |j        ||z
  |j        |j                  }t          | j        |          \  }	}
}}||z
  }|	|z
  |z  }|
|z
  |z  }||z
  |z  }||z
  |z  }n6||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tvrtvC	BtvrtvC 
BwwbdBGRUBE22%,RT7%;%;"ueUr's{g%s{g%s{g%s{g%	bbdBGRUBE22%,RT7%;%;"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(9:;;	<	<BfFc3sC11c3sC11H
 ":x|##r#   currentr;   c                    | |u rGt           t          t          t           t                     t          t           t                               fS t          | t                    r5t          |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   *  s    !||GE#sOOU3__===='5!! 	'a 	&!$$$'1%%%a 	''1%%%7A&&&r#   	current_erh   entitiesrz   r   hullc                     ||         }||         }t          |t                    r|                    |           |                    ||f           |||         ||d         u fS r]   )r   r   popextend)r   rh   r   rz   r   r   next_econnecting_segs           r    update_hullr   ;  sk     b\Fb\N&%   RKK()))6":va000r#   c           
      6   g }t          | | dd          | dd                    D ]\  }}}t          |t                    rm|                    t	          j        t          |j        j        |j        j	                  t          |j
        j        |j
        j	                                       t          |t                    rt          |t                    rt          |t                    rt          t          |j
        j        |j        j        z
  |j
        j	        |j        j	        z
                      }t          t          |j        j        |j        j        z
  |j        j	        |j        j	        z
                      }|                    t	          j        |j        t          |j        j        |j        j	                  ||                     | d         }t          |t                    rt          |t                    rt          |t                    rt          t          |j
        j        |j        j        z
  |j
        j	        |j        j	        z
                      }t          t          |j        j        |j        j        z
  |j        j	        |j        j	        z
                      }|                    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  sb   	BdDHd122h77  b$b'"" 	IIdmF246246$:$:F246246<R<RSSTTTTr3
	4))
	 4))
	
 246 1468bdf3DEEFFB246 1468bdf3DEEFFBIIfRTVRTV&<&<RPRSSS   q'C"g 
:dC#8#8 
ZW=U=U 
VBDFTVX-rtv/@AABBVCEGdfh.$&(0BCCDD
		ODFF468TVX$>$>rRTUUU	
 	
 	
 b!!!r#   c                    g }t          |           \  }}t          ||          }|                    |           g }|                    |           |                    |           |}d}d}|sg }	g }
|D ]L}t	          ||          \  }}|	                    ||k    r|nt
                     |
                    |           Mt          t          |	                    }t          ||||	|
|          \  }}}|t          |          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  s4    B (..LD& $''EIIe  HOODOOFIMH  
 	% 	%A&y!44NE7MM5M#9#9%%sCCCOOG$$$$fVnn%%-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      s   4 4 4 4 4 4 4 4 4 4 4 4 4 4 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ) ) ) ) ) ) ) ) ) ) ' ' ' ' ' ' ' ' ! ! ! ! ! ! E{	g	~	E+,-6 6 6 6 6 6 6 6.       % % % % % % % %,  $ $5cDK9O3P $ $ $ $6" "5+< " " " "5D 5U5#:%6 5 5 5 5( f     (	"e 	" 	"5#8 	" 	" 	" 	"u  ueUE'A!B    "	.e 	. 	.eWn 5 	. 	. 	. 	.
.c 
.e 
.eWn 5 
. 
. 
. 
.G$ G$ G$ug~!6 G$ G$ G$ G$T'v '& 'U5'>-B ' ' ' '"111 6l1 K	1
 7m1 1 65$1 1 1 1(" " " " " "@&Xd^ & & & & & & &r#   