Nice little tool; saved me some work but this bug took some time to figure out...
The write-method does not work for python3. The problem is handling of writing bytes in Python3 has changed.
I am not sure if I was doing something wrong but I was trying to push a fix but it did not work. I am very new to git so if you can help me push the change I would appreciate it. It is probably something simple I have forgotten. What i did:
git clone https://github.com/dimatura/binvox-rw-py.git
# did my changes
git add binvox_rw.py
git commit -m "Issues with writting with Python3. Fixed by using import struct; struct.pack('B',byte_value)"
git push origin HEAD:master
remote: Permission to dimatura/binvox-rw-py.git denied to pclausen.
fatal: unable to access 'https://github.com/dimatura/binvox-rw-py.git/': The requested URL returned error: 403
Thanks. Below the patch.
diff --git a/binvox_rw.py b/binvox_rw.py
index 704fc1f..6151a1e 100644
--- a/binvox_rw.py
+++ b/binvox_rw.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Copyright (C) 2012 Daniel Maturana
# This file is part of binvox-rw-py.
#
@@ -62,6 +63,7 @@ True
"""
import numpy as np
+import struct
class Voxels(object):
""" Holds a binvox model.
@@ -228,6 +230,16 @@ def sparse_to_dense(voxel_data, dims, dtype=np.bool):
#TODO ensure this is right when dims are not all same
#"""
#return x*(dims[1]*dims[2]) + z*dims[1] + y
+
+def bwrite(fp,s):
+ fp.write(s.encode())
+
+
+def write_pair(fp,state, ctr):
+ fp.write(struct.pack('B',state))
+ fp.write(struct.pack('B',ctr))
+
+
def write(voxel_model, fp):
""" Write binary binvox format.
@@ -244,11 +256,11 @@ def write(voxel_model, fp):
else:
dense_voxel_data = voxel_model.data
- fp.write('#binvox 1\n')
- fp.write('dim '+' '.join(map(str, voxel_model.dims))+'\n')
- fp.write('translate '+' '.join(map(str, voxel_model.translate))+'\n')
- fp.write('scale '+str(voxel_model.scale)+'\n')
- fp.write('data\n')
+ bwrite(fp,'#binvox 1\n')
+ bwrite(fp,'dim '+' '.join(map(str, voxel_model.dims))+'\n')
+ bwrite(fp,'translate '+' '.join(map(str, voxel_model.translate))+'\n')
+ bwrite(fp,'scale '+str(voxel_model.scale)+'\n')
+ bwrite(fp,'data\n')
if not voxel_model.axis_order in ('xzy', 'xyz'):
raise ValueError('Unsupported voxel model axis order')
@@ -265,19 +277,16 @@ def write(voxel_model, fp):
ctr += 1
# if ctr hits max, dump
if ctr==255:
- fp.write(chr(state))
- fp.write(chr(ctr))
+ write_pair(fp, state, ctr)
ctr = 0
else:
# if switch state, dump
- fp.write(chr(state))
- fp.write(chr(ctr))
+ write_pair(fp, state, ctr)
state = c
ctr = 1
# flush out remainders
if ctr > 0:
- fp.write(chr(state))
- fp.write(chr(ctr))
+ write_pair(fp, state, ctr)
if __name__ == '__main__':
import doctest
The text was updated successfully, but these errors were encountered:
Nice little tool; saved me some work but this bug took some time to figure out...
The write-method does not work for python3. The problem is handling of writing bytes in Python3 has changed.
I am not sure if I was doing something wrong but I was trying to push a fix but it did not work. I am very new to git so if you can help me push the change I would appreciate it. It is probably something simple I have forgotten. What i did:
Thanks. Below the patch.
The text was updated successfully, but these errors were encountered: