List of software projects over the years


The is a list of utilities developed either as a hobby, or as a learning experience, or to solve a problem as the need arose during some project or another at Rayflectar. The Rhino scripts and Windows utilities (originally in Visual Basic 6) are now dated (as of 2016), but are still kept here as a historical account or archive. Being a programming enthousiast I chose to develop those solutions from scratch rather then purchase ready made ones. Some of the more recent work like the MathMoth (in Javascript) and the Rubik's cube (in C++ using OpenGL) was done as a learning experience during some computer science coursework in college.


Javascript 3D Geometry Engine - Rubik's cube on Javascript using WebGL

This is an object oriented Javascript geometry and graphical framework (see github) developed (and then open-sourced) by ThomasAn from the ground up without the use of any external libraries or other frameworks. It is intented to handle both (and abstruct away from) webGL and the canvas2D contexts. Implements scene, camera, lights, curves, surfaces, primitives, vector algebra, matrix, and other objects. The Rubik's cube game itself is interactive and built on top of this framework as a showcase. It is fully modeled in Rhino3D and imported as an OBJ file (with a hand made OBJ loader) sent to the webGL painter object.

This cube features textures on each face (multiple textures per draw call), giving orientation to all six center pieces, which makes it a lot harder to solve since the center pieces must be handled too. The framework also implements a barycentric method of showing mesh wires.

Completed On:
HTML/CSS/Javascript on Notepad++ text editor using the Rayflectar/ThomasAn Javascript 3D-Geometry engine

Rubik's screenshot00Rubik's screenshot04Rubik's screenshot03Rubik's screenshot02

MATHmoth Odyssey Game - Math practice online game

This is an educational game with the goal to practice math speed. The premise is to navigate a moth caterpilar through a labyringth and the only way to do so is by solving one of four math expressions that appear around the moth's head. You cannot control the speed of the moth so it will keep moving unless you think fast enough solving an expression helping it turn before it hits a wall. Each time you hit, you loose a segment.

At the first release the game is a single level labyrinth requiring basic addition and subtraction to navigate the moth. In future releases (hopefully) the math will become more challenging and it will be possible to shift to more advanced levels of labyrinth; as well as discover power-ups along the way and doors to other sections (all requiring ever more difficult math to solve on the fly in order to unlock them).

Completed On:
HTML/CSS/Javascript using the ThomasAn Javascript 3D-Geometry engine

MathMoth screenshot01MathMoth screenshot00MathMoth screenshot02MathMoth screenshot03


Gear Generator - Involute Gear Generator

This includes both a RhinoScript and a Python script that create involute gear tooth-profiles (including bevel gears) around any circle in any viewport and any orientation. It will treat the circle you pick as the 'pitch circle' and it will draw the gear teeth around it. You can specify the gear either by number of teeth, or by its module

Suggested Alias: GearGen, or GearFromCircle

Requires: RhinoScript or Python
for Rhino V5, V6, or higher

Gear Gen

Harmony - Manipulate clusters of objects

This is a VB script to distribute various transformation aspects to any number (cluster) of objects, such as distribution of:

  1. Equidistance (distribute object equally spaced)
  2. Alignment (align to any of x,y axis or to the curvature of a surface)
  3. Object displacement (controlled by surface deltas)
  4. Rotation (constant to any of x,y,z axis, or controlled by surface deltas)
  5. Scale (constant to any of x,y,z axis, or controlled by surface deltas)
  6. Jitter (displacement, rotation or scale randomness to any of x,y,z directions or controlled by surface deltas)

Instructions for the Harmony script are found in the enclosed files.

Suggested Alias: Harmony

Requires: RhinoScript
20050218 or higher for Rhino V3
20060906 or higher for Rhino V4


IsoMatch - Parallel projection view match

This is a Rhino script for figuring out an unknown projection of a printed image. It can also be used for setting Isometric, Dimetric, Trimetric, or any custom angle views in Rhino. For figuring out unknown projections, the user can trace over a bitmap any two planar lines representing the X and Y-axis of that drawing and the script will convert a perspective viewport to a parallel view with corresponding camera angle. If the user constructs the XY guides with a specific angle (eg 30-30) then the result will be an isometric view.

Please see attached PDF for details.

Suggested Alias: IsoMatch

Requires: RhinoScript
20050207 or higher for Rhino V3
20060906 or higher for Rhino V4


MinBox - Minimum Bounding Box

This is a RhinoScript to generate the minimum bounding box of any 3D object (or objects) including planar objects.

The script uses a brute force spatial iteration method and may take a long time to compute (several minutes) depending on the complexity of the render meshes. When the script first runs you may see the "Creating render meshes" message as Rhino uses them for the bounding box function. Planar geometry will compute much faster.

Suggested Alias: MinBox

Requires: RhinoScript
20041110 or higher for Rhino V3
20060906 or higher for Rhino V4


CameraLine - Manipulate Camera-Target

This simple Rhino script fits the current camera-target to any line segment. It is possible to either extract a line representing the current camera-target, or assign the camera to a new line. This is also a good way to have a number of lines (as a visual cue) of several possible camera locations. Use this tool to fine-tune focal distances (accurate adjustment of Depth-of-Field) for render engines such as Maxwell.

Suggested Alias: CameraLine

Requires: RhinoScript
20050218 or higher for Rhino V3
20060906 or higher for Rhino V4


Installation screenshot
  1. Save the script *.rvb file to a directory. For example: "C:\Program Files\Rhinoceros 3.0\Scripts\GearGen.rvb"
  2. Create a new alias (e.g. GearGen) with a macro. Example: !_-loadscript "C:\.............\gearGen.rvb"
    (Include dash and underscore behind the loadscript command. Replace the dots with your own directory path. Use double quotes for the path)
  3. To run the script, type the alias name in the command line.

WINDOWS exe utilities

Units Converter Tool - Calculate conversions between units

This is a free utility that helps in conversion of multiple units at once.

  1. The user can add, delete, or edit as many categories and as many units within each category as they want; by right-click and choosing an option in the popup context menu.
  2. You get to see all equivalent units at once (instead of fiddling with them one at a time). Physically selecting a unit from the right hand list will make it the base unit and all others will update around it.
  3. There is a good deal of functionality invested into the numeric parser of the input field. You can do any arithmetic expression you want with unlimited nesting! A console (in red) will give you instantaneous feedback on whether your expression computes properly or it is missing parenthesis, or has other faults. For example instead of 3.75 it is possible to write ((1+2)^3)/3+3/(16^(1/2)).
  4. The user can hover the mouse over any unit in the list and then press CTRL+C to copy the corresponding value in the clipboard.

Compatibility: This app was tested on Windows XP SP2, but it should also run on Vista and Win2k


Project Timers - Automatic tracking of project time.

This is a free utility that helps keep track of time spent on documents for various tasks/projects while working on the computer. It works on a very simple principle: You create a timer and provide it with a keyword to sniff/detect. As such, each time you work on a document whose titlebar contains that keyword the corresponding timer will start counting. For example you can create a timer and have it sniff the keyword "Firefox" and this will keep track of time you spend using Mozilla Firefox. If your work is organized so that each project you work on has a docket number (or a database serial) appearing in the filename of each related document, then if you create a timer to sniff that serial you essentially keep track of time spent on that project.

  1. The user can add, delete, or edit as many categories and as many units within each category as they want; by right-click and choosing an option in the popup context menu.
  2. Right-click on the list to reveal a context menu
  3. In the edit window you can add a list of keywords to sniff.
  4. In the edit window you can also specify a location to save a timestamp
  5. All timers are saved automatically regardless if you specify a timestamp directory or not.
  6. Hover over the tray icon to reveal a pop-up summary window

Compatibility: This app was tested on Windows XP SP2, but it should also run on Vista and Win2k

Project timers

Countdown Timer - with audible alarm.

This is a free utility that counts down to a target date (up to 1000 hours in the future), or counts down by a specific amount of time.

Audible signals will sound in the last ten seconds. The utility uses three sound "*.wav" files (timer_01, Timer_02, and Timer_03.wav found in the program folder). The user can replace these files with their own sounds (if deleted or renamed, then no sound will occur). The first sound occurs between the 10th and 4th seconds. The second sound occurs in the last three seconds and the last sound occurs when the countdown is complete.

Once the timer is stopped, it is possible to zero the display by double-clicking it. Hovering over the labels "hh", "mm", etc will turn them red. Clicking on them will synchronize that attribute to the system time/date. In the countdown mode there is an option to loop back to the beginning after the target is reached. Also, once the timer is going, it is possible to be adjusted on the fly by changing any of the input fields (notice when you hover over the input fields the countdown digits turn red).

Compatibility: This app was tested on Windows XP SP2, but it should also run on Vista and Win2k

Countdown Timer

INSTALLATION INSTRUCTIONS for these Windows Utilities

  1. Unzip the downloaded file and double-click the SETUP.exe file to start the installation.
  2. Alternatively, since these utilities are very simple, you may even be able to run them without any installation at all. Instead of clicking the setup.exe, open the "No Installer" folder and just run the *.exe file you see in there. Most people will have no problem running the exe directly. However, if you do get an error for some missing *.ocx file, then you have no choice but to use the installer (as in step 1)