+
    U;6j*                       ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RI	H
t
 ^ RIHt ^ RIt^ RIHtHt ^ RIHt ^ RIHtHtHtHt ^ R	IHt ]
! ]4      P7                  4       P8                  ^,          t]R
,          R,          t]R
,          R,          t]R,          t ]R,          R,          t!]R,          t"]R,          t#Rt$]! ]4      t%]! ]4      t&]&^ ,          ]%^ ,          ,          t']&^,          ]%^,          ,          t(R R lt)R R lt*R R lt+R R lt,R R lt-R R lt.R R  lt/R! R" lt0R# R$ lt1R% R& lt2R' R( lt3Rvt4R) R* lt5R+ R, lt6RwR- R. llt7RxR/ R0 llt8RyR1 R2 llt9R3 R4 lt:R5 R6 lt;R7 R8 lt<R9 R: lt=R; R< lt>R= R> lt?RzR? R@ llt@R{RA RB lltAR{RC RD lltBR{RE RF lltCRG RH ltDRI RJ ltERK RL ltFRM RN ltGRO RP ltHRQ RR ltIRS RT ltJRU RV ltKRW RX ltLRY RZ ltMR[ R\ ltNR] R^ ltOR_ R` ltPRa Rb ltQRc Rd ltRRe Rf ltS]$3Rg Rh lltTRi Rj ltURk Rl ltVRm Rn ltWRo Rp ltXRq Rr ltYRs Rt ltZ][Ru8X  d   ]\! ]Z! 4       4      hR# )|    )annotationsN)datetimetimezone)Path)Any)Image	ImageDraw)colors)A1A3A4	landscape)canvaspreview_exportsassemblyexportspdf_rendersz06 Drawingspdfz(roof_mount_platform_engine_assembly.jsonzexport_manifest.jsoni%& c                    V ^8  d   QhRRRR/# )   pathr   returnr    )formats   "!tools\standalone_export_engine.py__annotate__r   "   s     8 8D 8S 8    c                N    \         P                  ! V P                  R R7      4      # )utf-8encoding)jsonloads	read_textr   s   &r   	read_jsonr&   "   s    ::dnngn677r   c               $    V ^8  d   QhRRRRRR/# )r   r   r   valuer   r   Noner   )r   s   "r   r   r   &   s&     C CT C# C$ Cr   c                X    V P                  \        P                  ! V^R7      RR7       R# )r   indentr   r    N)
write_textr"   dumps)r   r(   s   &&r   
write_jsonr/   &   s    OODJJuQ/'OBr   c                    V ^8  d   QhRRRR/# )r   r   r   r   strr   )r   s   "r   r   r   *   s     : :4 :C :r   c                ^    \        V P                  \        4      4      P                  R R4      # )\/)r1   relative_toROOTreplacer%   s   &r   web_pathr8   *   s%    t%&..tS99r   c               $    V ^8  d   QhRRRRRR/# )r   matrixzlist[float]pointtuple[float, float, float]r   r   )r   s   "r   r   r   .   s#      K 0J Oi r   c                   Vw  r#pV ^ ,          V,          V ^,          V,          ,           V ^,          V,          ,           V ^,          ,           V ^,          V,          V ^,          V,          ,           V ^,          V,          ,           V ^,          ,           V ^,          V,          V ^	,          V,          ,           V ^
,          V,          ,           V ^,          ,           3# r   r   )r:   r;   xyzs   &&   r   transform_pointrB   .   s    GA!q	Aq	A%q	A5q	Aq	Aq	A%q	A5q	Aq	Aq	A%r
Q6C r   c               $    V ^8  d   QhRRRRRR/# )r   partdict[str, Any]
occurrencer    list[tuple[float, float, float]]r   )r   s   "r   r   r   7   s'     	Y 	Y~ 	Y> 	YNn 	Yr   c           
     R   V R ,          R,          pV R ,          R,          pV^ ,          V^ ,          3 UUUu. uF9  pV^,          V^,          3 F   pV^,          V^,          3 F  pWEV3NK	  	  K"  	  K;  	  ppppV Uu. uF  p\        VR,          V4      NK  	  up# u upppi u upi )boundsminmaxmatrixRowMajor)rB   )	rD   rF   bminbmaxr?   r@   rA   cornerscorners	   &&       r   transformed_part_boxrQ   7   s    >% D>% D q'47##Aq'47#Aq'47#A 
q	 $ 	# 	#   QXXPWfOJ'78&APWXX Ys   ?B>B$c               $    V ^8  d   QhRRRRRR/# )r   r;   r<   viewr1   r   tuple[float, float]r   )r   s   "r   r   r   C   s#      - S =P r   c                ^    V w  r#pVR 8X  d   W#3# VR8X  d   W$3# VR8X  d   W43# \        V4      h)topfrontright)
ValueError)r;   rS   r?   r@   rA   s   &&   r   projectrZ   C   s@    GA!u}twtwt
T
r   c               $    V ^8  d   QhRRRRRR/# )r   pointsrG   rS   r1   r   !tuple[float, float, float, float]r   )r   s   "r   r   r   N   s#     . .; .3 .Kl .r   c                   V  Uu. uF  p\        W!4      NK  	  ppV Uu. uF  q"^ ,          NK  	  ppV Uu. uF  q"^,          NK  	  pp\        V4      \        V4      \        V4      \        V4      3# u upi u upi u upi r>   )rZ   rJ   rK   )r\   rS   r;   	projectedxsyss   &&    r   projected_rectrb   N   su    39:6%%6I: )	*	u((	B	* )	*	u((	B	*r7CGSWc"g-- ;	*	*s   A3A8A=c               $    V ^8  d   QhRRRRRR/# )r   catalogrE   rS   r1   r   ,list[tuple[float, float, float, float, str]]r   )r   s   "r   r   r   U   s"       c 6b r   c                T   . pV R ,          pV R,           F  pVP                  VR,          4      pV'       g   K%  \        \        WT4      V4      w  rgr\        W,
          4      R8  g   \        W,
          4      R8  d   Kk  VP	                  WgWVP                  RR4      34       K  	  V# )parts	instancespartIdgMbP?folderAssembly)getrb   rQ   absappend)
rd   rS   rectsrg   rF   rD   x1y1x2y2s
   &&        r   
view_rectsrt   U   s    EGEk**
yyH-.'(<T(NPTUrw<%3rw<%#7bbjnnXz&JKL + Lr   c                    V ^8  d   QhRRRR/# )r   ro   re   r   r]   r   )r   s   "r   r   r   c   s      C Hi r   c                    V '       g   R# \        R V  4       4      \        R V  4       4      \        R V  4       4      \        R V  4       4      3# )        c              3  2   "   T F  q^ ,          x  K  	  R# 5ir   Nr   .0rects   & r   	<genexpr>rect_bounds.<locals>.<genexpr>g        &GG   c              3  2   "   T F  q^,          x  K  	  R# 5i   Nr   rz   s   & r   r}   r~   h   r   r   c              3  2   "   T F  q^,          x  K  	  R# 5i)r   Nr   rz   s   & r   r}   r~   i   r   r   c              3  2   "   T F  q^,          x  K  	  R# 5i)   Nr   rz   s   & r   r}   r~   j   r   r   )rw   rw         ?r   rJ   rK   )ro   s   &r   rect_boundsr   c   sM    !!&&&&&&&&&&&&	 r   c                    V ^8  d   QhRRRR/# )r   rj   r1   r   zcolors.Colorr   )r   s   "r   r   r   n   s     / / / /r   c                @    \         P                  ! \        V 4      4      # N)r
   HexColor
folder_hex)rj   s   &r   folder_colorr   n   s    ??:f-..r   c                    V ^8  d   QhRRRR/# )r   rj   r1   r   r   )r   s   "r   r   r   r   s     	* 	*s 	*s 	*r   c                B    R RRRRRRRRR	R
R/pVP                  V R4      # )z01 Trussz#3b6ea8z02 Floorz#688a42z	03 Screenz#a86a2d04 Buildingz#9da5ad05 Roof_Mountingz#c7a33bz08 Tyipcal_Partsz#795c9fz#52606d)rl   )rj   palettes   & r   r   r   r   s:    IIYyIIG ;;vy))r   c                    V ^8  d   QhRRRR/# r   rd   rE   r   r   )r   s   "r   r   r      s     
 
 
> 
r   c                   V P                  R / 4      pRVP                  R4      ;'       g    RRVP                  R4      ;'       g    RRVP                  R4      ;'       g    R	R
VP                  R4      ;'       g    RP                  4       RVP                  R4      RVP                  R4      RVP                  R4      /# )
parametersjobJOB_NOJ7535clientCLIENT_NAME drawnDRAWN_BYzHART AUSTRALIAmoduleMODULE_NAMEzROOF MOUNTEDlengthPLATFORM_INITIAL_LENGTHwidthPLATFORM_WIDTH_TRUSS_LENGHTscreen_heightSCREEN_HEIGHT)rl   strip)rd   paramss   & r   
sheet_metar      s    [[r*Fvzz(#..w&**]+11rJ';;+;6::m,>>EEG&**679:O4 r   c               0    V ^8  d   QhRRRRRRRRR	RR
R/# )r   r   canvas.Canvasrd   rE   sheet_nointsheet_titler1   
drawing_nor   r)   r   )r   s   "r   r   r      s9     << <<- <<. <<C <<^a <<or <<w{ <<r   c           	     
   \        \        4      w  rV^p^p^Np	\        V4      p
V P                  \        P
                  4       V P                  R4       V P                  WxWW^,          ,
          V	^^ R7       Rp^pRpV P                  W{,           WV,           W,           4       V P                  WW,
          V,
          WV,
          V,
          W,           4       V P                  WW,
          V,
          V,
          WV,
          V,
          V,
          W,           4       V P                  RR4       V P                  V^,           W,           ^,
          R4       V P                  V^2,           W,           ^,
          R4       V P                  V^l,           W,           ^,
          R	4       V P                  VR
,           W,           ^,
          R4       V P                  VR,           W,           ^,
          R4       \        ^^4       EF  pW,           ^,
          V^,          ,
          pV P                  W^,           W{,           V^,           4       V P                  R^4       V^8X  g   Kc  V P                  V^
,           VR4       V P                  V^2,           V\        P                  ! 4       P                  R4      4       V P                  V^l,           VR4       V P                  VR
,           VR4       V P                  VR,           VR4       EK
  	  WW,
          V,
          V,
          pV P                  \        P                   ! R4      4       V P                  R^4       V P#                  VV^,          ,           V^,           R4       V P                  \        P
                  4       V P                  R^4       V P#                  VV^,          ,           V^,           R4       WW,
          V,
          ^,           pRV3R\%        V
R,          4      3R\%        V
R,          4      ;'       g    R3R\%        V
R,          4      3RV3RV R 23.pV P                  R^4       V	\'        V4      ,          p\)        V4       F  w  pw  ppW,           V^,           V,          ,
          pV'       d6   V P                  WW,
          V,
          VV,           WW,
          VV,           4       V P                  R^4       V P                  VV^,           V4       V P                  R^4       V P                  V^H,           V^,           \%        V4      R!,          4       K  	  R"# )#   皙?strokefill    Helvetica-Boldg      @REVDATEDESCRIPTIONiR  DRAWNi  CHK	HelveticaAz%d/%m/%YzISSUED FOR REVIEWAUTOAPPz#d71920HartzROOF MOUNTED PLATFORMTITLEzJOB NOr   CLIENTr   zHART PROJECTr   zDWG NOSHEETz/3   SCALE AS SHOWN:N0   NN)r   r   r   setStrokeColorr
   blacksetLineWidthr|   linesetFont
drawStringranger   nowstrftimesetFillColorr   drawCentredStringr1   len	enumerate)r   rd   r   r   r   r   _heightleftbottomtitle_hmeta
revision_wlogo_winfo_windexr@   logo_xinfo_xrowsrow_hilabelr(   s   &&&&&                  r   draw_title_blockr      s   r]NEDFGgDv||$THHT5!8+WQQHGJFFHHTz(96;KLHHU\F"FDL6,A6CSTHHU\F"V+VT\F5JV5SU[UefKK #&NN4!8V-2E:NN4"9f.3V<NN4#:v/"4mDNN4#:v/"4g>NN4#:v/"4e<q!r!EBJ.1ud/Q7K#A:NN4"9a-NN4"9a)@)@)LMNN4#:q*=>NN4#:q&1NN4#:q%0  \F"V+FV__Y/0KK "%&6A:-v{FCV\\"KKQ&6A:-v{<ST\F"Q&F	+	3tE{#$	3tH~&88.9	#d7m$%	:	XJ123D KKQc$iE&t_>E5A.HHU\F*AIu|QYO$a(vq1ue,K#v{AE3u:c?; -r   c               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r   r   r   startrT   endtextr1   text_offsetfloatr   r)   r   )r   s   "r   r   r      sG     	L 	L 	L.A 	LH[ 	Lcf 	Luz 	L  DH 	Lr   c                   Vw  rVVw  rxV P                  \        P                  4       V P                  R 4       V P	                  WVWx4       V P	                  V^,
          V^,
          V^,           V^,           4       V P	                  V^,
          V^,
          V^,           V^,           4       V P                  RR4       V P                  WW,           ^,          Wh,           ^,          V,           V4       R# )ffffff?r   g333333@N)r   r
   r   r   r   r   r   )	r   r   r   r   r   rp   rq   rr   rs   s	   &&&&&    r   draw_dimensionr      s    FBFBv||$THHRRHHR!VR!VR!VR!V,HHR!VR!VR!VR!V,KKS!27a-"'Q)DdKr   c               4    V ^8  d   QhRRRRRRRRRRRR	R
R/# )r   r   r   r?   r   r@   whstepr   r   r)   r   )r   s   "r   r   r      s?     7 7M 7e 7 7% 7E 7QT 7^b 7r   c                :   V P                  \        P                  ! R 4      4       V P                  R4       \	        \        V4      ) \        V4      \        V4      ,           V4       F0  pV P                  W,           W!V,           V,           W$,           4       K2  	  R# )#777777g)\(?N)r   r
   r   r   r   r   r   )r   r?   r@   r   r   r   offsets   &&&&&& r   
draw_hatchr      sh    vy12TQQ#a&$7QF
Q6 8r   c               (    V ^8  d   QhRRRRRRRR/# )r   r   r   titler1   subtitler   r)   r   )r   s   "r   r   r      s.     	@ 	@= 	@ 	@ 	@T 	@r   c           	        \        \        4      w  r4V P                  R ^4       V P                  ^V^",
          V4       V'       d-   V P                  R^4       V P                  ^V^0,
          V4       V P	                  \
        P                  4       V P                  R4       V P                  ^^V^ ,
          V^ ,
          ^^ R7       R# )r   r   ?r   N)	r   r   r   r   r   r
   r   r   r|   )r   r   r   r   heights   &&&  r   draw_sheet_headerr      s    bMMEKK "%NN2v{E*K#r6B;1v||$THHRURZ"QQH?r   c                    V ^8  d   QhRRRR/# )r   r\   zlist[tuple[float, float]]boxr]   r   )r   s   "r   r   r      s     0 03 0:[ 0r   c                ,  aaaaa Vw  r#rEV  Uu. uF  qf^ ,          NK  	  up;'       g    RR.pV  Uu. uF  qf^,          NK  	  up;'       g    RR.p\        V4      \        V4      uop	\        V4      \        V4      uop
\        RV	S,
          4      p\        RV
S,
          4      p\        WK,          W\,          4      oW$VS,          ,
          ^,          ,           oW5VS,          ,
          ^,          ,           oR VVVVV3R llpWV3S3# u upi u upi )r   rw   r   c                    V ^8  d   QhRRRR/# )r   r;   rT   r   r   )r   s   "r   r   #fit_projected.<locals>.__annotate__   s      P P, P1D Pr   c                |   < SV ^ ,          S,
          S,          ,           SV ^,          S,
          S,          ,           3# r>   r   )r;   min_xmin_yoxoyscales   &r   	map_point fit_projected.<locals>.map_point   s4    U1X%..eAh6F%5O0OOOr   r   )r\   r   x0y0r   r   pr`   ra   max_xmax_ymodel_wmodel_hr	  r  r  r  r  r  s   &&            @@@@@r   fit_projectedr     s    LBA	1A$$		-	-C:B	1A$$		-	-C:Br7CGLE5r7CGLE5#uu}%G#uu}%GQ[)E	7U?"a'	'B	7U?"a'	'BP P (%// 
 	s
   DDc                    V ^8  d   QhRRRR/# )r   r;   r<   r   rT   r   )r   s   "r   r   r     s      D D1 D6I Dr   c                    V w  rp\         P                  ! ^4      pW,
          \         P                  ! V4      ,          W,           \         P                  ! V4      ,          V,
          3# )   )mathradianscossin)r;   r?   r@   rA   angles   &    r   iso_projectr    sG    GA!LLEETXXe_$qu&?!&CCCr   c                    V ^8  d   QhRRRR/# )r   r(   r1   r   tuple[int, int, int]r   )r   s   "r   r   r     s     I I I 4 Ir   c                    V P                  R 4      p \        V R,          ^4      \        V R,          ^4      \        V R,          ^4      3# )#:r   r   N:r      N:r      N)lstripr   r(   s   &r   rgb_from_hexr$    s>    LLEuSz2E#J 3SsR5HHHr   c               $    V ^8  d   QhRRRRRR/# )r   baser  shader   r   r   )r   s   "r   r   r     s(     M M* M5 M=Q Mr   c                   a \        R \        RS4      4      o\        ;QJ d    . V3R lV  4       F  NK  	  5# ! V3R lV  4       4      # )r   gQ?c              3  p   <"   T F+  p\        ^ \        ^\        VS,          4      4      4      x  K-  	  R# 5iry   )rK   rJ   r   )r{   channelr'  s   & r   r}   shade_color.<locals>.<genexpr>  s+     LtGQCWu_!5677ts   36)rK   rJ   tuple)r&  r'  s   &fr   shade_colorr-    s8    c$&'E5LtL5L5LtLLLr   c                    V ^8  d   QhRRRR/# )r   vectorr<   r   r   )r   s   "r   r   r     s      F F2 F7Q Fr   c                :   \         P                  ! V ^ ,          V ^ ,          ,          V ^,          V ^,          ,          ,           V ^,          V ^,          ,          ,           4      ;'       g    RpV ^ ,          V,          V ^,          V,          V ^,          V,          3# )r   r   )r  sqrt)r/  r   s   & r   unit_vectorr2    su    YYvay6!9,vay6!9/DDvaySYZ[S\G\\]ddadF!9vvay616!9v3EEEr   c               $    V ^8  d   QhRRRRRR/# )r   r;   r<   rS   r1   r   r   )r   s   "r   r   r     s#       : # Jd r   c                    V w  r#pVR 8X  d(   \        V 4      w  rVW#,           VR,          ,           pWVV3# VR8X  d   W#V3# VR8X  d   W$V3# VR8X  d   W4V3# \        V4      h)isor   rV   rW   rX   )r  rY   )r;   rS   r?   r@   rA   pxpydepths   &&      r   project_render_pointr9    ss    GA!u}U#T!u}u}QwwQwwQw
T
r   c               8    V ^8  d   QhRRRRRRRRRR	R
RRRRR/# )r   rd   rE   rS   r1   filenamesizeztuple[int, int]folder_filterset[str] | Nonemax_trianglesr   
color_moder   r   r   )r   s   "r   r   r   %  sb     K KK
K K 	K
 #K K K 
Kr   c           
       a  \         P                  R R R7       \         V,          pVw  r\        P                  ! RVR4      p
\        P
                  ! V
R4      p/ p. pS R,           Uu. uF%  pV'       d   VP                  R4      V9   g   K#  VNK'  	  pp\        V 3R lV 4       4      p\        ^\        P                  ! VV,          4      4      p. p\        R4      pV EFr  pS R,          P                  VR	,          4      pV'       d   VP                  R
4      '       g   KD  \        \        VR
,          ,          P                  4       4      pVV9  d   \        \!        V4      4      VV&   VV,          pVR,          pVR,          pVR,          pVP                  RR4      pVR8X  d   VR8X  d   RMRpMVR8X  d   \#        \%        V4      4      pMRp\'        ^ \)        V4      ^V,          4       EF\  pVVV^,            w  ppp\+        VVV^,          ,          VV^,          ^,           ,          VV^,          ^,           ,          34      p \+        VVV^,          ,          VV^,          ^,           ,          VV^,          ^,           ,          34      p!\+        VVV^,          ,          VV^,          ^,           ,          VV^,          ^,           ,          34      p"\-        V V4      p#\-        V!V4      p$\-        V"V4      p%VP/                  V#^ ,          V#^,          3V$^ ,          V$^,          3V%^ ,          V%^,          3.4       V!^ ,          V ^ ,          ,
          V!^,          V ^,          ,
          V!^,          V ^,          ,
          3p&V"^ ,          V ^ ,          ,
          V"^,          V ^,          ,
          V"^,          V ^,          ,
          3p'\        V&^,          V'^,          ,          V&^,          V'^,          ,          ,
          V&^,          V'^ ,          ,          V&^ ,          V'^,          ,          ,
          V&^ ,          V'^,          ,          V&^,          V'^ ,          ,          ,
          34      p(R\        RV(^ ,          V^ ,          ,          V(^,          V^,          ,          ,           V(^,          V^,          ,          ,           4      R,          ,           p)VP1                  V#^,          V$^,          ,           V%^,          ,           ^,          V#^ ,          V#^,          3V$^ ,          V$^,          3V%^ ,          V%^,          33\3        VV)4      34       EK_  	  EKu  	  V'       g   V
P5                  V4       V# \7        V^^V^8,
          V	^8,
          34      w  p*p+p,VP9                  R R7       V F7  w  p-p.p/V. U0u. uF  p0V*! V04      NK  	  p1p0VP;                  V1. V/O^N5RR7       K9  	  V
P5                  V^\R7       V# u upi u up0i )Tparentsexist_okRGBwhiteRGBArh   rj   c              3     <"   T F>  p\        SR ,          P                  VR,          / 4      P                  R^ 4      4      x  K@  	  R# 5i)rg   ri   triangleCountNr   rl   )r{   rF   rd   s   & r   r}   #render_mesh_view.<locals>.<genexpr>9  sE      %J 	GG  H!5r:>>PQRSS%s   AA	rg   ri   meshJsonverticesindicesrL   r   mountingr   screengףp=
?rw   zG?c                    V ^ ,          # r>   r   items   &r   <lambda>"render_mesh_view.<locals>.<lambda>k  s    Qr   key)r   outline)quality)r   gg      ?)      #   )\   `   d   )H   L   R   )2   6   <   7   )PDF_RENDER_DIRmkdirr   newr	   Drawrl   sumrK   r  ceilr2  r1   ASSEMBLY_DIRresolver&   r   r$  r   r   r   rB   r9  extendrn   r-  saver  sortpolygon)2rd   rS   r;  r<  r=  r?  r@  r   r   r   imagedraw
mesh_cacheprojected_boundsrF   occurrencestotal_trianglesstridetriangle_rowslightrD   	mesh_pathmeshrM  rN  r:   rj   r&  	tri_indexiaibicabcpapbpcabacnormallitmapper_model_size_scale_depthr\   colorr;   mappeds2   f&&&&&&                                           r   render_mesh_viewr  %  sS    5H$DMEIIeT7+E>>%(D,.J24%,[%9%9z
x 8M I 	
%9    % O DIIo=>?F EGM+,E!
w##Jx$89488J//Z(88AACD	J&$-d9o$>Jy!)$
#y/,-"-#%+/A%A>}D8#
6 23DDq#g,F
;I 9q=9JBB"q&)98BFQJ;OQYZ\_`Z`cdZdQe(fgA"q&)98BFQJ;OQYZ\_`Z`cdZdQe(fgA"q&)98BFQJ;OQYZ\_`Z`cdZdQe(fgA%a.B%a.B%a.B##beRU^beRU^beRPQU^$TUA$1+qtad{AaD1Q4K8BA$1+qtad{AaD1Q4K8B 1111-1111-1111-" F
 S&)eAh"6U1X9M"MPVWXPY\abc\dPd"dehlllC  2a52a5=2a5#8A"=A1QSTUQVXZ[\X]P^acdeafhjklhm`n?oq|  ~B  DG  rH  "I  J# <% "J 

4"/0@2r5SU:W]`bWbBc"dFK/0!.-34VE&-V4V-E-3-9IJ "/ 
JJtRJ Kwp 5s   (W95W9W94W>c               $    V ^8  d   QhRRRRRR/# )r   rd   rE   r=  r>  r   zBlist[tuple[list[tuple[float, float, float]], str, dict[str, Any]]]r   )r   s   "r   r   r   s  s&     
 
n 
_ 
  Y[ 
r   c                   . pV R ,          pV R,           Fr  pV'       d   VP                  R4      V9  d   K#  VP                  VR,          4      pV'       g   KE  VP                  \        WT4      VP                  RR4      V34       Kt  	  V# )rg   rh   rj   ri   rk   )rl   rn   rQ   )rd   r=  boxesrg   rF   rD   s   &&    r   occurrence_boxesr  s  s    EGEk**
Z^^H5]JyyH-.*4<jnnXWa>bdnop + Lr   c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r   r   r   rd   rE   r   r]   r=  r>  r   r)   r   )r   s   "r   r   r     sA     
M 
MM 
MN 
MIj 
M  |K 
M  W[ 
Mr   c           
     >   \        W4      pV UUUUu. uF  w  rVqu F  p\        V4      NK  	  K  	  p	pppp\        W4      w  rpV P                  ^4       V F  w  r]pV P	                  \        V4      4       T P                  V'       d   RMR4       V Uu. uF  q! \        V4      4      NK  	  pp\         FP  w  ppV P                  W,          ^ ,          W,          ^,          VV,          ^ ,          VV,          ^,          4       KR  	  K  	  R# u uppppi u upi )r   Q?
ףp=
?N)	r  r  r  setLineJoinr   r   r   	BOX_EDGESr   )r   rd   r   r=  r  rO   _folder_occr;   r_   r  _sizer  rj   r  r  r  s   &&&&             r   draw_wireframe_isor    s    W4EBG]%(>$U\EU#U\#%I]))9F6OOA!&</0D9:AB'&U+,'BDAqHHVYq\69Q<1vay|L 	 "' ^ Cs   D
Dc               4    V ^8  d   QhRRRRRRRRR	RR
RRR/# )r   r   r   rd   rE   rS   r1   r   r]   r   r=  r>  r   r)   r   )r   s   "r   r   r     sW     &X &X	&X&X &X 
+	&X
 &X #&X 
&Xr   c                  aaaaa \        W4       Uu. uF  pV'       d   V^,          V9   g   K  VNK  	  pp\        V4      w  oor\        RVS,
          4      p
\        RV	S,
          4      pVw  rr\        W,          W,          4      oWV
S,          ,
          ^,          ,           oWVS,          ,
          ^,          ,           oR VVV3R llpR VVV3R llpV P	                  R^	4       V P                  W^,          ,           V^,
          V4       V P                  \        P                  ! R4      4       V P                  R4       V Fv  w  pppppV P                  \        V4      4       V P                  V! V4      V! V4      \        R	VV,
          S,          4      \        R	VV,
          S,          4      ^^ R
7       Kx  	  V P                  \        P                  4       V P                  R4       V P                  V! S4      V! S4      V
S,          VS,          ^^ R
7       V P	                  R^4       V P                  W,           V^,
          V
R RVR R24       R# u upi )r   r   c                    V ^8  d   QhRRRR/# r   r(   r   r   r   )r   s   "r   r   2draw_projected_view_on_sheet.<locals>.__annotate__       ) )% )E )r   c                2   < SV S,
          S,          ,           # r   r   r(   r  r  rp   s   &r   tx(draw_projected_view_on_sheet.<locals>.tx      URZ5(((r   c                    V ^8  d   QhRRRR/# r  r   )r   s   "r   r   r    r  r   c                2   < SV S,
          S,          ,           # r   r   r(   r  r  rq   s   &r   ty(draw_projected_view_on_sheet.<locals>.ty  r  r   r   r   g      ?333333?r   r   r   .0f x  mmN)rt   r   rK   rJ   r   r   r   r
   r   r   r   r|   r   drawRightString)r   rd   rS   r   r   r=  r|   ro   rr   rs   r  r  box_xbox_ybox_wbox_hr  r  rx1ry1rx2ry2rj   r  r  r  rp   rq   s   &&&&&&                 @@@@@r   draw_projected_view_on_sheetr    s    $G22Q= 8 	2 
  !'NBB#rBwG#rBwG!$E%1E	'E/)Q.	.B	'E/)Q.	.B) )) ) KK !$%!)+URZ?vy12T&+"S#sF</0C"S'3tcCi5-@#A3tcTWi[`M`Cajkrst ', v||$THHRVRVWu_goaaHPKKQurzgc]#gc]RU3VW=s   I"I"I"c               (    V ^8  d   QhRRRRRRRR/# 	r   r   r   rd   rE   r   r]   r   r)   r   )r   s   "r   r   r     s0     L L L LEf Lko Lr   c                   Vw  r4rV\        VR ,          P                  4       R R7      R,          pV P                  \        P                  4       V P                  R4       V P                  W4WV^^ R7       V P                  R^4       V P                  V^,           WF,           ^,
          R4       WF,           ^,
          pV P                  W8^,           W5,           V^,           4       V P                  RR4       V P                  V^,           VR	4       V P                  V^&,           VR
4       V P                  V^H,           VR4       V P                  W5,           ^R,
          VR4       V P                  V^ ,           WC^ ,           V^,           4       V P                  V^B,           WC^B,           V^,           4       V P                  W5,           ^Z,
          WCV,           ^Z,
          V^,           4       ^p	V P                  RR4       \        V^R7       EFx  w  rWV	,          ,
          pW^,           8  d    R# V P                  W<V	,           ^,
          W5,           W,           ^,
          4       \        VP                  RR4      4      pRV9   d   VP                  R4      ^ ,          MRpV P                  V^,           V^,           \        V
4      4       V P                  V^:,           V^,           \        VP                  RR4      4      4       V P                  V^H,           V^,           \        VP                  RR4      4      R,          4       V P                  W5,           ^T,
          V^,           VP                  RR4      R,          4       EK{  	  R# )rg   c                ^    \        V P                  R ^ 4      4      ) V P                  RR4      3# )countnamer   rJ  rS  s   &r   rU   draw_bom_table.<locals>.<lambda>  s-    DHHWVWDX@Y?Y[_[c[cdjln[o>pr   rW  :N   Nr   r   r   z
PARTS LIST      @ITEMQTYr   GROUPr   @r   
sourcePathr   r3   r  r  :N*   N_ :N   NN)sortedvaluesr   r
   r   r   r|   r   r   r   r   r1   rl   splitr  r7   )r   rd   r   r?   r@   r   r   r   header_yr   r   rD   row_ysourcegroups   &&&            r   draw_bom_tabler    s   JA!''"))+1pqruvDv||$THHQ1H*KK !$NN1q5!%"*l3urzHHHQ1aeX\2KK #&NN1q5(F+NN1r68U+NN1r68]3NN152:x1HHQVQB1-HHQVQB1-HHQURZEBJ15EKKS! Q//5=(q5=EMA%quema.?@TXXlB/0)-T"1%Rq1ueaiU4AFEAIs488GR3H/IJq2vuqy#dhhvr.B*CC*HIqurz519emmC.Ec.JK 0r   c               (    V ^8  d   QhRRRRRRRR/# r  r   )r   s   "r   r   r     s0     K KM KN KAb Kgk Kr   c           	     t   Vw  r4rV\        V4      pR RRRVR,          ;'       g    R R2RVR,          ;'       g    R R2R	VR
,          ;'       g    R R2.pV P                  \        P                  4       V P	                  R4       V P                  W4WV^^ R7       V P                  R^4       V P                  V^,           WF,           ^,
          R4       V P                  RR4       \        V^R7       F?  w  rV P                  V^,           WF,           ^,
          V	^,          ,
          V	 RV
 24       KA  	  R# )z9ALL DIMENSIONS ARE IN MILLIMETRES UNLESS NOTED OTHERWISE.zFMODEL GEOMETRY IS GENERATED FROM THE STANDALONE CONFIGURATION CATALOG.zGVERIFY SITE FIXING LOCATIONS AGAINST ROOF STRUCTURE BEFORE FABRICATION.zPLATFORM LENGTH: r   -r  zPLATFORM WIDTH: r   zSCREEN HEIGHT: r   r   r   r   NOTESr   r  r  . N)	r   r   r
   r   r   r|   r   r   r   )r   rd   r   r?   r@   r   r   r   notesr   notes   &&&        r   
draw_notesr    s   JA!gDCPQ
DN11c2#6
4=//C04
$/6637s;E v||$THHQ1H*KK !$NN1q5!%"*g.KKS! a0q1uaebj52:5%4&7IJ 1r   c               4    V ^8  d   QhRRRRRRRRRRR	RR
R/# )r   r   r   r?   r   r@   r   r1   target_xtarget_yr   r)   r   )r   s   "r   r   r     s?     * *m * *% *s *e *_d *im *r   c                   V P                  \        P                  ! R 4      4       V P                  R4       V P	                  WWE4       V P                  W^^^ R7       V P                  R^4       V P                  W^,
          V4       R# )z#555555r   r   r   N)r   r
   r   r   r   circler   r   )r   r?   r@   r   r  r  s   &&&&&&r   draw_calloutr    sl    vy12THHQ8&JJqQqqJ)KK !$!UD)r   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   r   r   r   r]   r   r1   variantr   r)   r   )r   s   "r   r   r     s3     '; ';} ';3T ';]` ';kn ';sw ';r   c           
     x
   Vw  rErgV P                  \        P                  4       V P                  R 4       V P	                  WEWg^^ R7       WWR,          ,           pWWR,          ,           p	V P                  \        P                  ! R4      4       V P	                  V^,           V^,
          V^8,
          ^^ ^R7       V P                  \        P                  4       \        W^,           V^,
          V^8,
          ^^4       V P                  R4       T P                  V^,           YV,           ^,
          YR8X  d   ^M^ ,           4       V P                  R4       \        ^ \        V^(,
          4      ^ 4       FA  p
V P                  V^,           V
,           V^,
          V^ ,           V
,           V^,           4       KC  	  V P	                  WFR,          ,           V	^
,
          VR	,          ^^^ R7       WFR
,          ,           pV P                  \        P                  ! R4      4       V P                  R4       V P                  WVR,          ,           WVR,          ,           4       V P                  \        P                  4       V P                  R
4       V P	                  V^,
          V^,           ^$^
^^ R7       V P	                  V^,
          V^,
          ^^	^^ R7       V P	                  V^,
          WWR,          ,           ^4^^^ R7       V P                  R^4       V P                  V^ ,           V^,           R4       V P                  WFR,          ,           ^,           V	^,
          R4       V P                  V^,           WWR,          ,           R4       \        W^,,           V^,           3V^,,           WWR,          ,           3R4       \        W^F,           V^$,
          3WF,           ^F,
          V^$,
          3R4       \        WVR,          ,           WWR,          ,           RV^,
          WWR,          ,           4       \        WVR,          ,           WWR,          ,           RV^,           V^,           4       \        WVR,          ,           WWR,          ,           RV^,
          V	4       \        WVR,          ,           WWR,          ,           R V^,           V	4       V P                  R!^4       V P!                  WF^,          ,           V^,
          V4       V P                  R^4       V P!                  WF^,          ,           V^,
          R"4       R## )$r   r   rQ  gQ?z#eeeeeer   pitchr   r  g)\(?      ?z#b89226g@r  gRQ?g
ףp=
?r   z
ROOF SHEETzEXISTING PURLINg(\?zM16 RODzROD TO SUITzTYPICAL ROOF FIXING SPACINGr  g(\?1g=
ףp=?gffffff?2皙?3皙?4r   z
SCALE 1:10N)r   r
   r   r   r|   r   r   rF  r   r   r   r   r   r   r   r  r   )r   r   r   r  r?   r@   r   r   roof_ypurlin_yr   rod_xs   &&&&        r   draw_mounting_sectionr    s   JA!v||$THHQ1H*T\Ft8|HV__Y/0HHQVVaZRAAH>V\\"sFFQJBB7SHHQVVURZ78J1PQ)RST3q2v;+R&&1*a"fvovzJ ,HHQT\8b=!d(BqqHICKEvy12SHHUDL%QX6v||$SHHURZ!RAAH>HHURZ"b!AAH>HHURZXr2aaH@KKQNN1r66B;5NN14x<!#X]4EFNN52:qt8|Y73Vb[1EBJH3M}]3R"-
FRK/HJgh!d(lADL#urz14x<P!d(lADL#urz6B;O!d(lADL#uqy(K!d(lADL#urz8LKK !$!!e)QVU3KKQ!!e)QV\:r   c               $    V ^8  d   QhRRRRRR/# r   r   r   r   r]   r   r)   r   )r   s   "r   r   r     s(     !l !l= !l7X !l]a !lr   c           
        Vw  r#rEV P                  \        P                  4       V P                  R 4       V P	                  W#WE^^ R7       V P                  R^4       V P                  V^,           W5,           ^,
          R4       V^*,           pV^,,           pV^T,
          pV^R,
          p	V P                  R4       V P                  \        P                  ! R4      4       V P	                  WgW^ ^R7       V P                  \        P                  4       \        WWxV	^4       \        ^4       F  p
WhV
,          ^
,          ,           pV P                  \        P                  ! R4      4       V P                  WWV	,           4       V P                  \        P                  4       R F%  pV P                  WW,          ,           ^^^ R7       K'  	  K  	  R F  w  rWyV,          ,           pV P                  \        P                  4       V P                  R	4       V P                  V^,
          WV,           ^,           V4       V P                  R
^4       V P                  Wh,           ^,           V^,
          V4       K  	  \        WV^,
          3Wh,           V^,
          3R4       \        W^,
          WyR,          ,           3V^,
          WyR,          ,           3R^ 4       V P                  R
^4       V P                  V^*,           V^,           R4       R# )r   r   r   zTYPICAL ROOF FIXING SETOUTg333333?z#f2f2f2r   r  r  r   r   zMODULE LENGTHz
PURLIN CRSzEALL FIXING LOCATIONS ARE DERIVED FROM CURRENT CONFIGURED OCCURRENCES.N)r  r  r  ))r  zPURLIN LINE A)r  zPURLIN LINE B)r  zPURLIN LINE C)r   r
   r   r   r|   r   r   r   r   rF  r   r   r   r  r   )r   r   r?   r@   r   r   grid_xgrid_ygrid_wgrid_hr   gxfracr   gys   &&             r   draw_fixing_setout_detailr    sa   JA!v||$THHQ1H*KK !$NN1q5!%"*&BCVFVFVFVFSV__Y/0HHVVAAH>V\\"sFFB72Yqj2o%6??956R&16<<(&DJJrFM11QQJG '  ctm#6<<("b6/B"6;K#v+R!VU; c 3"-"/M_3"f}&<=V_cVcMc?dfrtuvKKQNN1r61r6#jkr   c               $    V ^8  d   QhRRRRRR/# r  r   )r   s   "r   r   r   C  s#     . . .4U .Z^ .r   c           	     *   Vw  r#rEV P                  \        P                  4       V P                  R 4       V P	                  W#WE^^ R7       V P                  R^4       V P                  V^,           W5,           ^,
          R4       . ROpV^,           V^:,           V^l,           V^,           V^,           .pV P                  R^4       \        Wv4       F%  w  rV P                  WV,           ^ ,
          V	4       K'  	  V P                  W#V,           ^,
          W$,           W5,           ^,
          4       VR,           F1  pV P                  V^,
          W8^,
          W5,           ^,
          4       K3  	  . R	Op
V P                  RR4       ^p\        V
4       F  w  rW5,           ^0,
          W,          ,
          pV P                  W.V,           ^,
          W$,           W,           ^,
          4       \        W}4       F  w  rV P                  W^,           V4       K   	  K  	  R# )
r   r   r   zHOLE / PENETRATION SCHEDULE:r   NNr   皙@N)MARKzDIA.SEALr  NOTE))r   18EPDMTYPzROD PENETRATION)B14BUTYLr  zBRACKET SLOT)C10SILICONEr  zANTI-ROTATION FIXING)DSITEzAS REQr  zMATCH ROOF PROFILE)EzN/APAINTr  zTOUCH UP GALV. EDGES)
r   r
   r   r   r|   r   r   zipr   r   )r   r   r?   r@   r   r   headerscol_xxxheaderr   r   r   rowyyr(   s   &&              r   draw_drilling_scheduler  C  s   JA!v||$THHQ1H*KK !$NN1q5!%"*&CD5GUAFAGQWa#g6EKK !$%)
rq52:v. *HHQA
AE152:.BiiaFAEBJ/ D KKS!Eo
URZ%-'JNAE2:>:UIBNN2Avu- ) &r   c               $    V ^8  d   QhRRRRRR/# r  r   )r   s   "r   r   r   b  s#     . .} .3T .Y] .r   c           	     (   Vw  r#rE. ROpV P                  \        P                  4       V P                  R4       V P	                  W#WE^^ R7       V P                  R^4       V P                  V^,           W5,           ^,
          R4       V^,
          \        V4      ,          p\        V4       F  w  pw  rW5,           ^,
          W,          ,
          pV P                  W+V,           ^,
          W$,           W,           ^,
          4       V P                  V^,           V^,           ^^^ R7       V P                  R^4       V P                  V^,           V^,           V	4       V P                  RR4       V P                  V^",           V^,           V
4       K  	  R# )	r  r   r   r   zITEM LEGENDr   r  N))r  zSTIRRUP / ROOF BRACKET)r  M16 THREADED ROD)r  zEPDM SEALING WASHER)r  zGALV. FLAT WASHER + NUT)5COMPRESSION TUBE)6zROOF SHEET / EXISTING PURLIN)r   r
   r   r   r|   r   r   r   r   r   r  r   )r   r   r?   r@   r   r   r   r   r   rT  r   r  s   &&          r   draw_component_legendr$  b  s7   JA!D v||$THHQ1H*KK !$NN1q5!%"*m4Vs4y E )$}URZ%-'JNAE2:>:

1r6261QQ
7$a(a"fb1fd3K%q2vrAvu- !0r   c               $    V ^8  d   QhRRRRRR/# r  r   )r   s   "r   r   r   |  s#     !3 !3 !34U !3Z^ !3r   c           	        Vw  r#rE. ROpV P                  \        P                  4       V P                  R4       V P	                  W#WE^^ R7       V P                  R^4       V P                  V^,           W5,           ^,
          R4       W5,           ^,
          pV P                  W'^,           W$,           V^,           4       V P                  R^4       V P                  V^,           VR4       V P                  V^*,           VR4       V P                  V^,           VR4       V P                  V^,           VR4       V P                  V^",           W2^",           V^,           4       V P                  V^,           W2^,           V^,           4       V P                  V^,           W2^,           V^,           4       ^pV P                  R	^4       \        V4       F  w  rWy^,           V,          ,
          pV P                  W+V,           ^,
          W$,           W,           ^,
          4       V P                  V^
,           V^,           V
^ ,          4       V P                  V^*,           V^,           V
^,          4       V P                  V^,           V^,           V
^,          4       V P                  V^,           V^,           V
^,          4       K  	  R
# )r  r   r   r   zFIXING SCHEDULEr  r   FINISHr  r   N))r  zSTIRRUP BRACKETGALV.zTYPICAL ROOF SUPPORT)r  r   r(  zCUT TO SUIT ROOF PITCH)r  zRUBBER WASHERr
  zSEAL AGAINST ROOF SHEET)r  z
M16 WASHERr(  zBOTH SIDES OF BRACKET)r!  r"  r(  zBETWEEN ROOF AND PURLIN)r#  zPURLIN FIXINGr  zCONFIRM WITH STRUCTURE)	r   r
   r   r   r|   r   r   r   r   )r   r   r?   r@   r   r   r   r  r   r   r  r  s   &&          r   draw_fastener_scheduler)  |  s   JA!D v||$THHQ1H*KK !$NN1q5!%"*&78urzHHHQ1aeX\2KK !$NN1q5(F+NN1r68]3NN1s7Hh/NN1s7Hg.HHQVQB1-HHQWaS(Q,/HHQWaS(Q,/EKKQo
AI..EMA%quema.?@q2vuqy#a&1q2vuqy#a&1q3w	3q62q3w	3q62 &r   c               $    V ^8  d   QhRRRRRR/# r   r   r   rd   rE   r   r)   r   )r   s   "r   r   r     s!      - . T r   c           
        V P                  4        V P                  \        \        4       \	        V R R4       \        VRRRRRR7      p\        VRRR R
RR7      p\        VRRR!RRR7      pV P                  \        V4      ^URR	RRRR7       V P                  \        V4      ^iRR^RRR7       V P                  \        V4      RRR^RRR7       V P                  R^	4       V P                  RRR4       V P                  RRR4       \        WR"4       \        WR#4       \        . R$O^R7       F   w  pw  rgr\        WV\        V4      W4       K"  	  \        W^R R4       V P                  4        V P!                  4        R# )%zSITE ASSEMBLYz>Roof mounted platform generated from current web configurationr5  zsite_assembly_iso.pngi`[ 	technicalr?  r@  rV   zsite_assembly_plan.png  i rW   zsite_assembly_elevation.pngi_ i    Tautor   r   preserveAspectRatiomaskJ  i  R    r   i2  z	PLAN VIEWi3  	ELEVATIONr  zJ7535-0000-001N)    )r/    )r:  r;  )  i    iX  )r<  b  r=  v   ))   i  iT  i  )r   i  r>  i  )i  i  r6    )h  r   i  i  )	saveStater  SHEET_SCALE_XSHEET_SCALE_Yr   r  	drawImager1   r   r   r  r  r   r  r   restoreStateshowPage)
r   rd   iso_path	plan_path	elev_pathr   r?   r@   r  r  s
   &&        r   draw_site_assembly_sheetrL    s   MMOIIm]+c?,lm0Gdk  yD  EH %1I;fm  {F  GI '3PR\lr  @K  LIMM#h-SSVZagMhMM#i.#s#cW[bhMiMM#i.#s#cW[bhMiKK !$#sK0$[13!67s23&  (D  LM  N>A"SQA/ NS1o7GHLLNr   c               $    V ^8  d   QhRRRRRR/# r+  r   )r   s   "r   r   r     s&     @ @] @^ @ @r   c           
        V P                  4        V P                  \        \        4       \	        V R R4       RR0p\        VRRREVRRR7      p\        VR	R
RFR0RRR7      p\        VRRRGVRRR7      pV P                  \        P                  4       V P                  R4       V P                  ^FRR^^^ R7       V P                  \        V4      ^ZRR^RRRR7       \        V RHRIR4       V P                  R^4       V P                  RRR4       V P                  \        V4      ^KRRR RRR7       \!        V RJR!R"4       \!        V RKR#R$4       V P                  \        V4      ^KR%R&^RRR7       \#        V RL4       \%        V RM4       \'        V RN4       \)        V RO4       V P                  R^	4       V P                  R(R)R*4       V P                  R+R,R-4       V P                  R.^4       . RPOpR/R'rV P                  \        P                  4       V P                  WxR0^^^ R7       V P                  R^4       V P+                  V^,           V^,           R14       V P                  R.R24       \-        V^R37       F9  w  rV P+                  V^,           V^,           V	^,          ,
          V	 R4V
 24       K;  	  . RQOpV^,           pV P                  RR54       V P+                  V^,           V^6,           R64       V P+                  V^,           V^6,           R74       V P/                  W|^2,           VR0,           V^2,           4       V P/                  V^,           W^,           V^B,           4       V P                  R.R84       \-        V4       Fy  w  p	w  rV^',           V	^
,          ,
          pV P/                  W^,           VR0,           V^,           4       V P+                  V^,           W4       V P+                  V^,           W4       K{  	  \1        V ^RR9RR:4       \1        V R;RR<R=R>4       \1        V R?RR@RARB4       \3        W^R RC4       V P5                  4        V P7                  4        RD# )RzMOUNTING DETAILSz=Roof fixing and support components from current configurationr   r   r5  zmounting_iso.pngi" rO  r.  rV   zmounting_setout.pngr5  is rW   zmounting_elevation.pngi8 r   i  i  r   r/  ij  Tr1  r2  zOVERALL MOUNTING ELEVATIONr   i  i  zMOUNTING ELEVATIONi4    r   zSECTION C-CstraightzSECTION D-Dr  i  `  N  i  i  zISOMETRIC VIEWi  i  zMOUNTING SETOUTr   iT  i  zMOUNTING NOTESr  r  r  r  CHECKBYr  r   i  rA  r  i  i  ir  r  iE  i  zJ7535-0000-003N)i  r0  )i  r5  )r9  i@  )n     )i  rV  )i  %  r=  rB  )i}  rW  r=  rB  )K      rQ     )  rR  r5     )r[  x   rO  r\  )r[  i,  rO  rY  )z3YELLOW ITEMS INDICATE ROOF MOUNTING HARDWARE GROUP.z7FIXING LOCATIONS ARE SHOWN FROM CONFIGURED OCCURRENCES.zGCONFIRM FASTENERS AND ROOF SHEETING TYPE BEFORE ISSUE FOR CONSTRUCTION.))zVERIFY ROOF SHEET PROFILEr  )zCHECK PURLIN LOCATIONSr  )zSET ROD PROJECTIONFAB)zSEAL PENETRATIONSINSTALL)zTORQUE LOCK NUTSr_  )rC  r  rD  rE  r   r  r   r
   r   r   r|   rF  r1   r   r   r   r  r  r$  r  r)  r   r   r   r  r   rG  rH  )r   rd   rO  rI  setout_pathrK  detail_notesr?   r@   r   r  inspection_rowstable_ycheckbyr  s   &&              r   draw_mounting_sheetrf    s   MMOIIm]+c-/no"M2H0BKQYip  ~H  IH"7E3H+XjWk  |B  OY  ZK '3K[Zbrx  FP  QIv||$THHRtSH3MM#i."d$rW[bhMi3\3OPKK !$#t%9:MM#h-SCUY`fMg#3]JO#4mWMMM#k"B4Y]djMkc#78#453 563 56KK !$#s$45#s$56KKQL
 qv||$HHQ3AAH.KK !$NN1q5!c'#34KKS! Q7q1ua#g
2ugRv4FG 8O "fGKK #&NN1q5'B,0NN1s7GbL$/HHQ"a#gw|4HHQWg3w"5KKS!'8{r\EBJ&FAGR!V,q1ub(q3w'	 9
 c4c40c4c3/dD#tS1S1&8:JKLLNr   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   r   r   rd   rE   rS   r1   r   r   r)   r   )r   s   "r   r   r     s1     ( (] (^ (3 (WZ (_c (r   c                L  aaaaa \        \        4      w  rE^*pV P                  R^4       V P                  WeV,
          V4       V P                  R^	4       V P                  WeV,
          ^,
          R\        P
                  ! \        P                  4      P                  4        R24       V P                  WeV,
          ^,
          RVR,          R RVR	,          R 24       \        W4      p\        V4      w  oor\        R
VS,
          4      p
\        R
V	S,
          4      pTpTpWF^,          ,
          pWV^,          ,
          ^6,
          p\        W,          W,          4      oWV
S,          ,
          ^,          ,           oWVS,          ,
          ^,          ,           oR VVV3R llpR VVV3R llpV P                  \        P                  ! R4      4       V P!                  WW^^ R7       V F  w  pppppV P                  \#        V4      4       V P%                  R4       V P!                  V! V4      V! V4      \        RVV,
          S,          4      \        RVV,
          S,          4      ^^ R7       K  	  V P                  \        P&                  4       V P%                  R4       V P!                  V! S4      V! S4      V
S,          VS,          ^^ R7       V P                  R^4       V P)                  WF,
          V^,
          RV
R RVR R24       V P+                  4        R# )r  r   r   z
Generated z  | Standalone engine | Units: mmzInstances: instanceCount,z | Unique parts: 	partCountr   c                    V ^8  d   QhRRRR/# r  r   )r   s   "r   r   )draw_projected_view.<locals>.__annotate__  r  r   c                2   < SV S,
          S,          ,           # r   r   r  s   &r   r  draw_projected_view.<locals>.tx  r  r   c                    V ^8  d   QhRRRR/# r  r   )r   s   "r   r   rm    r  r   c                2   < SV S,
          S,          ,           # r   r   r  s   &r   r  draw_projected_view.<locals>.ty  r  r   z#aab4ber   r  r  r  z	Overall: r  r  r  N)r   r   r   r   r   r   r   utc	isoformatrt   r   rK   rJ   r   r
   r   r|   r   r   r   r  rH  )r   rd   rS   r   r   r   marginro   rr   rs   r  r  r  r  r  r  r  r  r  r  r  r  rj   r  r  r  rp   rq   s   &&&&                   @@@@@r   draw_projected_viewrv    s   bMMEFKK "%NN6F?E2KKQNN6F?R/:hll8<<>X>b>b>d=e  fF  2G  HNN6F?R/;w?WXY>ZZklst  mA  BC  lD  2E  Fw%E 'NBB#rBwG#rBwGEEQJEaZ"$E1E	'E/)Q.	.B	'E/)Q.	.B) )) ) vy12HHU5H:&+"S#sF</0C"S'3sS3Y%,?#@#cCRUIY^K^B_hipqr ',
 v||$SHHRVRVWu_goaaHPKKQySQXY\P]]`5abLLNr   c                    V ^8  d   QhRRRR/# )r   r   r   r   ztuple[bool, list[str]]r   )r   s   "r   r   r   $  s      4 4J r   c                    \         R ,          \         R,          .p\        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   R. 3# \        P                  ! 4       p. pV FT  p\        P                  ! V4      pVP	                  V4       VP                  \        V4      4       VP                  4        KV  	  VP                  ;'       g    / pVP                  RRRRR	R
R\        P                  ! 4       R\        P                  ! 4       /4       VP                  V4       V P                  4       '       d   V P                  4        VP                  V ^RR7       VP                  4        RV3# )test.pdfMOUNTING_DETAILS.pdfc              3  @   "   T F  qP                  4       x  K  	  R # 5ir   exists)r{   templates   & r   r}   3export_pdf_from_source_templates.<locals>.<genexpr>)  s     @X     FTr   zRoof Mounted Platform Drawingssubjectz2Template-based PDF export from source drawing PDFsproducerz"StandalonePlatformEngine + PyMuPDFcreationDatemodDate)garbagedeflate)SOURCE_PDF_DIRallfitzopen
insert_pdfrn   r8   closemetadataupdateget_pdf_nowset_metadatar}  unlinkrq  )r   template_pathsoutputusedr~  r  r  s   &      r    export_pdf_from_source_templatesr  $  s2   #//N 3@@333@@@@byYY[FD"8$&!HX&'	 # $$"HOO5K<D,,.t'')	
 !{{}}
KKaK.
LLN:r   c                    V ^8  d   QhRRRR/# r   rd   rE   r   r   r   )r   s   "r   r   r   F  s     
 
 
4 
r   c                    \         R ,          p\        V4      w  r#V'       d   V# \        P                  ! \	        V4      \
        R7      p\        W@4       \        W@4       VP                  4        V# )z roof_mount_platform_drawings.pdf)pagesize)	
EXPORT_DIRr  r   Canvasr1   PDF_PAGE_SIZErL  rf  rq  )rd   r   used_templates
_templatesr   s   &    r   
export_pdfr  F  sT    ::D!A$!GN
--D	M
:CS*%HHJKr   c               $    V ^8  d   QhRRRRRR/# )r   coder   r(   r   r   r1   r   )r   s   "r   r   r   S  s!        3  s  s  r   c                    V  R V R 2# )
r   )r  r(   s   &&r   dxf_pairr  S  s    V2eWBr   c                    V ^8  d   QhRRRR/# r  r   )r   s   "r   r   r   W  s          4  r   c                   \         R ,          p\        ^ R4      \        ^R4      \        ^	R4      \        ^F^4      \        ^ R4      \        ^ R4      \        ^R4      \        ^ R4      \        ^R4      \        ^F^4      .
p. ROpV FK  pVP                  \        ^ R4      \        ^V4      \        ^F^ 4      \        ^>^4      \        ^R4      .4       KM  	  VP                  \        ^ R4      \        ^ R4      \        ^ R4      \        ^R4      .4       RRRRRR/pRRRR	RR
/pVP                  4        EF  w  pw  r\	        W4      p
\        V
4      w  rrVP                  \        ^ R4      \        ^Wg,          4      \        ^
V4      \        ^WV,
          ,           R,           4      \        ^^ 4      \        ^(^4      \        ^VP                  4        R24      .4       V
 F  w  pppppW,           V,
          V	V,           V,
          ppVV,           V,
          V	V,           V,
          ppVV3VV3VV3VV3VV3.pVP                  \        ^ R4      \        ^Wg,          4      \        ^Z\        V4      4      \        ^F^ 4      .4       V F1  w  ppVP                  \        ^
VR 4      \        ^VR 4      .4       K3  	  K  	  EK  	  VP                  \        ^ R4      \        ^ R4      .4       VP                  RP                  V4      RR7       V# )z roof_mount_platform_drawings.dxfSECTIONHEADERz	$INSUNITSENDSECTABLESTABLELAYERTOPFRONTRIGHT
CONTINUOUSENDTABENTITIESrV   rW   rX   TEXTr7  z VIEW
LWPOLYLINEz.3fEOFr   asciir    )r  r  r  
DIMENSIONS)rw   rw   )rw        )g     p@r  )
r  r  rp  itemsrt   r   upperr   r-   join)rd   r   lineslayerslayeroffsets	layer_forrS   off_xoff_yro   rp   rq   rr   rs   r  r  r  r  r  px1py1px2py2rM  vxvys   &                          r   
export_dxfr  W  s   ::DIH 5x;7OQYZ\^_Q`Hx95x87LGhq'2HROE
 5Fhq'*HQ,>QQYZ\^_Q`bjklnzb{|} 	LL(1h'!X)>I@VX`abdnXopqj'>7DVWGw'BI 'nu7)$U+Q!Y_!=xE?RRr'*S018B?HRQTDUQ4::<../
 	
 ,1'Cc3{R'r)9Cs{R'r)9Cc
S#Jc
S#Jc
SHLL(1l3Xa5QS[\^`cdl`mSnpxy{}~p  A  B"BhrbX7"C9RST # ,1 !0  
LL(1h'!U);<=OOBGGENWO5Kr   c               $    V ^8  d   QhRRRRRR/# )r   r~  rE   rF   r   rG   r   )r   s   "r   r   r   z  s'     r r~ r> rNn rr   c                    V R ,          pVR,          p\        ^ \        V4      ^4       Uu. uF2  p\        W2V,          W$^,           ,          W$^,           ,          34      NK4  	  up# u upi )rM  rL   )r   r   rB   )r~  rF   r  r:   r   s   &&   r   matrix_mesh_verticesr  z  s`    *F()FX]^_adekalnoXpqXpSTOFAY1uv!e}$MNXpqqqs   8A&c               $    V ^8  d   QhRRRRRR/# )r   rd   rE   r?  r   r   ztuple[Path, dict[str, Any]]r   )r   s   "r   r   r     s'     P P P PUp Pr   c                  aa \         R ,          p. o. o/ p^ pV R,           EF  p\        S4      V8  dE   V R,          P                  VR,          / 4      pV\        VP                  R^ 4      4      ,          pKX  V R,          P                  VR,          4      pV'       d   VP                  R4      '       g   K  \        VR,          ,          P                  4       pWs9  d   \        V4      V\        V4      &   V\        V4      ,          p\        W4      p	\        S4      ^,           p
SP                  V	4       VR,          p\        ^ \        V4      ^4       F  p\        S4      V8  d%   V\        V4      V,
          ^,          ,          p EKm  SP                  WV,          ,           WV^,           ,          ,           WV^,           ,          ,           34       K  	  EK  	  R V3R llpR	 V3R
 llp\        P                  ! \        P                  4      P!                  4       pRV RV! 4        RV! 4        R2pVP#                  VRR7       VR\        S4      R\        S4      RVRVRR/3# )zroof_mount_platform_faceted.stprh   rg   ri   rI  rL  rN  c                   V ^8  d   QhRR/# r   r   r1   r   )r   s   "r   r   !export_step.<locals>.__annotate__  s     L L Lr   c                 4   < R P                  R S  4       4      # )rj  c              3  F   "   T F  w  rpR VR RVR RVR R2x  K  	  R# 5i)(z.6frj  )Nr   )r{   r?   r@   rA   s   &   r   r}   2export_step.<locals>.point_list.<locals>.<genexpr>  s/     KFq!Ac7!Ac7!Ac7!4Fs   !r  )r\   s   r   
point_listexport_step.<locals>.point_list  s    xxKFKKKr   c                   V ^8  d   QhRR/# r  r   )r   s   "r   r   r    s     ? ?s ?r   c                 4   < R P                  R S  4       4      # )rj  c              3  @   "   T F  w  rpR V RV RV R2x  K  	  R# 5i)r  rj  r  Nr   )r{   r  r  r  s   &   r   r}   1export_step.<locals>.face_list.<locals>.<genexpr>  s)     >WQ1!A3as!A3a(r  r  )facess   r   	face_listexport_step.<locals>.face_list  s    xx>>>>r   a  ISO-10303-21;
HEADER;
/* Patterned after the STEP files in the source STEP folder.
 * Existing source files use Autodesk Inventor 2025 / ST-DEVELOPER AP214 BREP.
 * This standalone export remains tessellated AP242 because it is generated from
 * mesh JSON without Inventor or a BREP geometry kernel.
 */

FILE_DESCRIPTION(
/* description */ ('Faceted/tessellated standalone assembly export'),
/* implementation_level */ '2;1');

FILE_NAME(
/* name */ 'roof_mount_platform_faceted.stp',
/* time_stamp */ 'az  ',
/* author */ ('StandalonePlatformEngine'),
/* organization */ ('Hart Export'),
/* preprocessor_version */ 'Standalone JSON/STP exporter',
/* originating_system */ 'StandalonePlatformEngine patterned after Autodesk Inventor 2025 STEP exports',
/* authorisation */ '');

FILE_SCHEMA (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF { 1 0 10303 442 1 1 4 }'));
ENDSEC;
DATA;
#1=APPLICATION_CONTEXT('configuration controlled 3d designs of mechanical parts and assemblies');
#2=APPLICATION_PROTOCOL_DEFINITION('international standard','ap242_managed_model_based_3d_engineering',2014,#1);
#3=CARTESIAN_POINT_LIST_3D('assembly points',(z9));
#4=TRIANGULATED_FACE_SET('assembly facets',#3,$,.T.,(a.  ),$);
#5=TESSELLATED_SHAPE_REPRESENTATION('ROOF_MOUNT_PLATFORM_FACETED',(#4),#6);
#6=GEOMETRIC_REPRESENTATION_CONTEXT(3) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#7)) GLOBAL_UNIT_ASSIGNED_CONTEXT((#8,#9,#10)) REPRESENTATION_CONTEXT('3D Context','Standalone export');
#7=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#8,'distance_accuracy_value','');
#8=(LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.));
#9=(NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.));
#10=(NAMED_UNIT(*) SOLID_ANGLE_UNIT() SI_UNIT($,.STERADIAN.));
ENDSEC;
END-ISO-10303-21;
r   r    trianglesWrittenpointsWrittentrianglesSkippedAfterLimitmaxTriangleskindzCfaceted/tessellated STEP AP242 patterned after source STEP metadata)r  r   rl   r   rn  ro  r&   r1   r  rp  r   rn   r   r   r   rs  rt  r-   )rd   r?  r   rv  skipped_trianglesrF   rD   r}  r~  transformedindex_offsetrN  r   r  r  	generatedr   r  r\   s   &&               @@r   export_stepr    s7   99D/1F(*E,.Jk**
u:&7#''
8(<bADTXXoq%A!BBw##Jx$89488J//!D$44==?	&)29)=Js9~&#i.)*4<6{Qk"y/q#g,*A5z]*!c'lQ&61%<<!LL,3\APQEN5RT`klopkpcqTqrs	 +! +,L L? ? X\\*446I + / 0:|n =66?k] 	C7$DJ 	OOD7O+CJV$&7U  r   c                    V ^8  d   QhRRRR/# )r   r(   r1   r   r   )r   s   "r   r   r     s     S S3 S3 Sr   c                l    R P                  R V P                  4        4       4      P                  R4      # )r   c              3  T   "   T F  qP                  4       '       d   TMR x  K   	  R# 5i)r  N)isalnum)r{   chs   & r   r}   "normalized_stem.<locals>.<genexpr>  s     G223.s   &(r  )r  r  r   r#  s   &r   normalized_stemr    s(    77GGGMMcRRr   c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   r     s     : : :N :r   c                  a \         R ,          p\        VP                  R4      4      pV Uu/ uF  q3P                  P	                  4       VbK  	  ppV Uu/ uF  p\        VP                  4      VbK  	  ppR.p^ p^ p\        V R,          P                  4       4       EFF  w  rV
P                  RR4      pV
P                  RR4      p\        V4      P                  \        V4      P                  V	P                  R4      .pRpRpV F<  pVP	                  4       V9   g   K  VVP	                  4       ,          pR	pV^,          p M	  V'       g   V UUu. uF8  p\        V4      P                  R
4       F  p\        V4      ^8  g   K  VNK  	  K:  	  ppp. pV FJ  p\        VP                  4      o\        V3R lV 4       4      pV'       g   K7  VP                  VV34       KL  	  V'       d/   VP                  R R7       V^ ,          ^,          pRpV^,          pTP                  RP                  \         P"                  ! V	4      \         P"                  ! V4      \         P"                  ! V4      \         P"                  ! V'       d/   \%        VP'                  \         4      4      P)                  RR4      MR4      \         P"                  ! V4      .4      R,           4       EKI  	  \*        R,          pVP-                  RP                  V4      RR7       RR R\        V4      RVRVR\/        V4      RR/# u upi u upi u uppi )STEPz*.stpz1partId,partName,sourcePath,matchedStep,matchKind
rg   r  r   r  .Nexactr  c              3  8   <"   T F  qS9   g   K  ^x  K  	  R# 5ir   r   )r{   token
normalizeds   & r   r}   .export_step_source_manifest.<locals>.<genexpr>  s     I6%j5HAA6s   
c                N    V ^ ,          ) \        V ^,          P                  4      3# r>   )r   stemrS  s   &r   rU  -export_step_source_manifest.<locals>.<lambda>  s    tAwhDGLL8I-Jr   rW  fuzzyrj  r3   r4   r  zstep_source_matches.csvr   r    stepLibraryFoldersourceStepFileCountexactPartMatchesfuzzyPartMatchesmatchReportr  zExisting STEP files are AP214 BREP part exports. Current assembly STP is AP242 tessellated; this report identifies reusable source STEP candidates for future BREP-quality assembly export.)r6   r  globr  r  r  r  rl   r   rstripr  r   rl  rn   rr  r  r"   r.   r1   r5   r7   r  r-   r8   )rd   step_dir
step_filesr   by_exactby_normalizedr   exact_countfuzzy_countpart_idrD   	part_namesource_pathstemsmatched
match_kindr  r  tokensscoredscoremanifest_pathr  s   &                     @r   export_step_source_manifestr    s   f}Hg./J4>?JD		!4'JH?BLM*$_TYY/5*MM@ADKK 0 6 6 89HHVR(	hh|R0O  ""NN3

 
Dzz|x'"4::<0$
q   (-o?4;P;V;VWZ;[%_bch_imn_nee;[eFoF",TYY7
I6II5MM5$-0	 #
  JK )A,$
q HH

7#

9%

;'

PW3w22489AA$L]_`

:&  		
; :P !::MRWWT]W=Vs:KKx.  N a @M, ps   #L8L=/M	
Mc                    V ^8  d   QhRRRR/# )r   dxf_pathr   r   rE   r   )r   s   "r   r   r     s     W Wd W~ Wr   c                   \         R ,          p\         R,          p\        R,          p\        R4      \        R4      \        R4      .pRA F  p\        P                  ! RV.RRR7      pVP
                  ^ 8X  g   K1  VP                  P                  4        Uu. uF3  qwP                  4       '       g   K  \        VP                  4       4      NK5  	  upVR	&   K  	  \        R
 V 4       R4      pV'       Ed   \         R,          p	\         R,          p
V	P                  4       '       d   \        P                  ! V	4       V
P                  4       '       d   \        P                  ! V
4       V	P                  RRR7       V
P                  RRR7       WP                  ,          p\        P                  ! W4       VP                  4       '       d   VP!                  4        \#        V4      \#        V	4      \#        V
4      RRRRR.p\        P                  ! V\        RR^R7      pWP$                   R2,          pVP                  4       '       dy   VP'                  4       P(                  ^ 8  dZ   \        P                  ! W4       RRR\#        V4      RRR\+        V4      RVP'                  4       P(                  R\+        V 4      RR/# RVP
                  RVR VP                  RBR R!VP,                  RBR /.pM. p\        R"4      \        R#4      \        R$4      .p\        P                  ! RR%.RRR7      pVP
                  ^ 8X  d\   VP                  P                  4        Uu. uF3  qwP                  4       '       g   K  \        VP                  4       4      NK5  	  upVR	&   \        R& V 4       R4      pV'       Ed   VP                  4       '       d   VP!                  4        VP                  RRR7       VP/                  R'P1                  R(RR)RR*R+\#        V4      R,R-R..
4      R/R07       \#        V4      R1R2\#        V4      R3\#        V 4      R4\#        V4      R5R6.
\#        V4      R3\#        V 4      R4\#        V4      R5R6..p. pV F  p\        P                  ! V\        RR^R7      pVP                  4       '       dX   VP'                  4       P(                  ^ 8  d9   RRR\#        V4      RRR\+        V4      RVP'                  4       P(                  /u # VP3                  RVP
                  R VP                  RBR R!VP,                  RBR /4       K  	  RRR\#        V4      RR7R8R9R:VV,           /# V'       d   RRR\#        V4      RR7R8R;R:V/# \         R<,          pVP/                  R=R>R07       RR7RR7R8R?R@\+        V4      /# u upi u upi )Cz roof_mount_platform_drawings.dwgzdxf_to_dwg_accoreconsole.scrz.accoreconsole-profilezAC:\Program Files\ODA\ODAFileConverter 27.1.0\ODAFileConverter.exezAC:\Program Files\ODA\ODAFileConverter 27.0.0\ODAFileConverter.exez:C:\Program Files\ODA\ODAFileConverter\ODAFileConverter.exe	where.exeTcapture_outputr   Nr   Nc              3  T   "   T F  qP                  4       '       g   K  Vx  K   	  R # 5ir   r|  r{   r   s   & r   r}   "try_convert_dwg.<locals>.<genexpr>#  s     <kkm   (
(Noda_dwg_inputoda_dwg_outputrB  ACAD2018DWG0r  z*.dxf)cwdr  r   timeoutz.dwg	available	converter
dwgWrittenfilebytesr  methodzODA File Converter
returncodecommandstdoutstderrzGC:\Program Files\Autodesk\DWG TrueView 2025 - English\accoreconsole.exez8C:\Program Files\Autodesk\AutoCAD 2025\accoreconsole.exez8C:\Program Files\Autodesk\AutoCAD 2024\accoreconsole.exeaccoreconsolec              3  T   "   T F  qP                  4       '       g   K  Vx  K   	  R # 5ir   r|  r  s   & r   r}   r   \  s     BLDKKM44Lr!  r  FILEDIACMDDIAz_-SAVEAS2018_QUITYr   r  r    z/isolatezroof-platform-exportz/iz/sz/lzen-USFr  zODWG TrueView accoreconsole was found, but conversion failed before writing DWG.errorszGODA File Converter was found, but conversion failed before writing DWG.zDWG_EXPORT_NOTE.txtzTrue DWG writing is not available in this standalone environment.
Use roof_mount_platform_drawings.dxf directly in AutoCAD, or install/configure ODA File Converter to convert DXF to DWG without Inventor.
r   zfGenerated DXF instead. Install/configure ODA File Converter or another DWG writer for true DWG output.noteFile)zODAFileConverter.exeODAFileConverteriH)r  r6   r   
subprocessrunr/  r1  
splitlinesr   nextr}  shutilrmtreeri  r  copy2r  r1   r  statst_sizer8   r2  r-   r  rn   )r  dwg_pathscript_pathprofile_dir	oda_pathsconverter_namefoundr   oda	oda_input
oda_output
input_copyr0  result	converted
oda_errorsaccore_pathsaccoreattemptsr:  	note_paths   &                    r   try_convert_dwgrW    sr   >>H==K11K 	QRQRJKI
 G^<TX\]q <ALL<S<S<Uf<UDYcYcYe/T$**,/<UfIbM G
 <<d
CC
s0	"22
MM)$MM*%t45.
X*??OO H	N
O	
 T$T[^_MM?$!77	).."2":":Q">LL-TSXd*00(8,.  &++wfmmEF+fmmEF+	
 
 
 	WXHIHIL NNK9$UYZE1;@<<;R;R;Te;T4XbXbXd.D.;TeRBLBDIFv??OO$6IIH   	 	
" F&K HK  [$HtS5EtWU
 G^^GdQU_bcF  X]]_%<%<q%@V $HX.X]]_44  MMf//&--/&--/     V%ej6)
 	
 S%]j
 	
 22I	V   	UexHY'	 K gr fs   V83V8V=9V=c                   V ^8  d   QhRR/# r   r   rE   r   )r   s   "r   r   r     s      . r   c                 r   \        R 4      \        R4      \        R4      .p R F  p\        P                  ! RV.RRR7      pVP                  ^ 8X  g   K1  VP                  P                  4        Uu. uF3  q3P                  4       '       g   K  \        VP                  4       4      NK5  	  upV R&   K  	  \        R V  4       R4      pV'       g   R	R
/# \        P                  ! \        V4      R.RR^R7      pR	RR\        V4      RVP                  ;'       g    VP                  P                  4       /# u upi )z.C:\Program Files\gs\gs10.07.1\bin\gswin64c.exez.C:\Program Files\gs\gs10.06.0\bin\gswin64c.exez.C:\Program Files\gs\gs10.05.1\bin\gswin64c.exer  Tr  r  c              3  T   "   T F  qP                  4       '       g   K  Vx  K   	  R # 5ir   r|  r  s   & r   r}   #find_ghostscript.<locals>.<genexpr>  s     <
kkmtt
r!  Nr)  Fz	--version)r  r   r(  
executableversion)zgswin64c.exezgswin32c.exezgs.exe)
r   r=  r>  r/  r1  r?  r   r@  r1   r2  )
candidatesr]  rK  r   gsrP  s         r   find_ghostscriptra    s   >?>?>?J
 A
Z8TXYq =B\\=T=T=Vg=VTZdZdZf0d4::<0=VgJrN A
 
<
<d	CBU##^^SWk24d\^_FTc"gFMM22V]]99;  hs   0D4D4c                   V ^8  d   QhRR/# rY  r   )r   s   "r   r   r     s     ' 'N 'r   c                    \         P                  R R R7       \        \        4      p \	        V 4      p\        V 4      p\        V 4      w  r4\        V 4      p\        V4      p\        4       pRR R\        P                  ! \        P                  4      P                  4       RRR\        \        4      RR\        V4      R	\        V4      R
\        V4      /RTRTRTRTR\         R,          \         R,          3 Uu. uF&  pVP#                  4       '       g   K  \        V4      NK(  	  upR. RO/p	VP%                  R4      '       d+   VP%                  R4      '       d   VR,          V	R,          R&   \'        \(        V	4       V	# u upi )TrB  okgeneratedAtinventorUsedFsourceCatalogfilespdfDrawingsdxfDrawingsstpFacetedAssemblydwgghostscriptr   stepSources
pdfSourcesry  rz  r  r+  r,  dwgDrawings)zPDF drawings are composed from the existing source PDF sheets when available; this preserves the original drawing layout far more closely than synthetic mesh projection.zMDXF drawings are still generated from projected occurrence bounding geometry.zSTP header/metadata is patterned after the source STEP folder, but geometry is faceted/tessellated from the current mesh catalog.zExisting STEP files are AP214 BREP part exports and are reported in step_source_matches.csv for future source-based BREP assembly export.zFTrue DWG output requires a DWG writer/converter; Inventor is not used.)r  ri  r&   CATALOG_PATHr  r  r  r  rW  ra  r   r   r   rs  rt  r8   r  r}  rl   r/   MANIFEST_PATH)
rd   pdf_pathr  	step_path
step_statsstep_sourcesrl  rm  r   manifests
             r   
export_allrx    sY   TD1%G'"H'"H'0I.w7L
(
#C"$Kdx||HLL1;;=,/8H-8H- (9"5

 	s{
|'*4nG]6]^
^{{} HTN^

 	 
'H6 ww|+.v;-(}h'O!
s   7E>*E>*c                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   r     s      c r   c                 \    \        4       p \        \        P                  ! V ^R7      4       ^ # )r   r+   )rx  printr"   r.   )rw  s    r   mainr|    s    |H	$**Xa
()r   __main__))r   r   )r   r   )r   r   )r   r   )r   r   )r      )   r   )r  r   )r  r~  )r!  r   )r!  r   )r!  r~  )r!  )   )r   )Ni q r-  r   )]
__future__r   r"   r  rA  r=  sysr   r   pathlibr   typingr   r  PILr   r	   reportlab.libr
   reportlab.lib.pagesizesr   r   r   r   reportlab.pdfgenr   __file__ro  rC  r6   rn  r  rh  r  rq  rr  MAX_STEP_TRIANGLESVIRTUAL_SHEETr  rD  rE  r&   r/   r8   rB   rQ   rZ   rb   rt   r   r   r   r  r   r   r   r   r   r  r  r$  r-  r2  r9  r  r  r  r  r  r  r  r  r  r  r$  r)  rL  rf  rv  r  r  r  r  r  r  r  r  rW  ra  rx  r|  __name__
SystemExitr   r   r   <module>r     s    "     
 '        9 9 # H~''*''*4%%	1
m+%-HH33 ""a =#33a =#338C:	Y./	*	
<<~	L7	@0$DI
M
F
K\

M&XRLBK**';T!lH.>.4!3H,@F(VD
  Fr ?Q PfS:zWt.'T z
TV
 r   