def subdivide_op(surfaces, spacing = None, inPlace = False, modelId = None):

    from Commands import parse_surface_pieces, check_number, parse_model_id
    plist = parse_surface_pieces(surfaces)
    if len(plist) == 0:
        raise CommandError, 'No surfaces specified'
    if spacing is None:
        raise CommandError, 'Must specify mesh spacing'
    check_number(spacing, 'spacing', positive = True)
    model_id = parse_model_id(modelId)
    if inPlace:
        s = None
    else:
        from _surface import SurfaceModel
        s = SurfaceModel()
        s.name = 'finer mesh'
        from chimera import openModels as om
        if model_id:
            id, subid = model_id
        else:
            id, subid = om.Default, om.Default
        om.add([s], baseId = id, subid = subid)
        s.openState.xform = plist[0].model.openState.xform
    from subdivide import subdivide
    for p in plist:
        np = subdivide(p, spacing, s)
        if np != p:
            np.save_in_session = True
Exemplo n.º 2
0
def scale_op(volumes,
             shift=0,
             factor=1,
             type=None,
             subregion='all',
             step=1,
             modelId=None):

    volumes = filter_volumes(volumes)
    check_number(shift, 'shift')
    check_number(factor, 'factor')
    if not type is None:
        import numpy as n
        types = {
            'int8': n.int8,
            'uint8': n.uint8,
            'int16': n.int16,
            'uint16': n.uint16,
            'int32': n.int32,
            'uint32': n.uint32,
            'float32': n.float32,
            'float64': n.float64,
        }
        if type in types:
            type = types[type]
        else:
            raise CommandError, ('Unknown data value type "%s", use %s' %
                                 (type, ', '.join(types.keys())))
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    modelId = parse_model_id(modelId)

    from scale import scaled_volume
    for v in volumes:
        scaled_volume(v, factor, shift, type, step, subregion, modelId)
def tube_shape(atoms,
               radius=1.0,
               bandLength=0.0,
               followBonds=False,
               divisions=15,
               segmentSubdivisions=10,
               color=(.745, .745, .745, 1),
               mesh=None,
               linewidth=1,
               modelName='tube',
               modelId=None):

    if len(atoms) == 0:
        raise CommandError, 'No atoms specified'
    check_number(radius, 'radius', nonnegative=True)
    check_number(bandLength, 'bandLength', nonnegative=True)
    check_number(divisions, 'divisions', positive=True)
    check_number(divisions, 'segmentSubdivisions', positive=True)
    check_number(linewidth, 'linewidth', nonnegative=True)
    from Commands import parse_rgba
    rgba = parse_rgba(color)
    model_id = parse_model_id(modelId)

    s = find_surface_model(model_id)
    from VolumePath import tube
    s, plist = tube.tube_through_atoms(atoms, radius, bandLength,
                                       segmentSubdivisions, divisions,
                                       followBonds, rgba, s, model_id)
    for p in plist:
        if mesh:
            p.displayStyle = p.Mesh
        p.lineThickness = linewidth
        p.save_in_session = True
    if s:
        s.name = modelName
Exemplo n.º 4
0
def tube_shape(atoms, radius = 1.0, bandLength = 0.0, followBonds = False,
               divisions = 15, segmentSubdivisions = 10,
               color = (.745,.745,.745,1), mesh = None, linewidth = 1,
               modelName = 'tube', modelId = None):

    if len(atoms) == 0:
        raise CommandError, 'No atoms specified'
    check_number(radius, 'radius', nonnegative = True)
    check_number(bandLength, 'bandLength', nonnegative = True)
    check_number(divisions, 'divisions', positive = True)
    check_number(divisions, 'segmentSubdivisions', positive = True)
    check_number(linewidth, 'linewidth', nonnegative = True)
    from Commands import parse_rgba
    rgba = parse_rgba(color)
    model_id = parse_model_id(modelId)

    s = find_surface_model(model_id)
    from VolumePath import tube
    s,plist = tube.tube_through_atoms(atoms, radius, bandLength,
                                      segmentSubdivisions, divisions,
                                      followBonds, rgba, s, model_id)
    for p in plist:
        if mesh:
            p.displayStyle = p.Mesh
        p.lineThickness = linewidth
        p.save_in_session = True
    if s:
        s.name = modelName
Exemplo n.º 5
0
def cover_op(volumes, atomBox = None, pad = 5.0, 
             box = None, x = None, y = None, z = None,
             fBox = None, fx = None, fy = None, fz = None,
             iBox = None, ix = None, iy = None, iz = None,
             step = 1, modelId = None):

    volumes = filter_volumes(volumes)
    check_number(pad, 'pad')

    if not atomBox is None and len(atomBox) == 0:
        raise CommandError, 'No atoms specified'
    box = parse_box(box, x, y, z, 'box', 'x', 'y', 'z')
    fBox = parse_box(fBox, fx, fy, fz, 'fBox', 'fx', 'fy', 'fz')
    iBox = parse_box(iBox, ix, iy, iz, 'iBox', 'ix', 'iy', 'iz')
    bc = len([b for b in (box, fBox, iBox, atomBox) if b])
    if bc == 0:
        raise CommandError, 'Must specify box to cover'
    if bc > 1:
        raise CommandError, 'Specify covering box in one way'

    step = parse_step(step, require_3_tuple = True)
    modelId = parse_model_id(modelId)

    from VolumeViewer import volume, volume_from_grid_data
    for v in volumes:
        g = v.grid_data(subregion = 'all', step = step, mask_zone = False)
        ijk_min, ijk_max = cover_box_bounds(v, step,
                                            atomBox, pad, box, fBox, iBox)
        cg = volume.map_from_periodic_map(g, ijk_min, ijk_max)
        cv = volume_from_grid_data(cg, model_id = modelId)
        cv.copy_settings_from(v, copy_region = False)
        cv.show()
Exemplo n.º 6
0
def scale_op(volumes, shift = 0, factor = 1, type = None,
              subregion = 'all', step = 1, modelId = None):

    volumes = filter_volumes(volumes)
    check_number(shift, 'shift')
    check_number(factor, 'factor')
    if not type is None:
        import numpy as n
        types = {'int8': n.int8,
                 'uint8': n.uint8,
                 'int16': n.int16,
                 'uint16': n.uint16,
                 'int32': n.int32,
                 'uint32': n.uint32,
                 'float32': n.float32,
                 'float64': n.float64,
                 }
        if type in types:
            type = types[type]
        else:
            raise CommandError, ('Unknown data value type "%s", use %s'
                                 % (type, ', '.join(types.keys())))
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    modelId = parse_model_id(modelId)

    from scale import scaled_volume
    for v in volumes:
        scaled_volume(v, factor, shift, type, step, subregion, modelId)
Exemplo n.º 7
0
def parse_offset(offset):

    from Commands import check_number, parse_floats
    if isinstance(offset, (basestring,tuple,list)):
        o1, o2, n = parse_floats(offset, 'offset', 3)
        if n <= 1:
            raise CommandError, 'Offset count must be greater than 1'
        offset = [o1 + (o2-o1)*float(i)/(n-1) for i in range(n)]
    else:
        check_number(offset, 'offset')
    return offset
Exemplo n.º 8
0
def parse_offset(offset):

    from Commands import check_number, parse_floats
    if isinstance(offset, (basestring, tuple, list)):
        o1, o2, n = parse_floats(offset, 'offset', 3)
        if n <= 1:
            raise CommandError, 'Offset count must be greater than 1'
        offset = [o1 + (o2 - o1) * float(i) / (n - 1) for i in range(n)]
    else:
        check_number(offset, 'offset')
    return offset
Exemplo n.º 9
0
def gaussian_op(volumes, sDev=1.0, subregion='all', step=1, modelId=None):

    volumes = filter_volumes(volumes)
    check_number(sDev, 'sDev', positive=True)
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    modelId = parse_model_id(modelId)

    from gaussian import gaussian_convolve
    for v in volumes:
        gaussian_convolve(v, sDev, step, subregion, modelId)
Exemplo n.º 10
0
def gaussian_op(volumes, sDev = 1.0,
                subregion = 'all', step = 1, modelId = None):

    volumes = filter_volumes(volumes)
    check_number(sDev, 'sDev', positive = True)
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    modelId = parse_model_id(modelId)

    from gaussian import gaussian_convolve
    for v in volumes:
        gaussian_convolve(v, sDev, step, subregion, modelId)
Exemplo n.º 11
0
def boxes_op(volumes, markers, size = 0, useMarkerSize = False,
             subregion = 'all', step = 1, modelId = None):

    volumes = filter_volumes(volumes)
    check_number(size, 'size')
    if size <= 0 and not useMarkerSize:
        raise CommandError, 'Must specify size or enable useMarkerSize'
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    modelId = parse_model_id(modelId)

    from boxes import boxes
    for v in volumes:
        boxes(v, markers, size, useMarkerSize, step, subregion, modelId)
def cylinder_shape(radius=10.0,
                   height=40.0,
                   center=None,
                   rotation=None,
                   qrotation=None,
                   coordinateSystem=None,
                   divisions=72,
                   color=(.745, .745, .745, 1),
                   mesh=False,
                   linewidth=1,
                   caps=False,
                   slab=None,
                   modelName='cylinder',
                   modelId=None):

    check_number(radius, 'radius', nonnegative=True)
    check_number(height, 'height', nonnegative=True)
    check_number(divisions, 'divisions', positive=True)
    check_number(linewidth, 'linewidth', nonnegative=True)
    model_id = parse_model_id(modelId)

    nz, nc = cylinder_divisions(radius, height, divisions)
    varray, tarray = cylinder_geometry(radius, height, nz, nc, caps)
    edge_mask = None

    show_surface(varray, tarray, edge_mask, color, mesh, linewidth, center,
                 rotation, qrotation, coordinateSystem, slab, model_id,
                 modelName)
Exemplo n.º 13
0
def morph_op(volumes, frames = 25, start = 0, playStep = 0.04,
             playDirection = 1, playRange = None, addMode = False,
             constantVolume = False, scaleFactors = None,
             hideOriginalMaps = True, subregion = 'all', step = 1,
             modelId = None):

    volumes = filter_volumes(volumes)
    check_number(frames, 'frames', int, nonnegative = True)
    check_number(start, 'start')
    check_number(playStep, 'playStep', nonnegative = True)
    if playRange is None:
        if addMode:
            prange = (-1.0,1.0)
        else:
            prange = (0.0,1.0)
    else:
        prange = parse_floats(playRange, 'playRange', 2)
    check_number(playDirection, 'playDirection')
    sfactors = parse_floats(scaleFactors, 'scaleFactors', len(volumes))
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    modelId = parse_model_id(modelId)
    vs = [tuple(v.matrix_size(step = step, subregion = subregion))
          for v in volumes]
    if len(set(vs)) > 1:
        sizes = ' and '.join([str(s) for s in vs])
        raise CommandError, "Volume grid sizes don't match: %s" % sizes
    from MorphMap import morph_maps
    morph_maps(volumes, frames, start, playStep, playDirection, prange,
               addMode, constantVolume, sfactors,
               hideOriginalMaps, subregion, step, modelId)
Exemplo n.º 14
0
def subdivide_op(surfaces, spacing=None, inPlace=False, modelId=None):

    from Commands import check_number, parse_model_id
    if len(surfaces) == 0:
        raise CommandError('No surfaces specified')
    if spacing is None:
        raise CommandError('Must specify mesh spacing')
    check_number(spacing, 'spacing', positive=True)
    plist = surfaces
    s = None if inPlace else new_surface('finer mesh', plist[0].model, modelId)
    from subdivide import subdivide
    for p in plist:
        np = subdivide(p, spacing, s)
        if np != p:
            np.save_in_session = True
Exemplo n.º 15
0
def contact_area(operation,
                 surf1,
                 surf2,
                 distance,
                 show=True,
                 color=(1, 0, 0, 1),
                 offset=1,
                 slab=None,
                 smooth=False,
                 optimize=True):

    plist = []
    import Surface
    for spec in (surf1, surf2):
        s = parse_object_specifier(spec, 'surface')
        p = Surface.selected_surface_pieces(s, include_outline_boxes=False)
        if len(p) == 0:
            raise CommandError('%s has no surface pieces' % spec)
        elif len(p) > 1:
            raise CommandError('%s has %d surface pieces, require 1' %
                               (spec, len(p)))
        plist.append(p[0])
    p1, p2 = plist

    from Commands import parse_color
    color = parse_color(color)
    if not show:
        color = None

    from Commands import check_number
    check_number(offset, 'offset')

    if not slab is None:
        if isinstance(slab, (float, int)):
            slab = (-0.5 * slab, 0.5 * slab)
        else:
            from Commands import parse_floats
            slab = parse_floats(slab, 'slab', 2)
        offset = None

    import contactarea as c
    area = c.contact_area(p1, p2, distance, color, offset, slab, smooth,
                          optimize)

    from chimera import replyobj
    replyobj.info('Contact area on %s within distance %.4g\nof %s = %.4g\n' %
                  (p1.model.name, distance, p2.model.name, area))
    replyobj.status('Contact area = %.4g' % area)
Exemplo n.º 16
0
def octant_complement_op(volumes, center = None, iCenter = None,
              subregion = 'all', step = 1, inPlace = False,
              fillValue = 0, modelId = None):

    volumes = filter_volumes(volumes)
    center = parse_floats(center, 'center', 3)
    iCenter = parse_floats(iCenter, 'iCenter', 3)
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    check_in_place(inPlace, volumes)
    check_number(fillValue, 'fillValue')
    modelId = parse_model_id(modelId)
    outside = False
    for v in volumes:
        octant_operation(v, outside, center, iCenter, subregion, step,
                         inPlace, fillValue, modelId)
Exemplo n.º 17
0
def median_op(volumes, binSize = 3, iterations = 1,
              subregion = 'all', step = 1, modelId = None):

    volumes = filter_volumes(volumes)
    check_number(iterations, 'iterations', positive = True)
    binSize = parse_step(binSize, 'binSize', require_3_tuple = True)
    for b in binSize:
        if b <= 0 or b % 2 == 0:
            raise CommandError, 'Bin size must be positive odd integer, got %d' % b
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    modelId = parse_model_id(modelId)

    from median import median_filter
    for v in volumes:
        median_filter(v, binSize, iterations, step, subregion, modelId)
Exemplo n.º 18
0
def tile(models, columns = None, spacingFactor = 1.0,
         independentRotation = True, viewAll = True):

    from Commands import CommandError, check_number
    if len(models) == 0:
      raise CommandError, 'No models specified'
    check_number(columns, 'columns', type = int, allow_none = True,
                 positive = True)
    check_number(spacingFactor, 'spacingFactor')

    import base
    base.tile(models, spacingFactor, columns, viewAll)

    if independentRotation:
      from chimera import openModels
      openModels.cofrMethod = openModels.Independent
Exemplo n.º 19
0
def tile(models,
         columns=None,
         spacingFactor=1.0,
         independentRotation=True,
         viewAll=True):

    from Commands import CommandError, check_number
    if len(models) == 0:
        raise CommandError, 'No models specified'
    check_number(columns, 'columns', type=int, allow_none=True, positive=True)
    check_number(spacingFactor, 'spacingFactor')

    import base
    base.tile(models, spacingFactor, columns, viewAll)

    if independentRotation:
        from chimera import openModels
        openModels.cofrMethod = openModels.Independent
Exemplo n.º 20
0
def cover_op(volumes,
             atomBox=None,
             pad=5.0,
             box=None,
             x=None,
             y=None,
             z=None,
             fBox=None,
             fx=None,
             fy=None,
             fz=None,
             iBox=None,
             ix=None,
             iy=None,
             iz=None,
             step=1,
             modelId=None):

    volumes = filter_volumes(volumes)
    check_number(pad, 'pad')

    if not atomBox is None and len(atomBox) == 0:
        raise CommandError, 'No atoms specified'
    box = parse_box(box, x, y, z, 'box', 'x', 'y', 'z')
    fBox = parse_box(fBox, fx, fy, fz, 'fBox', 'fx', 'fy', 'fz')
    iBox = parse_box(iBox, ix, iy, iz, 'iBox', 'ix', 'iy', 'iz')
    bc = len([b for b in (box, fBox, iBox, atomBox) if b])
    if bc == 0:
        raise CommandError, 'Must specify box to cover'
    if bc > 1:
        raise CommandError, 'Specify covering box in one way'

    step = parse_step(step, require_3_tuple=True)
    modelId = parse_model_id(modelId)

    from VolumeViewer import volume, volume_from_grid_data
    for v in volumes:
        g = v.grid_data(subregion='all', step=step, mask_zone=False)
        ijk_min, ijk_max = cover_box_bounds(v, step, atomBox, pad, box, fBox,
                                            iBox)
        cg = volume.map_from_periodic_map(g, ijk_min, ijk_max)
        cv = volume_from_grid_data(cg, model_id=modelId)
        cv.copy_settings_from(v, copy_region=False)
        cv.show()
Exemplo n.º 21
0
def boxes_op(volumes,
             markers,
             size=0,
             useMarkerSize=False,
             subregion='all',
             step=1,
             modelId=None):

    volumes = filter_volumes(volumes)
    check_number(size, 'size')
    if size <= 0 and not useMarkerSize:
        raise CommandError, 'Must specify size or enable useMarkerSize'
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    modelId = parse_model_id(modelId)

    from boxes import boxes
    for v in volumes:
        boxes(v, markers, size, useMarkerSize, step, subregion, modelId)
Exemplo n.º 22
0
def median_op(volumes,
              binSize=3,
              iterations=1,
              subregion='all',
              step=1,
              modelId=None):

    volumes = filter_volumes(volumes)
    check_number(iterations, 'iterations', positive=True)
    binSize = parse_step(binSize, 'binSize', require_3_tuple=True)
    for b in binSize:
        if b <= 0 or b % 2 == 0:
            raise CommandError, 'Bin size must be positive odd integer, got %d' % b
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    modelId = parse_model_id(modelId)

    from median import median_filter
    for v in volumes:
        median_filter(v, binSize, iterations, step, subregion, modelId)
Exemplo n.º 23
0
def octant_complement_op(volumes,
                         center=None,
                         iCenter=None,
                         subregion='all',
                         step=1,
                         inPlace=False,
                         fillValue=0,
                         modelId=None):

    volumes = filter_volumes(volumes)
    center = parse_floats(center, 'center', 3)
    iCenter = parse_floats(iCenter, 'iCenter', 3)
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    check_in_place(inPlace, volumes)
    check_number(fillValue, 'fillValue')
    modelId = parse_model_id(modelId)
    outside = False
    for v in volumes:
        octant_operation(v, outside, center, iCenter, subregion, step, inPlace,
                         fillValue, modelId)
def sphere_shape(radius=10.0,
                 center=None,
                 rotation=None,
                 qrotation=None,
                 coordinateSystem=None,
                 divisions=72,
                 color=(.745, .745, .745, 1),
                 mesh=False,
                 linewidth=1,
                 slab=None,
                 modelName=None,
                 modelId=None):

    try:
        r = parse_floats(radius, 'radius', 3)
    except CommandError:
        check_number(radius, 'radius', nonnegative=True)
        r = (radius, radius, radius)
    check_number(divisions, 'divisions', positive=True)
    check_number(linewidth, 'linewidth', nonnegative=True)
    model_id = parse_model_id(modelId)

    varray, tarray = icosahedral_geometry(1.0, divisions, sphere_factor=1)
    for a in range(3):
        varray[:, a] *= r[a]
    edge_mask = None

    if modelName is None:
        modelName = 'sphere' if r[1] == r[0] and r[2] == r[0] else 'ellipsoid'

    show_surface(varray, tarray, edge_mask, color, mesh, linewidth, center,
                 rotation, qrotation, coordinateSystem, slab, model_id,
                 modelName)
Exemplo n.º 25
0
def sphere_shape(radius = 10.0, center = None, rotation = None,
                 qrotation = None, coordinateSystem = None,
                 divisions = 72,
                 color = (.745,.745,.745,1), mesh = False, linewidth = 1,
                 slab = None, modelName = None, modelId = None):

    try:
        r = parse_floats(radius, 'radius', 3)
    except CommandError:
        check_number(radius, 'radius', nonnegative = True)
        r = (radius, radius, radius)
    check_number(divisions, 'divisions', positive = True)
    check_number(linewidth, 'linewidth', nonnegative = True)
    model_id = parse_model_id(modelId)

    varray, tarray = icosahedral_geometry(1.0, divisions, sphere_factor = 1)
    for a in range(3):
        varray[:,a] *= r[a]
    edge_mask = None

    if modelName is None:
        modelName = 'sphere' if r[1] == r[0] and r[2] == r[0] else 'ellipsoid'

    show_surface(varray, tarray, edge_mask, color, mesh, linewidth,
                 center, rotation, qrotation, coordinateSystem,
                 slab, model_id, modelName)
def icosahedron_shape(radius=10.0,
                      center=None,
                      rotation=None,
                      qrotation=None,
                      coordinateSystem=None,
                      divisions=72,
                      color=(.745, .745, .745, 1),
                      mesh=None,
                      linewidth=1,
                      sphereFactor=0.0,
                      orientation='222',
                      lattice=None,
                      slab=None,
                      modelName='icosahedron',
                      modelId=None):

    check_number(radius, 'radius', nonnegative=True)
    check_number(divisions, 'divisions', positive=True)
    check_number(linewidth, 'linewidth', nonnegative=True)
    check_number(sphereFactor, 'sphereFactor')
    model_id = parse_model_id(modelId)

    if orientation == 222:
        orientation = '222'
    from Icosahedron import coordinate_system_names as csnames
    if not orientation in csnames:
        raise CommandError, ('Unknown orientation "%s", use %s' %
                             (orientation, ', '.join(csnames)))
    if not lattice is None and mesh is None:
        mesh = True

    from Commands import parse_ints
    hk = parse_ints(lattice, 'lattice', 2)

    if hk is None:
        varray, tarray = icosahedral_geometry(radius, divisions, sphereFactor,
                                              orientation)
        edge_mask = None
    else:
        varray, tarray, edge_mask = hk_icosahedral_geometry(
            radius, hk, sphereFactor, orientation)
    show_surface(varray, tarray, edge_mask, color, mesh, linewidth, center,
                 rotation, qrotation, coordinateSystem, slab, model_id,
                 modelName)
Exemplo n.º 27
0
def cylinder_shape(radius = 10.0, height = 40.0,
                   center = None, rotation = None, qrotation = None,
                   coordinateSystem = None,
                   divisions = 72, color = (.745,.745,.745,1),
                   mesh = False, linewidth = 1,
                   caps = False, slab = None,
                   modelName = 'cylinder', modelId = None):

    check_number(radius, 'radius', nonnegative = True)
    check_number(height, 'height', nonnegative = True)
    check_number(divisions, 'divisions', positive = True)
    check_number(linewidth, 'linewidth', nonnegative = True)
    model_id = parse_model_id(modelId)

    nz, nc = cylinder_divisions(radius, height, divisions)
    varray, tarray = cylinder_geometry(radius, height, nz, nc, caps)
    edge_mask = None

    show_surface(varray, tarray, edge_mask, color, mesh, linewidth,
                 center, rotation, qrotation, coordinateSystem,
                 slab, model_id, modelName)
Exemplo n.º 28
0
def morph_op(volumes,
             frames=25,
             start=0,
             playStep=0.04,
             playDirection=1,
             playRange=None,
             addMode=False,
             constantVolume=False,
             scaleFactors=None,
             hideOriginalMaps=True,
             subregion='all',
             step=1,
             modelId=None):

    volumes = filter_volumes(volumes)
    check_number(frames, 'frames', int, nonnegative=True)
    check_number(start, 'start')
    check_number(playStep, 'playStep', nonnegative=True)
    if playRange is None:
        if addMode:
            prange = (-1.0, 1.0)
        else:
            prange = (0.0, 1.0)
    else:
        prange = parse_floats(playRange, 'playRange', 2)
    check_number(playDirection, 'playDirection')
    sfactors = parse_floats(scaleFactors, 'scaleFactors', len(volumes))
    subregion = parse_subregion(subregion)
    step = parse_step(step)
    modelId = parse_model_id(modelId)
    vs = [
        tuple(v.matrix_size(step=step, subregion=subregion)) for v in volumes
    ]
    if len(set(vs)) > 1:
        sizes = ' and '.join([str(s) for s in vs])
        raise CommandError, "Volume grid sizes don't match: %s" % sizes
    from MorphMap import morph_maps
    morph_maps(volumes, frames, start, playStep, playDirection, prange,
               addMode, constantVolume, sfactors, hideOriginalMaps, subregion,
               step, modelId)
Exemplo n.º 29
0
def icosahedron_shape(radius = 10.0, center = None, rotation = None,
                      qrotation = None, coordinateSystem = None,
                      divisions = 72,
                      color = (.745,.745,.745,1), mesh = None, linewidth = 1,
                      sphereFactor = 0.0, orientation = '222', lattice = None,
                      slab = None, modelName = 'icosahedron', modelId = None):

    check_number(radius, 'radius', nonnegative = True)
    check_number(divisions, 'divisions', positive = True)
    check_number(linewidth, 'linewidth', nonnegative = True)
    check_number(sphereFactor, 'sphereFactor')
    model_id = parse_model_id(modelId)

    if orientation == 222:
        orientation = '222'
    from Icosahedron import coordinate_system_names as csnames
    if not orientation in csnames:
        raise CommandError, ('Unknown orientation "%s", use %s'
                             % (orientation, ', '.join(csnames)))
    if not lattice is None and mesh is None:
        mesh = True

    from Commands import parse_ints
    hk = parse_ints(lattice, 'lattice', 2)

    if hk is None:
        varray, tarray = icosahedral_geometry(radius, divisions,
                                              sphereFactor, orientation)
        edge_mask = None
    else:
        varray, tarray, edge_mask = hk_icosahedral_geometry(radius, hk,
                                                            sphereFactor,
                                                            orientation)
    show_surface(varray, tarray, edge_mask, color, mesh, linewidth,
                 center, rotation, qrotation, coordinateSystem,
                 slab, model_id, modelName)