a `e@sXddlZddlZddlZGdddZGdddZGdddZdd Zdd d ZdS)Nc@s"eZdZdZdddZddZdS) Blockz!A rectangular block, to be packedNrcCs.||_||_d|_d|_d|_||_||_dSN)whxyfitdatapadding)selfrrr r r 1/code/opendm/objpacker/imagepacker/imagepacker.py__init__"szBlock.__init__cCsdj|j|j|j|j|jdS)Nz({x},{y}) ({w}x{h}): {data})rrrrr )formatrrrrr r r r r __str__+sz Block.__str__)Nr)__name__ __module__ __qualname____doc__rrr r r r r s rc@s"eZdZdZdddZddZdS) _BlockNodezA BlockPacker nodeFNcCs.||_||_||_||_||_||_||_dSr)rrrrusedrightdown)r rrrrrrrr r r r2sz_BlockNode.__init__cCsdj|j|j|j|jdS)Nz({x},{y}) ({w}x{h}))rrrr)rrrrrrr r r __repr__;sz_BlockNode.__repr__)FNN)rrrrrrr r r r r0s rc@sHeZdZdZddZddZddZdd Zd d Zd d Z ddZ dS) BlockPackerz9Packs blocks of varying sizes into a single, larger blockcCs d|_dSr)rootrr r r rAszBlockPacker.__init__cCst|}|dj}|dj}tdd|||_|D]`}||j|j|j}|rp|||j|j}|j|_|j|_q0| |j|j}|j|_|j|_q0dS)Nr) lenrrrr find_node split_noderr grow_node)r blocksnblocksrrblocknodeZnode_fitr r r rDs   zBlockPacker.fitcCsN|jr.||j||}|r|S||j||S||jkrF||jkrF|SdSdSr)rrrrrr)r rrrr$r r r rXszBlockPacker.find_nodecCsHd|_t|j|j||j|j||_t|j||j|j|||_|S)NT)rrrrrrrr)r r$rrr r r rds    zBlockPacker.split_nodecCs||jjk}||jjk}|o.|jj|jj|k}|oF|jj|jj|k}|rX|||S|rh|||S|rx|||S|r|||StddS)Nzno valid expansion avaliable!)rrr grow_right grow_down Exception)r rrZ can_grow_downZcan_grow_rightZshould_grow_rightZshould_grow_downr r r r ps      zBlockPacker.grow_nodec Csb|j}tdd|j||j|t|jjd||jjdd|_||j||}|rZ||||SdSdSNrT)rrrrrrrrrr rrZold_rootr$r r r r%s zBlockPacker.grow_rightc Csb|j}tdd|j|j|td|jj|jj||dd|_||j||}|rZ||||SdSdSr(r)r*r r r r&s zBlockPacker.grow_downN) rrrrrrrrr r%r&r r r r r?s  rc Cst|j|jdks$t|j|jdkr,td|j\}}}tt |j|d}tt |j|d}tt |j||}tt |j||}|dd||||f}||} ||} ||| || |f} || fS)Nrz6 WARNING! UV Coordinates lying outside of [0:1] space!) minmin_xmin_ymaxmax_xmax_yprintshapemathfloorceil) imageextent_rrminxminymaxxmaxyZdelta_wZdelta_hchangesr r r crop_by_extentss$ r?rrrrPNGc Csg}i}d}|dD]}|d|}t|d} | j}| } Wdn1sT0Ytj| dd} d} |r||rt| ||\} } | ||<| j\} } }|t || ||| fdq|j dddt }| |tj |d |jj|jjf|d d }i}|D]}|j\}}} ||} | j\} }}|j| r@| d nd |jd |j| r`| dnd |jdf| rd| d nd||jd | rd| dnd||jdfd||<| |dd|j|j||j|j|f<q tj|dd}|||fS)N materialsrr+)axis)r cSs|j Sr)r)r#r r r zpack..)keycountdtype)rIr)offsetaspect)rasterioopenprofilereadnpflipr?r3appendrsortrrzerosrrrr rr)obj backgroundrextentsr!Zimage_name_maprPmatfilenamefr7r>r9rrZpacker output_image uv_changesr#fnameim_him_wr r r packsD  &   $    "" .rb)r@rAN) rNnumpyrRr4rrrr?rbr r r r se