(volume, file_name, **kwargs)
Exports volume(s) as volume mesh (vmesh) files.

    :param volume: volume(s) to be exported
    :type volume: abstract.Volume
    :param file_name: name of the output file
    :type file_name: str
    :raises GeomdlException: an error occurred writing the file
Exports volume(s) as volume mesh (vmesh) files.
Exports volume ( s ) as volume mesh ( vmesh ) files .
def export_vmesh(volume, file_name, **kwargs):
    """ Exports volume(s) as volume mesh (vmesh) files.

    :param volume: volume(s) to be exported
    :type volume: abstract.Volume
    :param file_name: name of the output file
    :type file_name: str
    :raises GeomdlException: an error occurred writing the file
    """
    if volume.pdimension != 3:
        raise exch.GeomdlException("Can only export volumes")

    # Get keyword arguments
    decimals = kwargs.get('decimals', 18)

    # Split file name and extension
    fname, fext = os.path.splitext(file_name)

    # Enumerate file name only if we are working with multiple volumes
    numerate_file = True if len(volume) > 1 else False

    for idx, v in enumerate(volume):
        if v.rational:
            pts = v.ctrlptsw
        else:
            pts = compatibility.combine_ctrlpts_weights(v.ctrlpts)
        line = str(v.dimension) + "\n"
        line += str(v.degree_u) + " " + str(v.degree_v) + " " + str(v.degree_w) + "\n"
        line += str(v.ctrlpts_size_u) + " " + str(v.ctrlpts_size_v) + " " + str(v.ctrlpts_size_w) + "\n"
        line += " ".join([("{:." + str(decimals) + "f}").format(k) for k in v.knotvector_u]) + "\n"
        line += " ".join([("{:." + str(decimals) + "f}").format(k) for k in v.knotvector_v]) + "\n"
        line += " ".join([("{:." + str(decimals) + "f}").format(k) for k in v.knotvector_w]) + "\n"
        # Convert control points into (x, y, z, w)
        ctrlptsw = []
        for w in range(v.ctrlpts_size_w):
            srfpts = pts[(w * v.ctrlpts_size_u * v.ctrlpts_size_v):((w + 1) * v.ctrlpts_size_u * v.ctrlpts_size_v)]
            # Flip control points
            ctrlptsw += compatibility.flip_ctrlpts(srfpts, v.ctrlpts_size_u, v.ctrlpts_size_v)
        # Convert control points into (x, y, z, w) format
        ctrlptsw = compatibility.generate_ctrlpts_weights(ctrlptsw)
        for ptw in ctrlptsw:
            line += " ".join([("{:." + str(decimals) + "f}").format(p) for p in ptw]) + "\n"
        # Open or closed?
        line += "1\n"

        # Write to file
        fname_curr = fname + "." + str(idx + 1) if numerate_file else fname
        exch.write_file(fname_curr + fext, line)
def export_vmesh ( volume , file_name , * * kwargs ) : if volume . pdimension != 3 : raise exch . GeomdlException ( "Can only export volumes" ) # Get keyword arguments decimals = kwargs . get ( 'decimals' , 18 ) # Split file name and extension fname , fext = os . path . splitext ( file_name ) # Enumerate file name only if we are working with multiple volumes numerate_file = True if len ( volume ) > 1 else False for idx , v in enumerate ( volume ) : if v . rational : pts = v . ctrlptsw else : pts = compatibility . combine_ctrlpts_weights ( v . ctrlpts ) line = str ( v . dimension ) + "\n" line += str ( v . degree_u ) + " " + str ( v . degree_v ) + " " + str ( v . degree_w ) + "\n" line += str ( v . ctrlpts_size_u ) + " " + str ( v . ctrlpts_size_v ) + " " + str ( v . ctrlpts_size_w ) + "\n" line += " " . join ( [ ( "{:." + str ( decimals ) + "f}" ) . format ( k ) for k in v . knotvector_u ] ) + "\n" line += " " . join ( [ ( "{:." + str ( decimals ) + "f}" ) . format ( k ) for k in v . knotvector_v ] ) + "\n" line += " " . join ( [ ( "{:." + str ( decimals ) + "f}" ) . format ( k ) for k in v . knotvector_w ] ) + "\n" # Convert control points into (x, y, z, w) ctrlptsw = [ ] for w in range ( v . ctrlpts_size_w ) : srfpts = pts [ ( w * v . ctrlpts_size_u * v . ctrlpts_size_v ) : ( ( w + 1 ) * v . ctrlpts_size_u * v . ctrlpts_size_v ) ] # Flip control points ctrlptsw += compatibility . flip_ctrlpts ( srfpts , v . ctrlpts_size_u , v . ctrlpts_size_v ) # Convert control points into (x, y, z, w) format ctrlptsw = compatibility . generate_ctrlpts_weights ( ctrlptsw ) for ptw in ctrlptsw : line += " " . join ( [ ( "{:." + str ( decimals ) + "f}" ) . format ( p ) for p in ptw ] ) + "\n" # Open or closed? line += "1\n" # Write to file fname_curr = fname + "." + str ( idx + 1 ) if numerate_file else fname exch . write_file ( fname_curr + fext , line )