Beispiel #1
0
    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()
Beispiel #2
0
    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