Example #1
0
def test_assign_properties_error(tet_ply_txt):
    vertex = tet_ply_txt['vertex']
    with Raises(ValueError) as e:
        vertex.properties = (vertex.properties + (PlyProperty('xx', 'i4'), ))
    assert str(e) == "dangling property 'xx'"
Example #2
0
def test_element_parse_error_repr():
    prop = PlyProperty('x', 'f4')
    elt = PlyElement('test', [prop], 0)
    e = PlyElementParseError('text', elt, 0, prop)
    assert repr(e)
def convert_unique(fn_read,
                   fn_write,
                   center_x=True,
                   center_y=True,
                   center_z=True):
    plydata = PlyData.read(fn_read)

    # ---------- Test Code start -----------
    #print("Start Test code")
    print(plydata.elements[0].data.dtype.fields)
    #print(plydata.elements[0].ply_property('x'))
    #i = 1
    # for file in plydata.elements[0].data['red']:
    # print(file)
    #  i += 1
    #  print("Das war klug Nr: ", i)

    # ---------- Test Code over ---------
    #x,y,z : embbedding to RGB
    x_ct = np.mean(plydata.elements[0].data['x'])
    if not (center_x):
        x_ct = 0
    x_abs = np.max(np.abs(plydata.elements[0].data['x'] - x_ct))

    y_ct = np.mean(plydata.elements[0].data['y'])
    if not (center_y):
        y_ct = 0
    y_abs = np.max(np.abs(plydata.elements[0].data['y'] - y_ct))

    z_ct = np.mean(plydata.elements[0].data['z'])
    if not (center_z):
        z_ct = 0
    z_abs = np.max(np.abs(plydata.elements[0].data['z'] - z_ct))
    n_vert = plydata.elements[0].data['x'].shape[0]

    # --------- Test Code -------
    if 'red' not in plydata.elements[0].data.dtype.fields:
        print('Property Red not available. Adding Colors now')
        vert = plydata['vertex']
        a = np.empty(
            len(vert.data), vert.data.dtype.descr + [('red', 'u1'),
                                                     ('green', 'u1'),
                                                     ('blue', 'u1')])
        for name in vert.data.dtype.fields:
            a[name] = vert[name]
        vert = PlyElement.describe(a, 'vertex')

        #print(vert.properties, vert.data.dtype.names)
        vert.properties = ()

        vert.properties = plydata.elements[0].properties + (PlyProperty(
            'red', 'uchar'), PlyProperty(
                'green', 'uchar'), PlyProperty('blue', 'uchar'))
        plydata = PlyData([vert, plydata.elements[1]], text=True)
    print(plydata.elements[0].data.dtype.fields)
    # -------- Test Code End -------

    for i in range(n_vert):
        r = (plydata.elements[0].data['x'][i] - x_ct) / x_abs  #-1 to 1
        r = (r + 1) / 2  #0 to 2 -> 0 to 1
        g = (plydata.elements[0].data['y'][i] - y_ct) / y_abs
        g = (g + 1) / 2
        b = (plydata.elements[0].data['z'][i] - z_ct) / z_abs
        b = (b + 1) / 2
        #if b> 1: b=1
        #if b<0: b=0

        plydata.elements[0].data['red'][i] = r * 255
        plydata.elements[0].data['green'][i] = g * 255
        plydata.elements[0].data['blue'][i] = b * 255
    plydata.write(fn_write)
    return x_abs, y_abs, z_abs, x_ct, y_ct, z_ct