def geomfile(self,iframe=0,verbose=False,topos=False,tag=''): """ create a geomview file from a body configuration Parameters ---------- iframe : int verbose : boolean topos : boolean tag : string """ cyl = geu.Geomoff('cylinder') pt = cyl.loadpt() if not topos: _filebody = str(iframe).zfill(4)+'body.list' else: _filebody = tag+'-body.list' filebody = pyu.getlong(_filebody,"geom") filestruc = pyu.getlong('DLR.off',"geom") fo = open(filebody,"w") fo.write("LIST\n") fo.write('{<'+filestruc+'}\n') if verbose: print ("LIST\n") for k,e in enumerate(self.g.edges()): e0 = e[0] e1 = e[1] if not topos: pA = self.d[:,e0,iframe].reshape(3,1) pB = self.d[:,e1,iframe].reshape(3,1) else: pA = self.topos[:,e0].reshape(3,1) pB = self.topos[:,e1].reshape(3,1) pM = (pA+pB)/2. T = geu.onbfromaxe(pA,pB) R = self.g[e0][e1]['radius'] Y = np.hstack((pM,pA,pB,pM+R*T[0,:,0].reshape(3,1),pM+R*T[0,:,1].reshape(3,1),pB+R*T[0,:,0].reshape(3,1))) A,B = geu.cylmap(Y) ptn = np.dot(A,pt.T)+B if not topos: _filename = 'edge'+str(k)+'-'+str(iframe)+'.off' else: _filename = tag+'-edge'+str(k)+'.off' filename = pyu.getlong(_filename,"geom") cyl.savept(ptn.T,_filename) fo.write('{<'+filename+'}\n') if verbose: print('{<'+filename+'}\n') fo.close()
def updbasis0(self,frameId=0,topos=True): """ update basis0 Parameters ---------- frameId : int default 0 topos : boolean default True Returns ------- self.basis0 : ndarray (nc,3,3) Notes ----- There are as many basis as cylinders (body graph edges) """ nc = len(self.g.edges()) # # basis0 : nc x 9 # self.basis0 = np.ndarray(shape=(nc,3,3)) for k,e in enumerate(self.g.edges()): e0 = e[0] e1 = e[1] if not topos: pA = self.d[:,e0,iframe].reshape(3,1) pB = self.d[:,e1,iframe].reshape(3,1) else: pA = self.topos[:,e0].reshape(3,1) pB = self.topos[:,e1].reshape(3,1) pM = (pA+pB)/2. T = geu.onbfromaxe(pA,pB) self.basis0[k,:,:] = T