The biggesst problem I see is that there is no way of
clearing a rectangle without using the selection.
clearcells(rect-list) would help.
putcells(cell-list, x0, y0, axx, axy, ayx, ayy) could
usefully have an eighth argument, mode: 0 for clear, 1
for set, 2 for xor.
setcell(x, y, state) could also be extended to
setcell(x, y, mode), using mode as above.
Memory usage is also a big problem. Using python's
array package may help. Unfortunately, python has only
one-dimensional arrays, so we have to give a width
(which should divide the array length.
toarray(array,width,x,y,mode) would put cells from the
pattern into the array according to mode;
fromarray(array,width,x,y,mode) would put cells from
the array into the pattern.
The array corresponds to the pattern cells
(x,y), (x+1,y), ..., (x+width-1,y),
(x,y+1), (x+1,y+1), ..., (x+width-1,y+1), ...
(x,y+k), (x+1,y+k), ..., (x+width-1,y+k)
where k = len(array)/width - 1 .
Here, mode is an integer from 0 to 15 as in Common Lisp
BOOLE:
0 0 1 1 source
0 1 0 1 dest
integer op
0 clear 0 0 0 0 dest result
1 and 0 0 0 1
2 andc2 0 0 1 0
3 move 0 0 1 1
4 andc1 0 1 0 0
5 nop 0 1 0 1
6 xor 0 1 1 0
7 or 0 1 1 1
8 nor 1 0 0 0
9 eqv 1 0 0 1
10 comp 1 0 1 0
11 orc2 1 0 1 1
12 movec1 1 1 0 0
13 orc1 1 1 0 1
14 nand 1 1 1 0
15 fill 1 1 1 1
I don't know c++, so I'm not going to implement this,
but it would greatly speed up a script I'm writing.
I assume I contribute scripts by attaching them to
comments like this one?
Dan Hoey
Logged In: YES
user_id=1372332
Sorry about the BOOLE table. I hope the <pre> tag orks
<pre>
0 0 1 1 source
0 1 0 1 dest
mode op
0 clear 0 0 0 0 dest result
1 and 0 0 0 1
2 andc2 0 0 1 0
3 move 0 0 1 1
4 andc1 0 1 0 0
5 nop 0 1 0 1
6 xor 0 1 1 0
7 or 0 1 1 1
8 nor 1 0 0 0
9 eqv 1 0 0 1
10 comp 1 0 1 0
11 orc2 1 0 1 1
12 movec1 1 1 0 0
13 orc1 1 1 0 1
14 nand 1 1 1 0
15 fill 1 1 1 1
</pre>
Logged In: YES
user_id=1262668
Howdy! Thanks for the feedback! I don't see the script;
could you either attach it or email it separately? I'm glad
someone's looking at the scripting; it's really cool stuff.
-tom
Logged In: YES
user_id=1372332
The script is not ready yet, but I've learned a lot of
python over the weekend and I hope to have a version of the
script in a few days. I now expect that what we want is
putcells_from_buffer(buffer,rect,mode) and
getcells_to_buffer(buffer,rect,mode)
where rect is a rectangle and buffer is a buffer (or perhaps
an array) with enough space to hold the data in the
rectangle. The whole idea is to get a way of reading and
writing the pattern space that doesn't involve new memory
allocation.
For a more modest proposal,
dumpcells_to_file(rect,path) and
loadcells_from_file(rect,path)
would work, with the idea being that we don't mess around
with rle or the like, just a raw bitmap. If the file
exists, dumpcells_to_file would ideally overwrite it in
place rather than allocating new disk space (and it could
even be an error to dumpcells to a file that has a different
size or shape of rectangle.)
I may implement the latter two inefficiently with the
current interface. Then the addition of a c++ method would
be a speedup of a couple of orders of magnitude and avoid
the memory churn inherent in the current methods.
Dan
Logged In: YES
user_id=1372332
Here is a python reference implementation of
dumpcells_to_file and loadcells_from_file. I figure moving
this into the c++ core would probably improve performance by
several orders of magnitude.
Another feature request is empty(rectangle) to test whether
a rectangle has any cells set. This could be a compatible
extension of empty(rectangle=None), where None as a
rectangle means the entire plane (as opposed to [], which is
always empty). While I'm at it, I would prefer the name
"isempty" for golly.empty. That's probably best done with
definining "empty" as a deprecated alias.
Reference implementation of loadcells_from_file and dumpcells_to_file