o ?}h-@sddlmZddlZddlmZddlZddlmZm Z e e e fZ e e ej fZd%dd Zd&d d Zd'ddZGdddZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdd d eZGd!d"d"eZGd#d$d$eZdS)() annotationsN)Enum)ListUnionaPointbcCs(|jd|jd|jd|jdSNrpos)rrr 1/data/cref/OmniSVG-kaiyuan/deepsvg/svglib/geom.pydet s(rangleUnion[Angle, float]cCsNt|tr |j}n|}t|t|}}tj|| g||ggtjd}|S)Ndtype) isinstanceAngleradnpcossinarrayfloat32)rthetacsrot_mr r rget_rotation_matrixs  r bbox_list List[Bbox]cCsd}|D]}||}q|SN)union)r!resbboxr r r union_bboxs r'c@sVeZdZddZddZddZedd d Zd d Zd dZ dddZ dddZ dS)GeomcCtr#NotImplementedErrorselfr r rcopy"z Geom.copycCr)r#r*r,r r rto_str%r/z Geom.to_strcCr)r#r*r,r r r to_tensor(r/zGeom.to_tensorvector torch.TensorcCr)r#r*r2r r r from_tensor+szGeom.from_tensorcCdSr#r r-factorr r rscale/r/z Geom.scalecCr6r#r r-vecr r r translate2r/zGeom.translaterrcCr6r#r )r-rr r rrotate5r/z Geom.rotatecCr)r#r*r-nr r r numericalize8r/zGeom.numericalizeNr2r3rrr>) __name__ __module__ __qualname__r.r0r1 staticmethodr5r9r<r=rAr r r rr(!s  r(c@sJeZdZdZdQddZddZeddZed d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!d"ZedRd%d&ZdSd(d)Zd*d+ZdTd.d/ZdTd0d1Zd2d3ZdUd5d6Zd7d8ZdUd9d:ZdUd;d<ZdVdUd>d?Z dWdBdCZ!dDdEZ"dXdGdHZ#dUdIdJZ$dKdLZ%dUdMdNZ&dUdOdPZ'dS)YrNcCst|tjr|tj|_dS|dur$|dur$tjddgtjd|_dSt|ts-|durOt|ts6|durO|dur<|}|durB|}tj||gtjd|_dSt)Nr) rrndarrayastyperr r float_type ValueError)r-xyr r r__init__@s $zPoint.__init__cCt|jSr#)rr r.r,r r rr.Nz Point.copycC |jdSNrr r,r r rrOQ zPoint.xcCrTNr r r,r r rrPUrVzPoint.ycCs t|jdSNrJ)rrOr,r r rxprojY z Point.xprojcCs td|jSrX)rrPr,r r ryproj\rZz Point.yprojcCt|j|jSr#rr r-otherr r r__add___z Point.__add__cC ||Sr#__neg__r^r r r__sub__brZz Point.__sub__cCs6t|tr t|j|jSt|tsJt||jSr#rrr rMr-lmbdar r r__mul__es z Point.__mul__cCs||Sr#r rgr r r__rmul__lzPoint.__rmul__cCs4t|tr t|j|jSt|tsJ|d|SrWrfrgr r r __truediv__os  zPoint.__truediv__cC|dSNr r,r r rrdvrkz Point.__neg__cCsd|jd|jdS)NzP(, )rOrPr,r r r__repr__yzPoint.__repr__cCs|jd|jSN rrr,r r rr0|z Point.to_strcC |jSr#)r tolistr,r r rry z Point.tolistcC t|jSr#)torchtensorr r,r r rr1rZzPoint.to_tensorr2r3cCs t|Sr#)rryr4r r rr5 zPoint.from_tensorr;cCs|j|j7_dSr#r r:r r rr<szPoint.translatecCst||jSr#r])r-mr r rmatmulrSz Point.matmulrrcCst|}||Sr#)r rr-rrr r rr=s z Point.rotatecCst|}||j|_dSr#)r r rr r rrotate_sz Point.rotate_cC|j|9_dSr#r r7r r rr9rwz Point.scaler_cCs|j|jSr#)r dotr^r r rrrSz Point.dotcCsttj|jSr#)floatrlinalgnormr r,r r rrrwz Point.normcCt|j|jSr#)rcrossr r^r r rrraz Point.crosscCs ||Sr#rr^r r rdistrZz Point.distFcCsNtt||dd}|r"t||dkrdnd}||9}t|S)Ngg?rr ro)rarccosclip normalizerrrRad)r-r_signedrsignr r rrs " z Point.anglep1p2cCs6||r ||St||||||Sr#)iscloserabsrr)r-rrr r r distToLines  "zPoint.distToLinecCs ||Sr#rr,r r rrrZzPoint.normalizer>cCs|jjd|dd|_dS)Nrr )minmax)r roundrr?r r rrAszPoint.numericalizecCrr#)rallcloser r^r r rrraz Point.isclosecCst|jdkSrU)rallr r,r r riszeroraz Point.iszerocCtt|j|jt|j|jSr#)rrrOrPr^r r r pointwise_minzPoint.pointwise_mincCrr#)rrrOrPr^r r r pointwise_maxrzPoint.pointwise_max)NNrBr;rrC)r_r)F)rrrrrD)(rErFrGnum_argsrQr.propertyrOrPrYr[r`rerirjrlrdrsr0ryr1rHr5r<rr=rr9rrrrrrrrArrrrr r r rr=sN               cs6eZdZfddZddZddZd d d ZZS) Radiusctj|i|dSr#superrQr-argskwargs __class__r rrQrtzRadius.__init__cCrRr#)rr r.r,r r rr.rSz Radius.copycCd|jdd|jddS)NzRad(rrpr rqr r,r r rrsrzRadius.__repr__r;rcCr6r#r r:r r rr<r/zRadius.translater)rErFrGrQr.rsr< __classcell__r r rrrs  rcsFeZdZfddZddZddZddZd d Zdd dZZ S)Sizecrr#rrrr rrQrtz Size.__init__cCrRr#)rr r.r,r r rr.rSz Size.copycCr)NzSize(rrpr rqr r,r r rrsrz Size.__repr__cCrxr#)r rr,r r rrrzzSize.maxcCrxr#)r rr,r r rrrzzSize.minr;rcCr6r#r r:r r rr<r/zSize.translater) rErFrGrQr.rsrrr<rr r rrrs rc@seZdZdZGdddeZejfd ddZddZd d Z d d Z d dZ ddZ ddZ ddZddZd!ddZd"d#ddZdS)$Coordr c@seZdZdZdZdS)zCoord.XYrOrPN)rErFrGXYr r r rXYsrxycCs||_||_dSr#)coordr)r-rrr r rrQs zCoord.__init__cCs|jjd|jdS)N(rq)rvaluerr,r r rrsrtzCoord.__repr__cC t|jSr#)strrr,r r rr0rzz Coord.to_strcCt|jgSr#)r|r}rr,r r rr1rSzCoord.to_tensorcCsxt|trt|j||jSt|tr&|j|jkrtt|j|j|jSt|tr9t|jt||jj|jStr#) rrMrrrrNrgetattrrr^r r rr`s    z Coord.__add__cCrbr#rcr^r r rre rZz Coord.__sub__cCt|tsJt||jSr#)rrMrrrgr r rriz Coord.__mul__cCrmrnr r,r r rrdrkz Coord.__neg__cCrr#)rr7r r rr9rwz Coord.scaler;rcCs|jt||jj7_dSr#)rrrrr:r r rr<szCoord.translateTr cCs2|r|ntd}|j|jt|jtjjk<|SrX) r.rrr intrrrr)r-r is_absolutepointr r rto_pointszCoord.to_pointN)rrr)T)r r)rErFrGrrrrrQrsr0r1r`rerirdr9r<rr r r rrs  rc$eZdZfddZddZZS)XCoordctj|tjjddSN)r)rrQrrrr-rrr rrQ#zXCoord.__init__cCrr#)rrr,r r rr.&rzz XCoord.copyrErFrGrQr.rr r rrr" rcr)YCoordcrr)rrQrrrrrr rrQ+rzYCoord.__init__cCrr#)rrr,r r rr..rzz YCoord.copyrr r rrr*rrc@seZdZdZd(ddZeddZddZed d Zed d Z d dZ ddZ ddZ d)ddZ ddZddZd*ddZd*ddZed+d d!Zd"d#Zd$d%Zd&d'ZdS),BboxNcCst|trt|tr||_||}t|j|j|_dSt|ts$|dur^t|ts-|dur^|dur3d}|dur;t|}|durP|durPt|t|}}d\}}t|||_t|||_dSt )NrJ)rJrJ) rrrrrOrPwhrMrrN)r-rOrPwhrr r rrQ6s$ z Bbox.__init__cCs |j|jSr#rrr,r r rxy2Ir~zBbox.xy2cCs"t}|j|_|j|_|Sr#)rrr.r)r-r&r r rr.Ms  z Bbox.copycCs|jSr#)rr,r r rsizeSsz Bbox.sizecCs|j|jdSNrIrr,r r rcenterWsz Bbox.centercCsd|jd|jdS)NzBbox(rvrqrr0rr,r r rrs[rz Bbox.__repr__cCs|jd|jSrurr,r r rr0^sz Bbox.to_strcCstg|j|jSr#)r|r}rr1rr,r r rr1arzBbox.to_tensorcCsB|j}|j}|durt||}t|||_||jd|_|Sr)rrrrr)r-min_sizerrr r r make_squareds   zBbox.make_squarecCs|j|dSr#)rr<r:r r rr<prazBbox.translatecCs|j||j|dSr#)rr9rr7r r rr9ss z Bbox.scaler_cCs*|dur|St|j|j|j|jSr#)rrrrrr^r r rr$wsz Bbox.unioncCsJ|dur|St|j|j|j|j}|jjdks!|jjdkr#dS|SrU)rrrrrrrOrP)r-r_r&r r r intersect|s zBbox.intersectpoints List[Point]cCsD|sdS|d}}|ddD] }||}||}qt||Sr )rrr)rrrpr r r from_pointss    zBbox.from_pointscOs(ddlm}||j|jg|Ri|S)Nr ) SVGRectangle) svg_primitiverrr)r-rrrr r r to_rectangles zBbox.to_rectanglecCs |jjSr#)rr prodr,r r rarearZz Bbox.areacCs&||}|dur dS||SrX)rr)r-r_interr r roverlaps z Bbox.overlap)NNNNr#)r_r)rr)rErFrGrrQrrr.rrrsr0r1rr<r9r$rrHrrrrr r r rr3s.           rc@seZdZdZddZeddZddZdd Zd d Z d d Z e d"ddZ e ddZ d#ddZd#ddZddZddZddZdd Zd!S)$rr cCs ||_dSr#deg)r-rr r rrQrzzAngle.__init__cCr{r#)rdeg2radrr,r r rrr~z Angle.radcCrr#rrr,r r rr.rzz Angle.copycCd|jdS)Nuα(rqrr,r r rrsrSzAngle.__repr__cCrr#)rrr,r r rr0rzz Angle.to_strcCrr#)r|r}rr,r r rr1rSzAngle.to_tensorr2r3cC t|Sr#)ritemr4r r rr5r~zAngle.from_tensorcCstt|Sr#)rrrad2deg)rr r rrsz Angle.Radr_cCr\r#rr^r r rr`raz Angle.__add__cCrbr#rcr^r r rrerZz Angle.__sub__cCrr#)rrMrrrgr r rrirz Angle.__mul__cCst|tsJ||Sr#rrMrgr r rrjszAngle.__rmul__cCst|tsJ|d|SrWrrgr r rrls zAngle.__truediv__cCrmrnr r,r r rrdrkz Angle.__neg__NrB)r_r)rErFrGrrQrrr.rsr0r1rHr5rr`rerirjrlrdr r r rrs&      rc@sNeZdZdZddZddZddZdd Zd d Zd d Z e dddZ dS)Flagr cCst||_dSr#)rflag)r-rr r rrQrSz Flag.__init__cCrr#rrr,r r rr.rzz Flag.copycCr)Nzflag(rq)rr,r r rrsrSz Flag.__repr__cCrr#)rrr,r r rr0rzz Flag.to_strcCrr#)r|r}rr,r r rr1rSzFlag.to_tensorcCstd|jSrWrr,r r r __invert__rSzFlag.__invert__r2r3cCrr#)rrr4r r rr5r~zFlag.from_tensorNrB) rErFrGrrQr.rsr0r1rrHr5r r r rrsr)rrrrrC)r!r") __future__rnumpyrenumrr|typingrrrrNumrrMrr r'r(rrrrrrrrrr r r rs*        6 l5