import struct, math, numpy as np from PIL import Image data=open("content/VIDEO/GEO/BLX_COP.BGF","rb").read() verts=[]; faces=[] def addpoly(idx,b): for k in range(1,len(idx)-1): faces.append((b+idx[0],b+idx[k],b+idx[k+1])) curbase=[0] def parse(p,end): while p+3<=end: tw=struct.unpack_from("end:return ln=data[p] if lw==1 else(struct.unpack_from("end:return if cid==0x88: curbase[0]=len(verts) for i in range(ln//20): o=p+i*20; x,y,z=struct.unpack_from("=1: ppf=data[p]; n=(ln-1)//4 idx=[struct.unpack_from("=mxx or mny>=mxy:continue (x0,y0),(x1,y1),(x2,y2)=pts den=((y1-y2)*(x0-x2)+(x2-x1)*(y0-y2)) if abs(den)<1e-9:continue ys2,xs2=np.mgrid[mny:mxy+1,mnx:mxx+1];xf=xs2+.5;yf=ys2+.5 l0=((y1-y2)*(xf-x2)+(x2-x1)*(yf-y2))/den;l1=((y2-y0)*(xf-x2)+(x0-x2)*(yf-y2))/den;l2=1-l0-l1 m=(l0>=0)&(l1>=0)&(l2>=0) img[ys2[m],xs2[m]]=1 return (img*255).astype(np.uint8) # eye near origin (rear), try forward -Z and +Z, and from just inside each end tiles=[] for name,eye,look in (("O->-Z",(0,-0.3,0),(0,-0.3,-4)),("O->+Z",(0,-0.3,0),(0,-0.3,4)), ("rear-Z",(0,-0.3,-0.9),(0,-0.3,-4)),("rear+Z",(0,-0.3,-3.7),(0,-0.3,-1))): c=cover(eye,look); tiles.append(np.stack([c,c,c],axis=-1)) Image.fromarray(np.concatenate(tiles,axis=1)).save("scratchpad/cop_cover.png") print("saved cop_cover.png [O->-Z | O->+Z | rear-Z | rear+Z] (white=covered by a face, black=open)")