== Repsnapper Users Manual ==

Welcome to the RepSnapper Manual, although currently a work in progress this guide aims to help you install and use your RepSnapper software.


Contact Info

    * Irc channel: #repsnapper at irc://irc.freenode.net

Timothy Schmidt Version

Current development of Repsnapper is happening in Timothy Schmidt's repository at the following URLs.

    * Code: https://github.com/timschmidt/repsnapper
    * Bug tracker: https://github.com/timschmidt/repsnapper/issues

Kulitorum version

For historical reasons we leave here the links to the old svn version that developed by Kulitorum, this version is now unmaintained and commits go into the Timothy Schmidt version (as of ~ October 5th, 2010)

    * Code: http://svn.kulitorum.com/RepSnapper
    * SVN history: http://cia.vc/stats/project/RepSnapper
    * Bug tracker: http://bugs.kulitorum.com

== Installation from binaries ==

=== FreeBSD ===

--------------------------
    pkg_add -r repsnapper
--------------------------

=== Linux ===

There are currently no Repsnapper binaries pre-built for Linux.  However, installation from source is relatively simple.  If you'd like to package Repsnapper for your Linux distribution, please let us know!

=== Windows ===

There are beta versions for Windows, see the https://github.com/timschmidt/repsnapper/downloads[Downloads section on github]. The Windows version cannot communicate with a printer and can only calculate on a single CPU.

Historians only: the v1 of Repsnapper for Windows is here: http://www.kulitorum.com/RepSnapperBeta.rar (Kulitorums version).
This is even older, but should work with tonokip and FiveD: http://svn.kulitorum.com/RepSnapper/MSVC9/Release/RepSnapper.exe[here].

=== OS X ===

Old v1 (historians again):
David Buzz has posted binaries for OS X https://sites.google.com/site/davidbuzz/repsnapper-for-osx-binaries[here].

== Installation from source ==
[NOTE]
=====

Since the switch to using gtk, only the docs for (some) Ubuntu are uptodate, and even those are untested.

Although RepSnapper is not generally tested outside of windows/linux/mac you may be able to get it running on other OSs. To do so you will need the following:

    * gcc
    * make
    * autotools
    * intltool
    * OpenGL
    * git
    * libgtkmm-2.4-dev
    * libgktglext1-dev
    * libxml++-2.6
    * libzip

=====

=== FreeBSD ===

--------------------------
    cd /usr/ports/cad/repsnapper && make install clean
--------------------------
or
--------------------------
    portinstall repsnapper
--------------------------
or similar.

Or use the port to install dependecies and then checkout the git code.


=== Linux ===

==== Arch Linux ====

There is an AUR package:

--------------------------
	yaourt -Sy repsnapper
--------------------------
or
--------------------------
	yaourt -Sy repsnapper-git
--------------------------


==== Ubuntu ====

=====  Install dependencies =====

--------------------------
sudo apt-get install git-core build-essential intltool libtool libgtkglextmm-x11-1.2 libgtkmm-2.4-dev gtk2-engines-pixbuf libxml++ libcairomm-1.0 libzip-dev
--------------------------


===== Acquire source and compile =====


      git clone git://github.com/timschmidt/repsnapper.git

      cd repsnapper

      ./autogen.sh

      make


Executable (repsnapper) will be left in the top folder. Install with "sudo make install-strip"

==== Fedora ====


====== Fedora 17 and above ======
Repsnapper is in official Fedora 17 and above repositories, so you can just simply run:

      yum install repsnapper

Sometimes you can get a fresher version (but not very tested) by enabling testing updates:

      yum install repsnapper --enablerepo updates-testing

After the installation you should see Repsnapper in Applications (Graphics), or you can run the `repsnapper` command.

====== Older Fedora versions ======

(most probably extremely outdated)

Repsnapper was packaged by jebba for Fedora 14 at this repository: http://repos.fedorapeople.org/repos/jebba/reprap/

	   su

	   wget -P /etc/yum.repos.d/ http://repos.fedorapeople.org/repos/jebba/reprap/fedora-reprap.repo

	   yum install repsnapper-gtk2

	   exit

	   repsnapper


===== Installing from sources =====
Install dependencies: TODO only tested with Fedora 14
--------------------------
yum install git gtk2-devel gcc-c++ gcc binutils make cmake gtkglextmm gtkglextmm-devel gtkmm*
--------------------------
For Fedora 15 (tested on x86_64)
--------------------------
yum install git gtk2-devel gcc-c++ gcc binutils make cmake gtkglextmm gtkglextmm-devel libusb1-devel intltool gtkmm*
--------------------------

Install repsnapper:

	git clone git://github.com/timschmidt/repsnapper.git

	cd repsnapper

	su

	echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf

	ldconfig

	exit

	./autogen.sh

	make -j3


Run the program:

    ./repsnapper


Install and run:

	sudo make install-strip

	repsnapper


==== OpenSuse 11.2 / SLED 11 SP1 ====

     sudo zypper install TODO


==== Generic installation instructions ====


     git clone git://github.com/timschmidt/repsnapper.git

     cd repsnapper

     ./autogen.sh

     make -j3


Executable (repsnapper) will be left in the top folder. Install with "sudo make install-strip"

=== Windows ===
Currently black magic. Nightly builds coming...

=== OS X ===

Install http://developer.apple.com/technologies/xcode.html[XCode].

Install http://www.macports.org/[MacPorts].


Run from a terminal window:


    sudo port install intltool gtkmm gtkglextmm


Acquire source and compile:


	git clone git://github.com/timschmidt/repsnapper.git

	cd repsnapper

	./autogen.sh

	make -j3


Executable (repsnapper) will be left in the top folder. Currently there is no install rule.


== Printrun/pronterface integration as pure slicer ==

As the serial communications section of repsnapper is not really state-of-the-art and may be only working in particular circumstances, you could try using pronterface for the printing part.

In pronterface, set the option "slicecommand" to "repsnapper -o $o $s" and you will get a window where you can manipulate and slice your model and then send the GCode back to pronterface for printing.

== Configuration ==

Not uptodate, but still useful:

=== Simple tab ===

Connect to printer::
    Establishes communications between the PC and the main board.

Port::
    Manually selects the serial communication port that you want to talk across.

Speed::
    The serial communications baud rate. Typically 115200 - must however match the setting in your firmware.

Load STL::
    Loads an STL file

Convert to GCode::
    Converts the STL to GCode

Load GCode::
    Loads previously generated GCode file

Print::
    Starts printing

Calibrate::
    Not yet implemented

=== Input File tab ===

Load STL::
    Loads an STL file

Save STL::
    Saves all objects in their current position to a single STL file. You will actually save the complete printing plate to a single STL file without combining the single objects. After loading the file you can manipulate them individually. These multiple-object STL files can also be read and merged by meshlab.

Save Settings::
    Saves all configuration settings. The configuration settings are stored in a file called repsnapper.conf.

[TIP]

Save Settings As::
    Saves configuration settings in a file of your choice.

Load Settings::
    Loads configuration settings from a file.

Delete::
    Deletes the selected STL from the current working area.

Duplicate::
    Creates a copy of the selected object. Useful for printing several items of the same object.

Translate, Rotate and Scale::
    If an STL object is first selected in the browser, this will alter the part for creating gcode.
Object Name, File location, File type and file material
    Name a file system and document the contents.

Object rotation::
    Selects the plane to rotate the object about. GCode generation is affected by final object placement. Also useful when loading several STL files.

=== Print Options tab ===

Shell Only - no infill::
    Generates path information for only the outermost layer of an object.  When printed, the object will be hollow.

Shell Count::
    Number of passes around the perimeter of an object, before starting infill.

Rotation::
    Degrees to rotate the first infill layer.

Infill Rotation per Layer::
    Degrees to rotate each successive infill layer.

Infill Distance::
    Distance between each filament of infill - measured in extruded material widths.

Alternate Infill Layers::


Raft Enable::
    Select this option to print a "raft" on the build surface before printing your desired object.  May help alleviate problems with uneven build surfaces.

Optimization::
    Polygon curves are straightened up to the given offset (to get faster prints)


=== Raft Settings Window ===

Larger than objects::
    Number of millimeters by which the raft should be larger than the base of the printed object.

Number of base/interface layers::
    Base layers adhere to the build surface and reduce the effect of surface irregularities.  Interface layers come in contact with the printed object and should be easy to break off after printing.

Material per distance ratio::
    The amount of plastic to extrude for this layer is determined by multiplying the normal extrusion speed by this value.

Rotation::
    Rotation in degrees between layers.

Distance between lines::
    Distance, in extruded material widths, between lines.

Thickness Ratio::
    unknown

Temperature ratio::
    The normal printing temperature is multiplied by this ratio to determine the temperature used while printing the raft.

=== Printer Settings Window ===

Build volume::
    Maximum build envelope of the printer.

Print margin::
    Offset to move from the printer's starting position before beginning print.

Use incremental ecode::
    Enable this option when using "5D" firmware.

Use 3D Gcode::
    Enable this option when using Makerbot firmware (or if you use the M101/M103 commands for tool control)

Extruded material width ratio::
    Width of the extrude material in proportion to layer thickness.

Extrusion multiplier::
    Allows calibration of the extruder without having to adjust E_STEPS_PER_MM in the firmware.

Layer thickness::
    Distance between printed layers, in millimeters.

Min print speed XY::
    Minimum print speed for the X and Y axes, in millimeters per minute.

Max print speed XY::
    Maximum print speed for the X and Y axes, in millimeters per minute.

Min print speed Z::
    Minimum print speed for the Z axis, in millimeters per minute.

Max print speed Z::
    Maximum print speed for the Z axis, in millimeters per minute.

Enable antiooze retraction::
    Enable this option to retract filament by a set amount before each move, reducing unwanted extrusion.

Distance to retract filament::
    Distance to retract filament -- measured in millimeters of extrusion, not millimeters of filament.

Speed to retract filament::
    Speed to retract filament, measured in millimeters per minute.

Enable Acceleration::
    Enable this option to begin each movement at Min print speed XY, and slowly accellerate up to Max print speed XY.

Distance used to read full speed::
    Distance to accelerate over, measured in millimeters.

Port::
    Manually selects the serial communication port that you want to talk across.

Speed::
    The serial communications baud rate. Typically 19200 - must however match the setting in your firmware. For example in the latest svn firmware the baud is 57600 by default in configuration.h the value in repsnapper must match this value.

=== GCode tab ===

Here you can create, save, load and/or edit the GCode.

Using the tabs, you can manually enter some GCode, that will be "injected" into the resulting GCode, when you press the Convert to GCode button.

Convert to GCode::
    Slices the object(s) in the current working area, and generates the necessary GCode to print that object.

Load Gcode::
    Loads a previously generated Gcode file.

Save GCode::
    Saves generated GCode to a file.

You can generate quite useful and very printable GCode using the default settings of RepSnapper.

There are however also a host of user changeable settings that will alter/adjust the generation of GCode. On this page you should get introduced to some of these options.

==== Start tab ====
code options to set at the beginning of the print process, like 0-position, default print temperature and more

You will almost certainly want to change the value on the line that sets temperature, or remove it if you set the temperature before starting your print.

When you first open RepSnapper this is what is in the tab:
--------------------------
; GCode generated by RepSnapper by Kulitorum

G21                        ;metric is good!

G90                        ;absolute positioning

T0                         ;select first extruder

G28                        ;go home

G92 E0                     ;set extruder home

M104 S200.0                ;set temperature to 200.0

G1 X20 Y20 F500            ;Move away from 0.0, so we use the same reset (in the layer code) for each layer
--------------------------

In Labitat.dk the Workhorse Mendel uses this in the Start tab
--------------------------
; GCode generated by RepSnapper by Kulitorum

G21                        ;metric is good!

G90                        ;absolute positioning

T0                         ;select new extruder

;G28                       ;go home - does not work with current version of Tonokip Firmwar
e (oct 2010)

G92 X0 Y0 Z0 E0            ;set home to current location of the nozzle

M104 S215                  ;set temperature (heating units - NOT actual degree centigrade)

G1 X20 Y20 F500            ;Move away from 0.0, so we use the same reset (in the layer code) for each layer
--------------------------

==== Next layer tab ====
something to do in between printing the next layer

==== End code tab ====
something to do at the end of a print, like turning the heater off

When you first open RepSnapper this is what is in the tab:

--------------------------
G1 X0 Y0 F2000.0       ;feed for start of next move

M104 S0.0              ;Heater off
--------------------------

==== Result tab ====
shows you the final complete GCode generated.

=== Display options tab ===


=== Print tab ===

Connect to printer::
    Initiates communication between Repsnapper and the printer.  If already connected, pressing this button will reset the printer.

Power on::

Print::
    Starts sending the GCode from the "Result" tab under the "GCode" tab to the printer.

Pause::
    Pauses communication with the printer.

Fan on::
    Sends the M106 / M107 codes to the printer to toggle the fan on / off respectively.

Voltage::
    unknown

Errors::
    Toggles the logging of communications errors.

Info::
    unknown

Echo::
    Toggles echoing of all commands sent to the printer.

GCode send::
    Text entry field allowing user to manually send individual commands to the printer.

==== Interactive control tab ====

Jog pannel::
    A matrix of buttons allowing the user to manually jog the printer set distances along each of it's axes.  The topmost row controls the X axis, followed by the Y axis, with the bottom most row controlling the Z axis.

Temperature update interval::
    Number of seconds between sending the M105 command to the printer to check the extruder temperature.

Switch heat on::
    Sends M104 command to the printer, with Target Temp as the argument.

Current temp::
    Current extruder temperature, as reported by the M105 command.

Target temp::
    Target extruder temperature, in degrees Celcius, sent to the printer when "Switch heat on" button is pressed.

Run extruder::
    Jogs extruder in the direction set by the Reverse toggle button, distance set by the Length slider, at the speed set by the Speed slider.

Reverse::
    Toggles extruder direction.

Speed::
    Speed to jog extruder, in millimeters / minute of extruded material.

Length::
    Length to jog extruder, in millimeters of extruded material

Downstream speed multiplier::
    unknown

Downstream extrusion multiplier::
    unknown

Custom buttons::
    These buttons do nothing by default, but can be assigned custom strings of GCode to be sent to the printer when clicked.

==== Communication logs tab ====

Communication log::

Errors / warnings::

Echo::

Auto scroll::

Log Files::

Clear logs when print starts::

Clear logs now::
    Clears the log window immediately

==== Custom buttons tab ====

Button to edit::
    Select which button to edit.

Button Label::
    User-editable text label for the selected custom button.

Save::
    Assigns current GCode to the selected button.

Test::
    Sends the current GCode to the printer.

== Use ==

=== Launching ===

To run repsnapper on

windows::
    double click the repsnapper.exe file.

linux/OSX/xBSD::
    type ./repsnapper into the console window or install it by 'make install-strip', then you should have repsnapper on your path.


After launching the repsnapper application you are presented with the main window of the application

On the left is the 3D view and on the right is the configuration and control panel.
Loading an STL

To load an STL into the 3D view

    * click on the tab labeled Input file and
    * press the Load STL button. In revision prior to ??? you are presented with a Fluid file browsing dialog. In later versions you will be presented with your standard operating systems file browse dialog. Choose the STL that you wish to load and click OK.

The 3D view should now display your STL. Use this button to pull in a facet file to process into Gcode.

[TIP]
If repsnapper crashes at this point you might have an STL file that is "Bad Input" try converting it to binary using meshlab or similar.

=== Viewing the STL ===

==== Viewing STL in repsnapper ====

Once an STL is loaded you can rotate, translate and/or scale the view in the 3D viewer so as to see what the object looks like, doing so will not effect the print its mearly for viewing purposes.

    * To rotate the view of the STL hold down the left mouse button and drag.
    * To translate the view the STL hold down the right mouse button and drag.
    * To scale the view the STL hold down the middle mouse button and drag, or turn the wheel on your mouse.

Note: the grid shows your build platform / printing area
Working with STL

Once an STL is loaded, you can move it to further onto the build platform, rotate it and scale it. You can also duplicate it and load additional STL files onto the build platform.

    * To move around individual objects or a group of objects use Shift and the left mouse button.
    * Or tab to the translate box and enter absolute values into the X and Y fields.
    * If the object is not on the Platform, you can also try rotating it about the Z axis to automatically make it touch the Z=0 plane.
    * Everything below the Z=0 plane will not be sliced, so you will not get negative Z values in your GCode.

    * Duplicate adds another copy of the STL beside the first.


=== Convert to GCode ===
Repsnapper displaying GCode

Converting to GCode is a simple process:

    * Press the Convert to GCode button.

You can generate quite useful and very printable GCode using the default settings of RepSnapper. There are however also a host of user changeable settings that will alter/adjust the generation of GCode, see RepSnapper Manual: Setting GCode options for details.


=== Print ===

To send the GCode to a FiveD GCode compatible printer:

    * click the Connect to printer button. (you set com-port and speed in "Settings")
    * Check the Communication Log tab to make sure the printer has connected and is receiving temperature signals from the Extruder Controller.


    * Set the extruder target temperature, by editing the "Target Temp" field, and
    * click "Switch Heat on" to turn on the extruder heater.
    * once the target temp has been met, you may want to try to extrude a bit, to make sure the extruder is fully loaded and ready to print.


To start printing

    * click the Print button. This starts sending commands to the printer for execution.


Below the author describes the things he had to do to get repsnapper (V333, dated 14-08-2010) working to the point where he could finish a print of a test block. Firmware used was Tonokip's firmware running on an Arduino Mega with Pololu stepper drivers.
Firmware

    * Make sure your Arduino config file is accurate. Test movement lengths with a ruler to be sure.
    * you can do this from repsnapper. (See appendix A to see how to manually control your bot from repsnapper)

Printer definition

    * Make sure 'extruded material width' matches the extruded filament diameter.
    * Extrusion multiplyer determines how fast your extruder goes at a given print speed... This parameter is the one to fiddle, to set your stretch.
    * Max printspeed is the speed that repsnapper will command the axes to move. Too fast and you will strip your filament or stall your extruder.
    * Turn acceleration off. Make sure Use Incremental ecode is on

Print options

    * infill Distance was set quite small, I changed it up to 1.8mm

Raft

    * Turned off Raft for the test blocks.

Gcode

    * Start tab
    * Cleared the text out of the other tabs, knowing that the steppers are skipping steps is a good thing at the beginning.

== Appendix A. ==

Everything happens from the Print tab when you want to manually control your bot.

    * To get working for the first time, you must make a connection.. make sure the USB is plugged into the arduino, and that the arduino software is not using the virtual serial port.

    * make sure you have the correct serial port selected in the Printer Definition tab, and the speeds set to a reasonable number.

    * Select 'Connect to printer' (should be lit)

    * You can check your connection by selecting the communication log tab on the 'Print' page. From 'Communication Log', select 'Communication Log, again and see that commands are being acknowledged...

    * you can eventually skip this step by making sure that your temperature is being updated.

Go back to the 'interactive control' tab.

    * You can execute a line of gcode by putting the cursor into the 'GCode' box and pressing enter, or the 'send' button.

    * You can jog all three of your axes by hitting one of the numbered buttons.. -100 on the top line will move the X axis 100 mm (or inches! if you are set up for inches) in the home direction...

    * (you may want to re-visit your arduino config file and reverse an axis or two if things move in the wrong direction).

    * middle line is Y axis, Bottom line is Z axis...

    * Pressing home will cause that axis to run in the minus direction until it reaches an endstop.

 'Home All' is not supported in Tonokip's firmware.

    * Clicking 'Switch Heat On' will cause your extruder to start to heat up. It will try to get to the set 'Target temp'.

  If  you change the target temp, you must deselect switch heat off, then on again for it to register.

    * To run the extruder, once at temperature, set the speed slider (in mm/minute ?), the length (in mm ?) and click the 'Run extruder' button. It will run for the distance specified in 'Length'.

  to run it again, you click 'Run Extruder' again, it will de-select, but the motor will run anyways.

== Development ==
=== Comms debugging ===
Even if you have a working machine, it can be useful to emulate a serial connection to see what the firmware would see. Using socat (install from your distro repos as usual).
For the simplest case, issue "socat -d -d pty,raw,echo=0 readline" in a terminal. It reports the address to to connect RepSnapper to, (something like /dev/pts/N). You should disable connection
validation int the printer settings dialog. If you happen to have a working firmware in a simulator (please share if you do :), then you can use "socat -d -d pty,raw,echo=0 pty,raw,echo=0",
which gives two addresses, so you can connect anything to RepSnapper. You could also use another serial terminal app this way.
