Category Archives: Technology

3D Printer Ashtar B (Draft)

Status: just a draft

Ashtar B (Cantilever)

Updates:

  • 2020/12/23: added more details on Y bed, and size comparison, blog post published.
  • 2020/12/17: X motor mount done, X belt pulley holder, XZ cantilever x-offset 10mm.
  • 2020/12/12: just the basic idea, an early draft with a few options (extra foot, 3/4 wheels for Z carriage), 6 vs 7 vs 9 beams.

Introduction

Ashtar K was the first design with 2020 T-slot alu extrusions, and I used 11 beams of 500mm length to make up the entire frame. In the back of my mind I thought also doing a Cantilever 3D printer with 2020 T- or V-slot, like the Prusa Mini or Printrbot Simple Metal, and as before I like to reuse the frame as rails directly and not use any smooth rods or alike, which means X beam as V-slot, and optionally Z beam as well as V-slot, Ashtar B:

Draft

A build-volume of 140mm to 190mm each axis is targeted in order to keep the X axis short – also, likely using a Bowden extruder setup where just a hotend resides on the X carriage.

Specifications

  • Build Volume: ~180x180x180mm
  • Frame: 6x 340mm 2020 alu profiles
    • 2x V-Slot (X and Z axis)
    • 4x T-Slot (Y axis with simple sliders where T-Slot are sufficient)

Issues to Resolve

  • X belt routing: outside of 2020 extrusion or inside
  • X motor mount: rather simple, perhaps combine with xcarriage_short_hmount_2020(), done
  • Y motor mount position: will determine overall build volume
  • Y bed slider: perhaps like Ashtar K final version
  • testing overall stability: 6, 7 or 9 beams
  • 3 vs 4 wheels on Z carriage, 4 wheels (see below why)
  • positioning: extruder, controller, display, power supply, optional filament holder
  • positions of X, Y and Z endswitches
  • tune to a common build volume while having uni-length beams/extrusions
    • 150mm, 200mm, 215mm for X & Y build axis length

Frame: 6 vs 7 vs 9 beams

The 9 beams give an overall better sturdiness, but not sure how essential at small building volume (less than 220mm each axis). I might be able to remove beam, the last beam at the back at the bottom reducing to only 6 beams, in that case the Y motor is mounted on the remaining beam in the back.

Z Carriage: 3 vs 4 wheels module

The 4 wheels looks better also because it allows to add another 2020 horizontal mount or wider mount, some X range is sacrificed (10-20mm).

Different Sizes

The build volume from 150mm to 200mm for each axis, I like to have 200mm but not sure if the X axis can maintain linearity fully (e.g. half of a layer-height such as 0.1mm ⇒ 0.05mm linearity for head X = 0 .. max), I might to have to settle for 180mm or even 150mm. Actual tests and fine tuning of the Z axis (4 wheels V carriage) and X axis (3 wheels V carriage) will tell.

Comparison

Build Axis: 150mm (83%)
Area: 225cm2 (69%)
Volume: 3.4Kcm3 (58%)

Build Axis: 180mm (100%)
Area: 324cm2 (100%)
Volume: 5.8Kcm3 (100%)

Build Axis: 200mm (111%)
Area: 400cm2 (123%)
Volume: 8Kcm3 (137%)

IdeaFormer Magnetic Sticker
(Aliexpress, 2020/12)

Common quadratic bed-sizes are 150mm, 200mm, 214mm, 220mm and 235mm e.g. for magnetic beds. A 200mm bed can be used but only 180mm be printed, as I have sufficient margin on the XZ cantilever side.

Y Bed

I gonna use the simple slider riding on T-slot (derived from an existing nylon slider) for the Y bed, 3 sliders in total:

The sliders are glued beneath the Y carriage, then the Y bed snaps into the T-slots easily. I have printed on these sliders with two Ashtar K‘s (K1 = 380×400, K2 = 300×300) for about 1+ years successful. This simple approach requires gravity, and the bed needs its own weight to stay in place (cannot be up-side-down or in no-gravity environment like International Space Station ISS).

Back & Bottom View

Ashtar B (back view)

Ashtar B (bottom view)

References

Infinite-Z CR-30 aka 3DPrintMill: Creality Acknowledges Prior Development & Commits to Open Source (2020/12)

As of December 2020, something remarkable has happened: Creality, a big chinese 3D Printer company has openly acknowledged and worked with western developers to bring forth a belt-based 3D printer.

Usually chinese companies have copied without acknowledge or give credit to development done by others like Adrian Bowyer or Josef Prusa, yet with the influence of Naomi Wu, a maker from Shenzen, Creality seemed to have been swayed to give proper attribution and even actively work with Open Source Hardware inventors to mass produce a belt-based 3D Printer.

CR-30 aka 3DPrintMIll by Naomi Wu with Creality (2020)

The past decades “Western Innovation vs Chinese Manufacturing” combo has been operating very well and brought many consumer products at low cost, including 3D printers.

Now, in this particular case, we see Bill Steele and Karl Brown (White Knight Printer) properly attributed in the 3DPrintMill Kickstarter page:

And even giving proper context of the overall lineage:

Lineage

All consumer 3D printers currently sold, build in some way on the work of Adrian Bowyer and his RepRap project- Open Source 3D printing. Some 3D printers iterate more than others, some are simply clones and claim innovations as their own that was in fact the community’s work. Others take only the broad strokes of an idea and build on it, improve it, and allow others to build on it further. For the 3DPrintMill (Creality CR-30) we have taken pains to involve and consult the talented individuals who brought the technology this far, and built on their work with their permission.

Bill Steele, who first demonstrated Infinite-Z FDM and DLP printers, and Karl Brown who created the first practical, Open Source kit so consumers could build their own Infinite-Z printer. Both Karl and Bill have given the project their blessing- and indeed, without them, it would never have been possible.

As said, this is remarkable and probably a new level of cooperation of Open Source Hardware movement and chinese manufacturers.

Back in 2010 I thought that the Open Source Hardware movement should actively seek cooperative alliance with chinese manufacturers instead just to complain – but this did not happen. Now in late 2020 it seems happening, thanks to Naomi Wu (Project Head for the CR-30/3DPrintMill), who made an effort to bridge the western innovation culture and chinese manufacturing culture – without a bridge, a canyon keeps villages apart.

Thanks also to Creality, namely Michael Tang (Co-founder of Creality), Steven Han (Brand Director), Zhou Yong (Product Manager), Lei Congjin (R & D Manager), Yu Xianhong (Project Manager) for the acknowledgment as expressed in the Kickstarter page.

Open Source Hardware Commitment

Additionally, and perhaps even more relevant is their on-going commitment to Open Source Hardware as expressed in this passage:

Bringing the 3DPrintMill (Creality CR-30) to life would need the resources of a full engineering team and a company with substantial 3D printer manufacturing experience. So a deal was struck, Creality would invest the R&D resources necessary to make the 3DPrintMill(Creality CR-30) real, and as soon as that expense was recouped, the entire product would be fully Open Sourced for the benefit of the community. When the 3DPrintMill (Creality CR-30) reaches 5 million USD in crowdfunding, the whole machine- CAD files, BOM, firmware, schematics, will be fully Open Sourced. Anyone in any country can make their own version, iterate and improve on it- leading to vastly accelerated development.

This is probably what many Open Source Hardware (OSHW) enthusiasts have been waiting for, one of the big player like Creality join the common OSHW efforts once more, after having released all plans of the Ender 3 in 2018 and giving an example for other companies.

Bigger Context

And I look at Apple, Microsoft, IBM, ARM, Intel, AMD and I wonder, with the Open Source ISA (Instruction Set Architecture) of RISC-V on the horizon, whether we are going to see the full stack of Open Source Hardware from the CPU design up to the PCB and final assembled computer (GPU, RAM, I/O); and if any of the big players take a moment, and look at what Creality did here?

Naomi Wu ranted away on Twitter with the following, which hits the nail about Open Source and Open Source Hardware is really about:

Software? Fusion360, Adobe Creative Cloud, John Deere tractors- a tradesperson can’t even own their own tools anymore. We’re all sharecroppers. Everything is rented.

Every single thing we own is being taken, put in the cloud, and rented back to us. Willingly. Because no one wants to know how to do anything beyond a narrow scope. We’re a world of carpenters willing to rent sharp chisels and saws rather than learn to sharpen them ourselves.

Although the rant started as people seemingly complained on the non-existing or poor customer support of Creality, her main argument is, rather have Open Source Hardware and a community helping each other, than a Closed Source without any control but good customer support – the rant actually targets the Software- & Hardware Sovereignty, which is behind all of the Open Source movement, that is the core issue: you are allowed, you are given the opportunity to improve what you bought, what you own, you can resolve the needs and requirements of your own use cases – personal evolution – and you contribute and help others by being able to share it again – collective evolution. And the mentioned companies, like Apple, or Microsoft, who have been locking up their hardware and software further and further, to improve usability and simplicity – and believe me, I have been an open critic of poor GUIs in Linux not able to catch up – but the price is high, loss of “digital sovereignty” as of software and hardware.

So, because companies are profit driven, they have to balance their own needs and requirements with the collective interest – and this is done in these statements:

Creality would invest the R&D resources necessary to make the 3DPrintMill(Creality CR-30) real, and as soon as that expense was recouped, the entire product would be fully Open Sourced for the benefit of the community.

When the 3DPrintMill (Creality CR-30) reaches 5 million USD in crowdfunding, the whole machine- CAD files, BOM, firmware, schematics, will be fully Open Sourced.

This is why I consider this an important and significant move, because a profit-driven company has actively and willingly balancing its own needs and requirements with those of the collective of the Open Source Hardware movement, and acknowledged that very product they are about to produce has been possible because of individuals like Adrian Bowyer, Bill Steele and Karl Brown.

Remarkable.


That’s it.

PS: If you are interested in early development 3D printers, see RepRap movement or general 3D Printer History.

3D Printer History (1980-2024)

Back in 1980’s the concepts of 3D printing were invented and implemented with

  • Stereolithography Apparatus (SLA) by Hideo Kodama (1980),
  • Fused Deposition Modelling (FDM) by Scott Crump (1988), who later founded Stratasys, and
  • Selective Laser Sintering (SLS) by Carl Deckard (1988).

Kodama developed the first 3D printer using UV light and curing resin, and filed a JPS56144478A patent (1980).

Kodama’s sample 3D print: ~50mm tall, 27 layers at 2mm thickness cured resin
(source Meidai Watch: 3D Printing & Nagoya University)

And so most approaches were secured with patents by companies like Stratasys, like the famous US #5,121,329: Apparatus and Method for Creating Three-Dimensional Objects (applied 1989, granted 1992) and others were thereby inaccessible for innovation outside of the patent holders and due the high pricing also inaccessible for users – a period of stagnation happened.

Once the patents expired (~2009), and that’s truly a lesson against patents, a surge of innovation occured and the prices for 3D printers fell from 100K+ USD range below 3K USD for the same functionality and print quality.

Adrian Bowyer, a british academic, coined the term of RepRap (2005), the replicating rapid prototyping and designing 3D printers which can print parts for itself: self-replication. Hobbyists started to adapt the design and push it further, since all plans were Open Source aka Open Source Hardware, it was easy to improve and iterate the designs. Eventually the Prusa Mendel as developed by Josef Prusa and reduced overall complexity and his next iteration was most significant: Prusa i3 (2012). This third iteration became quasi standard for low cost 3D printers for the next years and his Prusa Research company surged. See also RepRap Principle and RepRap.org Blog Archive.

  • RepRap Darwin: XY head and Z bed, threaded rods based
  • RepRap Mendel & Huxley: XZ head and Y bed, threaded rods based
  • Prusa Mendel: XZ head and Y bed, threaded rods based
  • Prusa i3: XZ head and Y bed, laser cut XZ frame

Josef Prusa summarizing his history 2010-2019, representing part of the spirit of the RepRap movement:

2009-2013: MakerBot & Thingiverse

US-based MakerBot was at the beginning (2009) a major driving force to the Open Source 3D printing community as partially funded also by Adrian Bowyer and his wife. MakerBot also runs Thingiverse, the major repository of free 3D models and designs for 3D printing. As MakerBot struggled with sales, after receiving Venture Capital and later bought by Stratasys (2013) it left the Open Source principle at the same time Thingiverse struggled since to stay functional (2019). In 2020 Thingiverse was given some attention, it seems now taken care of better.

  • CupCake CNC: Z head, XY bed, laser cut wood frame
  • Thing-o-Matic: Z head, XY bed, laser cut wood frame
  • Replicator 2: XY head, Z bed, metal frame

2011-2016: Kickstarter Hype

With the expiration of patents held by Stratasys and other companies (2009-), the surge for Kickstarter-based 3D printers began, sub 1000 USD printers became widely available, but also many failures and plain scams happened. Printrbot started as Kickstarter and thrived for a few years as US-based 3D printer company, also Snapmaker and FORM 1 by Formlabs made a successful debut, while sub 100 USD 3D printer like MakiBox, metal Eventorbot or slick Buccaneer failed at different stages.

2018: Year of Chinese 3D Printers

In 2016-2018 chinese manufacturers (Geeetech, Creality, Anycubic, FLSUN, TEVO, CTC etc.) started to develop Prusa i3-like machines and the companies started to copy each others parts and improvements at a rapid pace. As a result, many small US companies, like Printrbot, which contributed significantly to the Open Source movement, closed doors for good (2018).

A big game changer was Ender 3 as manufactured by Creality, priced at USD 150-200 incl. shipment, providing excellent printing quality, at a price which was hard to compete by anyone else. Notable was, Creality open sourced Ender 3 entirely, as the Open Source community built up pressure to chinese manufacturers which spit out each month a new Prusa i3 derivative (e.g. different build volumes, slight improvements of extruders etc) back in 2018/2019.

As a side note, the chinese manufactured 3D printer broke the RepRap principle and used other means to produce their parts, while Prusa Research has a 3D printer farm to manufacture their parts.

Prusa Research 3D printer farm (2018)

Western Innovation & Chinese Manufacturing

Mosquito hotend by Slice Engineering (2018) Closed Source, Patent Pending

It became obvious the past years (2010-2019), that true innovation still remained in the west, Czech-based Prusa Research, Denmark-based RepRap.me with Diamond Hotend (3-in-1 and 5-in-1), or UK-based E3D or US-based Slice Engineering with their hotends and extruder technology, and the chinese manufacturer which cloned or copied the Closed- and Open-Source designs within weeks and sold at fraction of the price as by the original inventors. Often chinese manufactures tried to simplify hotend designs and compromised significant features – to copy a design didn’t mean the design was understood.

E3D Hotend Timeline: E3D V4, V5, Kraken, Chimera, Cyclops, V6, Lite6, Titan Aero, Titan Aqua, Hemera (2013-2020)

As pointed out, Creality, one of the big chinese 3D printer manufacturer, started to adapt and join the Open Source Hardware movement, with the release of the Ender 3 source files and get properly certified – time will tell – as of end of 2019 – if they stay true to their commitment, and whether other chinese 3D printer manufacturer follow and become also actual innovators.

In late 2020 Creality announced a belt-based printer named CR-30 aka 3DPrintMill as a result of collaboration with Naomi Wu and acknowledging all the previous research of developers like Bill Steele and Karl Brown (White Knight Belt) the printer is based on – and renewed their commitment to Open Source the CR-30 – a nice development.

2021: Voron, Prusa XL, E3D Revo

A loosely organized Maker group developed various 3D printers under the brand Voron Design which gained momentum in the Maker community:

  • CoreXY (Voron 0.x, 2.x, Trident) or CoreXZ (Voron Switchwire)
  • sturdy well engineered frame design
  • tuned toward reliable and fast printing
  • properly documented (CAD models, bill of materials)
  • fully open source
  • no commercial frontend (no single store to buy assembled Vorons, only kits)

Voron printers became well-known in 2021 and widely adapted among people who wanted to build their own printers.

Various skillful Makers tuned the printer design toward very fast printing, high motion speeds and acceleration, to achieve 3D Benchy prints below 10mins at acceptable quality aka “Speed Benchy”.

Prusa XL (CoreXY)

At Formnext 2021 (November 2021) Prusa Research announced the Prusa XL, a CoreXY cubic frame 3D printer, with interesting features:

  • ability to sense blocked nozzle, indirectly by measuring bending of print head with a load cell
  • autoleveling done mechanically via same load cell
  • multiple heating zones in the build plate (only heat where part resides)
  • multi-material with optional tool changer
  • foldable curtain to maintain more regulated air temperature within the printer
  • build-volume 360x360x360mm
E3D Revo: different nozzle sizes (color coded) manually interchangable

Also in fall of 2021 E3D announced its new generation of print heads, Revo:

  • manual (un)mounting of print head without tools
  • nozzle and heatbreak combined
  • spring loaded tension of heat cartridge with nozzle
  • partially patented

2022: MakerBot & Ultimaker Merge, Bambu Lab’s X1

In May 2022 MakerBot, owner of Thingiverse and part of Stratasys, announced together with Ultimaker they would merge the coming months, and in September announced to become UltiMaker. MakerBot, who plays no significant role in regards of hardware development anymore, and software development being neglected as well, incl. Thingiverse lumping since many years.

Ultimaker became monetary successful the past years is also showing inertia in hardware innovation, resting on existing hardware designs, at the same time committed to push software development with Cura slicer with fine-tuning details of the slicer, and still doing most of it under Open Source, admirably.

Bamboo Lab X1

Another significant announcement happened in May 2022: Bambu Lab, founded by former DJI (drones) employees, worked the past two years on a new printer called “X1“, which has features hardly even seen in industrial 3D printers:

  • printing fast at 400mm/s with 10,000 to 20,000m/s2 accelleration
  • auto leveling (no manual calibration)
  • auto tuning pressure advance with LiDAR sensor
  • first layer analysis with LiDAR sensor, measure height and width of extrusions
  • video analysis of failed prints using built-in camera and AI
  • multiple materials (up to 16 spools/materials)
  • dedicated slicer (being open sourced later)
  • competitive price with USD 900-1500

The only downside is the rather moderate build-volume with 256x256x256mm, but they control that tightly unlike anyone before.

2023 & 2024: Incremental Upgrades

Formlabs resin printer series 4 switched from laser based SLA to UV-light & LCD based MSLA procedure (EUR 5,000-10,000), like the rest of prosumer and consumer resin printers. In June 2024 Micronics LLC launched a Kickstarter compaign for their SLS printer priced at USD 2,500, and after the finish of the compaign, the company was acquired by Formlabs.

Resin printing with more specialized resin types entering SLS and FDM domain (from Formlabs Keynote 2024):

Prusa Research introduced SL1S resin printer in 2021 with a tilting vat, and Elegoo followed then with Mars 5 Ultra & Saturn 4 Ultra in 2024, priced at EUR 300 & 400, also having a tilting vat / tilt release mechanism, which decreases layer printing time by ~50% from ~10s to ~5.5s, and therefore overall printing time as well, e.g. increase from 18mm/hr in Z height to 32mm/hr at 50μm or 64mm/hr at 100μm layer height.

Elegoo also introduced a massive FDM OrangeStorm Giga with a build volume of 800x800x1000mm, priced at EUR 2,500. Sovol SV08 (Voron 2.4 / CoreXY) becomes available at USD 750, with a build volume of 350x350x330mm.

Stratasys sued Bambu Lab in August 2024 about infringment of 10+ patents:

  • purge towers for multi-color printing
  • heated build platforms
  • force detection systems
  • networked printing capabilities
  • filament detection/identification

It seems Bambu Lab has reached of market share where they are relevant for Stratasys, e.g. also protect their UltiMaker branded prosumer FDM series which have shown no relevant innovation since 5+ years.

See also at RepRap Principle, RepRap.org Blog Archive and RepRap Magazine Archive to read about early RepRap movement (2000-2010).


That’s it.

RepRap.org Blog Archive

A History of RepRap Development (2012) [PDF]

A treasure of knowledge as posted on blog.reprap.org was collected by Gary Hogdson, which I host here as well for archival purposes:

Early research for

  • extruders, nozzels, heating blocks
  • printing material research ABS, PLA and other materials
  • slicing algorithms
  • deciding to use Arduino as motor controller

Notable Excerpts

RepRap Family Growth

Adrian Bowyer summarizes RepRap history April 18, 2011, in brackets the amount of RepRaps:

  • Spring 2007 – The first RepRap Darwin was finished. Its RP parts were made in a Stratasys Dimension. [1]
  • During that summer we made four or five sets of parts for the machine in the
    Stratasys and sent them to RepRap team members round the world.
  • September 30, 2007 – Vik Olliver in New Zealand finished the second Darwin. [3]
  • Around Christmas 2007 – A number of people start to make wooden and lasercut copies of Darwin. The Bath RepRap Lab also supplied a Stratasys-printed set of Darwin parts to Ian Adkins of Bits from Bytes, who created silicone moulds from them and started selling Darwin copies made by PU moulding. [8]
  • February 21, 2008 – Zach Smith (now also of MakerBot) gets his Darwin working. [20]
  • February 22, 2008 – Ponoko have a lasercut version of Darwin.
    Spring 2008 – Lots of the wooden and moulded Darwin-type Repstraps are working, and people start using them to print RepRaps.
  • April 2008 – Nophead starts printing Darwin parts on his Repstrap Hydraraptor. [60]
  • May 29, 2008 – Vik Olliver’s Darwin has made a full set of parts for another
    Darwin; these are assembled in New Zealand and finally tested when he visits at Bath University in the UK. This is the first true RepRap replication. [100]
  • Summer 2009 – RepRap Mendel introduced. [400]
    Around this time Nophead, I, and many others went into serious production
    selling reprapped sets of parts for RepRaps made in RepRap machines on Ebay etc. Summer 2010 [1500]
  • Spring 2011 – Nophead alone has made over 100 RepRaps for other people. I have made over 50. [4000]

Prusa Mendel Announcement

October 4, 2010 Josef Prusa announced his Prusa Mendel version with this post:

He eventually iterated to Prusa i3 May 2012, which became quasi standard for low-cost FDM 3D printers.

See also 3D Printer History.

Print3r

Note: As of 2023 I started a rewrite Prynt3r in Python, reimplementing Print3r (Perl).

Print3r or print3r (pronounced print-three-r) is a command line tool (CLI) which supports:

  • multiple different slicers (Cura, Slic3r, PrusaSlicer, Mandoline, KiriMotoSlicer) with same unified settings
  • multiple 3D formats more than what each slicer supports:
    • STL, OBJ, OFF, AMF, 3MF, 3MJ and also
    • OpenSCAD (.scad), OpenJSCAD (.jscad), ScriptCAD (.sccad)
    • FCStd, IGES, STEP and Brep (using FreeCAD2Any helper)
  • networked/cloud printing built-in with multiple 3D-printers

Usage

% print3r [<options>] <command> <file1> ...

commands:

  • print: print the part (and perform necessary conversions to achieve print)
  • slice: just slice the part to gcode with slic3r, slic3r-pe, cura, cura-legacy or prusa
  • preview: preview print as gcode
  • render: render image of print
  • gcode: send Gcode from command-line
  • gconsole: start Gcode console to interactively send commands
  • client: enable remote printing (start client mode)
  • log: query past logged prints

Print (Convert & Slice & Print)

% print3r print cube.scad
% print3r print cube.stl
% print3r print cube.gcode
% print3r --scad print "cube(20)"

Slice (Without Printing)

Just slice the part to Gcode:

% print3r --output=cube.gcode slice cube.scad
% print3r --output=cube.gcode slice cube.stl

Preview (Without Printing)

Preview the resulting Gcode:

% print3r preview cube.scad
% print3r preview cube.stl
% print3r preview cube.gcode
% print3r --scad preview "cube(20)"

Render

Render the Gcode into an image:

% print3r --output=test.png render cube.scad
% print3r --output=test.png --scad render "cube(20)"
% print3r --output=test.png render cube.stl
% print3r --output=test.png render cube.gcode

Cloud Printing (Server/Client)

Create a printhub by starting print3r in client-mode:

% print3r --device=/dev/ttyUSB0 client &
% print3r --device=/dev/ttyUSB1 client &

On the another host you can address the printhub(s):

% print3r --device=tcp:192.168.0.23:0 print benchy.stl
% print3r --device=tcp:192.168.0.23:1 print calibrationCube.stl

Usage Overview

Print3r (print3r) 0.2.0 USAGE: [<options>] <cmd> <file1> [<...>]

   options:
      --verbose or -v or -vv  increase verbosity
      --quiet or -q           no output except fatal errors
      --baudrate=<n>          set baudrate, default: 115200
      --device=<d>            set device, default: /dev/ttyUSB0
      --slicer=<slicer>       set slicer, default: slic3r
                                 slic3r, slic3r-pe, cura-legacy, cura, prusa
      --printer=<name>        config of printer, default: default
      --version               display version and exit
      --output=<file>         define output file for 'slice' and 'render' command
      --scad                  consider all arguments as actual OpenSCAD code (not files)
      --scadlib=<files>       define OpenSCAD files separated by "," or ":"
      part preprocessing:
         --random-placement   place print randomly on the bed
         --auto-center        place print in the center
         --multiply-part=<n>  multiply part(s)
         --scale=<x>,<y>,<z>     scale part x,y,z (absolute if 'mm' is appended)
         --scale=<f>             scale part f,f,f
         --rotate=<x>,<y>,<z>    rotate x,y,z
         --translate=<x>,<y>,<z> translate x,y,z
         --mirror=<x>,<y>,<z>    mirror x,y,z (0=keep, 1=mirror)
      --<key>=<value>         include any valid slicer option (e.g. slic3r --help)

   commands:
      print <file> [...]      print (convert & slice & print) part(s) (.scad, .stl, .obj, .gcode)
      slice <file> [...]      slice file(s) to gcode (.scad, .stl, .amf, .obj, .3mf)
      preview <file> [...]    slice & preview (.scad, .stl, .obj, .gcode)
      render <file> [...]     render an image (use '--output=sample.png' or so)
      gcode <code1> [...]     send gcode lines
      gconsole                start gcode console
      client                  map USB connected printer to network (per device)
      help

   examples:
      export PRINT3R "printer=my_printer" --OR-- setenv PRINT3R "printer=my_printer"
      print3r slice cube.stl
      print3r --layer-height=0.2 --output=test.gcode slice cube.stl
      print3r --printer=ender3 --device=/dev/ttyUSB1 print test.gcode
      print3r --printer=corexy --device=/dev/ttyUSB2 --layer-height=0.3 --fill-density=0 print cube.stl
      print3r --printer=ender3 --device=tcp:192.168.0.2 --layer-height=0.25 print cube.stl
      print3r print cube.scad
      print3r --scad print "cube(20)"
      print3r gcode 'G28 X Y' 'G1 X60' 'G28 Z'
      print3r gconsole
      == Print3r: Gcode Console (gconsole) - use CTRL-C or 'exit' or 'quit' to exit
         for valid Gcode see https://reprap.org/wiki/G-code
         conf: device /dev/ttyUSB0, connected
      > M115
      ...

Slicers

Following slicers are supported via --slicer=<slicer>:

  • slic3r: Slic3r
  • slic3r-pe: Slic3r Prusa Edition
  • cura-legacy: CuraEngine 15.04 with old profiles
  • cura: CuraEngine 3.x or later
  • prusa: PrusaSlicer

/usr/share/print3r/slicer/<slicer>/base.ini contains the base settings for a particular slicer.

Print

print command converts, slices and sends the resulting Gcode to the USB port of your choice.

% print3r print cube.scad
% print3r --scad print 'cube(20)'
% print3r print cube.stl pyramid.obj
% print3r print cube.gcode

Part Preprocessing

All part-preprocessing operations can be used in combination of printslicepreview and render command:

Placement

  • --random-placement place print randomly on the bed to evenly use the entire bed
  • --auto-center place print in the center (default)
% print3r print cube.scad
% print3r --auto-center print cube.scad
% print3r --random-placement print cube.stl

Multiply Part

--multiply-part=<n> multiply part(s)

% print3r --multiply-part=2 print cube.stl
% print3r --multiply-part=2 print cube.stl dodecahedron.stl
% print3r --multiply-part=2 preview cube.scad pyramid.stl

each part is multiplied, --multiply-part=1 is redundant.

Scale

  • --scale=<x>,<y>,<z> scale part x,y,z (absolute if ‘mm’ is appended)
  • --scale=<f> scale part f,f,f

whereas each value can be:

  • <float> = multiplier, special case 0 = scale proportionally
  • <float>% = multiplier in percent
  • <float>mm = force to x mm absolute length and scale all axis set to 0 proportionally
% print3r --scale=2 preview cube.scad
% print3r --scale=200% print cube.stl
% print3r --scale=2,1,0.5 print cube.stl
% print3r --scale=20mm,0,0 print box.stl
% print3r --scale=20mm,2,1 print box.stl
% print3r --scale=300mm,30%,1 print box.stl

Rotate

--rotate=<x>,<y>,<z> rotate x,y,z where is each angle 0 .. 360 deg

% print3r --rotate=90,0,0 preview toy.scad
% print3r --rotate=90,0,0 print toy.stl

Translate

--translate=<x>,<y>,<z> translate x,y,z whereas each value in [mm], disables --auto-center and --random-placement.

% print3r --translate=-40,20,0 print cube.stl

Mirror

--mirror=<x>,<y>,<z> mirror x,y,z (0=keep, 1=mirror), the same can be achieved with --scale= by using -1 (mirror) and 1 (keep):

% print3r --mirror=1,0,0 print toy.stl
% print3r --mirror=0,1,0 print mount.stl
% print3r --scale=1,-1,1 print mount.stl 

Slice

slice command converts and slices the model to Gcode file, best set --output=file.gcode to define the filename.

% print3r slice cube.scad
% print3r slice cube.stl
% print3r --output=cube.gcode cube.scad
% print3r --slicer=cura --output=cube.gcode cube.scad
% print3r --slicer=slic3r-pe --output=cube2.gcode cube.scad

Preview

preview command converts, slices and display the resulting Gcode with yagv Gcode viewer.

% print3r preview cube.scad
% print3r --slicer=cura preview cube.scad
% print3r --slicer=cura --printer=prusa-i3 preview cube.scad
% print3r --slicer=slic3r-pe --printer=ashtar-k-1 preview cube.stl pyramid.stl

Render

render command converts, slices and renders the resulting Gcode into a PNG image, best set --output=test.png to define the filename.

% print3r render cube.scad
% print3r --slicer=cura render 3DBenchy.stl
% print3r --slicer=cura --printer=prusa-i3 render cube.scad
% print3r --slicer=slic3r-pe --printer=ashtar-k-1 --output=set.png render cube.stl pyramid.stl

Gcode

gcode command allows to send Gcode in the command line directly:

% print3r gcode 'G28 X Y'
% print3r gcode 'G28 Z'

Gcode Console (gconsole)

gconsole command launches an interactive console to send Gcode and custom commands to USB connected printer:

== Print3r: Gcode Console (gconsole) - use CTRL-C or 'exit' or 'quit' to exit
   for valid Gcode see https://reprap.org/wiki/G-code
conf: device /dev/ttyUSB0, connected
> 

Commands

  • any valid Gcode line
  • in gconsole/commands reside a few gcode script which simplify handling:
    • homehomexhomeyhomezhxhyhz: homing all or individual axis
    • left <n>right <n> move left or right (X-axis) relatively
    • up <n>down <n> move up or down (Z-axis) relatively
    • forward <n>back <n> move forward or back (Y-axis) relatively
    • x <n>y <n>z <n> move each axis absolutely
    • nozzle <temp> set nozzle temperature
    • bed <temp> set bed temperature
    • off turn everything off (motors, nozzle, bed)
> homex
send <G28 X>
-----
X:0.00 Y:0.00 Z:5.00 E:0.00 Count X:0 Y:0 Z:16000
ok
.
> right 10
send <G91>
-----
X:0.00 Y:0.00 Z:5.00 E:0.00 Count X:0 Y:0 Z:16000
ok
.
send <G1 X10>
-----
ok
.
> _

Download & Install

Visit https://github.com/Spiritdude/Print3r or choose the latest release.

More Information & Details

Misc: VERRF 2020 Videos

East Coast RepRap Festival (ERRF) held a virtual conference October 10 & 11 2020, worth to glance over:

Day 1 Sponsors & Exhibitors

Notable presentations:

Day 2 Sponsors & Exhibitors

Notable presentations:

That’s it.

CAD: ScriptCAD.org Prototype (2019/12)

Around February 2019 I bootstrapped a scripted CAD environment named “ScriptCAD”, and resembles closely to OpenSCAD.org and OpenJSCAD.org (which I co-developed for a couple of years) with a new take, developed from scratch:

ScriptCAD.org: ScriptCAD Logo 2019/11
  • Scripting capability using JavaScript
  • Separate internal representation from display representation
    • Triangulation or Implicit representation
    • only triangulate at late stage at display or export
ScriptCAD.org Internal Stages
  • Intuitive Graphical User Interface (GUI)
    • Simple export various formats
    • Select top-level solids
    • Source <-> TreeView <-> 3D Model selection
Select Source <-> TreeView Item <-> 3D Model

The transparent Source vs Object Tree vs 3D Space has been in the back of my mind for a long time as I keep the connection of each stage intact and transparent.

  • Ease of use
    • hiding JS module complexity and notions
    • Browser use (either use built-in editor or drag-n-drop source with autoreload)
    • Command Line Interface (CLI) use

Screenshots & Examples

SpiritCAD.org Online as Preview

As of November 2019, ScriptCAD.org is reachable as an early preview (alpha stage), most examples work, some do not yet or display wrong output.

Note: there is only limited documentation yet (2019/11), and the API is subject of changes.

I still tune it to my use-cases and therefore API and overall design of the API might change, even drastically; once the API becomes more stable I will release the source code as well.

Some of use-cases (as seen in the gallery above):

  • coding low-level Gcode and use ScriptCAD to preview (render) Gcode including colors, scriptcad (CLI) outputs .gcode to actually print
    • testing single layer color mixed 3D Printing: forms, color mixing
  • ScriptCAD uses ThreeCSG/csg.js at its core to perform CSG operations, which can be very slow – hence, designing complex pieces can be slow as every change recomputes all again (I like to avoid this in future developments) yet as of 0.3.2 basic caching is implemented so only deltas are recomputed.

Introduction Video

The on-going development I document also. That’s it.

Misc: Formnext 2019 Videos

A few worthwhile videos done by 3DMN (3D Maker Noob), Vector 3D (Adam) and others at Formnext 2019. I will update this post as more interesting videos become available.

  • 2019/12/11: added 3DMN Trilab DeltiQ 2 video
  • 2019/12/02: added Joel’s (3D Printing Nerd) Formnext 2019 video

3DMN: BCN3D Epsilon

BCN3D Epsilon by BCN3D:

  • build volume: 420 x 300 x 400mm
  • dual independent extruders / printheads (IDEX)
  • price: 7000 EUR

3DMN: Craftbot’s Flow Generation

Craftbot Flow Generation:

  • dual independent extruders / printheads (IDEX)
  • build volume: 425 x 250 x 250-400mm
  • price: 3200-4000 EUR (plus VAT)

3DMN: Trilab DeltiQ 2 (Delta)

Trilab DeltiQ 2 (Delta) specifications:

  • build volume: 250mm diameter with 300m height
  • bowden style, optionally direct drive style setup (Trilab FlexPrint)
  • price: 2600 EUR (minimal configuration)

Vector 3D: Continuous Carbon Fibre by Anisoprint

Anisoprint mixes Nylon, PC, PLA, TPU and PETG with carbon fibres (CCF) in their continueous 3D printing procedure.

Vector 3D: Dyze Design & Craftbot

Dyze Design: High volume printing from pellets with 1-5mm large nozzles.
Craftbot: Briefly discusses “Craftbot Flow Generation” 3D printer series, not very informative (sales talk).

Vector 3D: More of Formnext 2019

  • Tiertime X5 by Tiertime: automatic bed switching
  • Prusa Mini by Prusa Research: low cost Prusa printer at 380 EUR
  • Phrozen by Phrozen3D: DLP printer
  • Raise E2 by Raise3D: dual independent printheads (IDEX)
  • BuildTak: build sheets / platforms
  • The Box by BLB Industries : really printing big > 1000mm with 1-14mm nozzles with pellets

Vector 3D: Best of Formnext 2019: FL 300 by FuseLAB

FL 300 Revolving Extruder

Adam from Vector 3D select the FL 300 by FuseLAB as “best of”:

  • revolving filament extruder (proprietary, patent pending)
  • dual printheads
  • price ~7000 EUR

It surely is an interesting design, but I wonder what this additional complexity adds in actual print quality.

3DNatives: Top 5 (Industrial) 3D Printers

  1. AM Polar i2 by DP Polar: rotating platform
  2. C3600 Ultimate by 3DCeram: ceramic printing
  3. Meltio M450 by Meltio: metal powder & wire printing
  4. T3500 by Tractus3D: huge delta, FDM
  5. LASERTEC 125 BY DMG Mori: 5 axis milling combined with direct energy deposition

3DNatives: Top 5 3D Printing Applications

  1. 3D printed boat by Autodesk, endless fiber & resin
  2. 3D printed car by BAC & DSM, carbon fiber & graphine
  3. 3D printed robot by 3DGence: PEEK, Nylon and PLA
  4. 3D printed bike by VMR: SLM metal printing
  5. 3D printed dinosaur by Lincsolution: SLA printed

igus: 3D Printed Wear Parts

igus: more infomercial, yet informative: wear resistant filament / prints (e.g. gears) with their own polymer mixture called “iglidur”, optionally also food save.

3D Alliances: Xact Metal

XM200C by Xact Metal:

  • SLM (Selective Laser Melting), metal powder based
  • build volume: 127 x 127 x 127mm
  • price 90K EUR (considered low-cost 2019/12)

3D Printing Nerd: Formnext 2019

  • Craftbot Glow Generation: closer look at dual independent extruders (IDEX)
  • DyeMension: eye wear with powder bed printing (SLS) and other applications
  • Raise3D: Raise3D E2 also IDEX
  • Desktop Metal: Desktop Metal Fiber contineous carbon fiber mixed with polymer, priced at 35K USD / year; Desktop Metal Shop System, binder jetting at 1600dpi (SLS)
  • BCN3D: closer look to Epsilon (IDEX) also presenting their BCN3D Cura with cloud printing
  • Loctite: resins and bonding polymers

That’s it.

ScriptCAD Reference

This reference covers ScriptCAD Core 0.3.3 (2019/12/29)

Note: ScriptCAD in its current implementation is highly experimental and subject of changes.

Introduction

ScriptCAD is a library, CAD framework and web-site, depending on the context different aspects are meant. In general it allows you to create 2D and 3D geometries with JavaScript, in a very lightweight manner and export them with a particular format for further usage.

In order to reduce verbosity and complexity, you can call cube() and it actually creates an object on a stack or the scene already. You may assign a variable like let a = cube() and then operate on a later like scaling or translating, and even return it from a function. Additionally, you may declare a main() function, if it exists, it will be called.

cube()
   .translate([20,0,0])
   .rotate([0,0,45]);
let a = cube();
a.translate([20,0,0]);
a.rotate([0,0,45]);

So, keep in mind, whenever you call primitives, they will be placed on a stack/scene in that very moment. You may walk through that stack/scene with children(function(c) { ... }) to post-process your scene.

2D Primitives

polygon

polygon(p)
polygon(p,opts)
polygon(p,f)
polygon(p,f,opts)
polygon({points: p, faces: f, ... })

where as

  • p an array of 2D points, and
  • f an array of indices of points defining faces (e.g. triangles).

options:

  • closed: true (default) or false
  • fill: true (default) or false
  • thickness: (default 0 = minimal thickness)

polygon also can be used to draw a line or a polyline, in that case use option closed: false (default true) and fill: false (default true)

polygon([ [0,0], [10,10] ], { closed: false, fill: false }) is a simple line or
polygon([ [0,0], [10,0], [10,10], [0,10] ], { fill: true }) draws a rectangle (closed polyline or polygon)

square

square()
square(w)
square(w, h)
square(w, h, opts)
square({ w: 3, h: 2, ... })

options:

  • fill: true (default) or false

circle

circle()
circle(r)
circle(r, opts)
circle(opts)

options:

  • r: set radius (default 1.0)
  • d: set diameter
  • fill: true (default) or false
  • start: (default 0)
  • end: (default 360)
  • n: amount of segments (default 12)
  • angle: angle rotation (default 0)
  • midpoint: true or false (default)
  • thickness: 0 (default, minimal thickness)

3D Primitives

cube

cube()
cube(2)
cube([2,1,3])
cube([2,1,3], { center: true })
cube({ size:[2,1,3], center: true })

options:

  • center: true or false or and array of 3 true or false, e.g. [ true, false, false] for each axis x, y, and z
  • experimental:
    • chamfer: 0 (default)
    • fillet: 0 (default)

sphere

sphere()
sphere(1)
sphere({r: 1, ...})

options:

  • center: true or false or and array of 3 true or false, e.g. [ true, false, false] for each axis x, y, and z
  • type: angular (default) or icosa
  • n: segments (default 12)

Note: the higher the frequency (n) is, the more computational intensive CSG opertions will be.

cylinder

cylinder(h,r)
cylinder(h,r,opts)
cylinder(h,r1,r2,opts)
cylinder({h:1, r:2, ...})
cylinder({h:1, d:2, ...})
cylinder({h:1, r1: 1, r2: 0, ... })

options:

  • center: true or false or and array of 3 true or false, e.g. [ true, false, false] for each axis x, y, and z
  • n: segments
  • experimental:
    • chamfer: 0 (default)
    • fillet: 0 (default)

polyhedron

polyhedron(p,f)
polyhedron(p,f,opts)
polyhedron({points: p, faces: f, ...})

polyhedron(
    [              // set of points
       [-1,1,0],
       [1,1,0],
       [1,-1,0],
       [-1,-1,0],
       [0,0,1]
    ],
    [              // set of faces
       [0,1,2,3],     // square bottom
       [1,0,4],       // side
       [2,1,4],       //  "
       [3,2,4],       //  "
       [0,3,4]        //  "
    ]
 ).scale(5);

where as:

  • p: array of [x,y,z] coordinates, e.g. [0, 0, 0]
  • f: array of vertice indexes e.g. [0, 1, 2]

Usually one does not manually compose polyhedron() but create such procedurally.

Note: polyhedron() isn’t compatible OpenSCAD polyhedron() as face orientation is reversed in OpenSCAD compared to common standard.

Transformations

translate

obj.translate([x,y,z])
translate(obj,[x,y,z])

scale

obj.scale(f)
obj.scale([x,y,z])
scale(obj,f)
scale(obj,[x,y,z])

rotate

obj.rotate([x,y,z])
rotate(obj,[x,y,z])

where as x, y, and z are angles in 0..360 degrees.

transform

.transform([ t0, t1, t2, ... t15 ])
transform(obj,[t0, t1, t2, ... t15])

4×4 transformation matrix applied.

hull

obj1.hull(obj2, ...)
hull(obj1, obj2, ... )

hull() is quite powerful, and one may reduce complex structures back to hulled 2D or 3D primitives.

linear extrude

.linear_extrude(opts)
linear_extrude(obj,opts)

options:

  • h: height
  • n: segments
  • twist: twist in degrees (0..360)

rotate extrude

.rotate_extrude(opts)
rotate_extrude(obj,opts)

options:

  • start: start angle 0..360 (default 0)
  • end: end angle 0..360 (default 360)
  • caps: true (false) or false in case start != end

CSG Operations

union

obj1.union(obj2, ...)
union(obj1, obj2, ...)

You may consider union() the additive manufacturing principle.

Note: union() operation can be costly in regards of computational overhead.

difference

obj1.difference(obj2, ...)
difference(obj1, obj2, ...)

You may consider the difference() as substractive manufacturing, e.g. drilling a hole (with a cylinder()) into an existing object.

Note: difference() operation can be costly in regards of computational overhead.

intersection

obj1.intersection(obj2, ...)
intersection(obj1, obj2, ...)

Note: intersection() operation can be costly in regards of computational overhead.

exclusive

exclusive(obj1, obj2, ...)
exclusive(obj1, obj2, ..., opts)

options:

  • order: asc (default) or desc

You may consider exclusive() a new CSG operation where all the objects displace each other in ascending or descending order, hence, occupy exclusive space to each other – implementing “there can be no object occupy the same space at the same time”.

  • ascending order (default): each new object dominates and displaces previous ones.
  • descending order: each new object can only occupy the remaining free space left over.

Following illustrations show ascending and descending order, and are post-processed to show the parts aside of each other.

Note: unlike other CSG operations, this returns the same amount of objects as output as it accepted as input, but all objects are altered (this behavior might change in the future, e.g. return a group instead).

Misc Operations

group

group(obj1, obj2, ...)
group()

You may group parts into a group and translate, scale etc again, a kind of lightweight union() while maintaining their properties.

Note: group() functionality is very experimental and behavior with children() and export of AMF, 3MF and 3MJ formats might change in the future.

color

obj.color([r,g,b])
obj.color([r,g,b,a])
obj.color(r,g,b)
obj.color(r,g,b,a)
obj.color(hsl2rgb(h,s,l))
obj.color(hsl2rgb(h,s,l,a))
color(obj,[r,g,b])
color(obj,[r,g,b,a])
color(obj,r,g,b)
color(obj,r,g,b,a)

where as r, g, and b is float 0..1

HSL color model is closer to human concept of colors:

  • h: hue 0..360 degrees (rainbow)
  • s: saturation 0..1
  • l: lightness 0..1 (0=black, 1= white, 0.5 = average)
for(h=0; h<=1; h+=1/12) { 
   for(s=0; s<=1; s+=1/12) {    
      cube().color(hsl2rgb(h*360,s,0.5)).translate([h*12*1.5,s*12*1.5,0]); 
   } 
}

name

obj.name(s)
name(obj,s)

Note: the name of an object is considered when exporting from ScriptCAD, e.g. as STL or 3MJ format, the filename is taken from the name of the object.

% scriptcad -of stl --code "cube().name('my sample')"
scriptcad: writing my_sample.stl [stl]

properties

obj.properties({k1: v1, k2: v2, ... })
properties(obj, { .... })

Note:

  • .name(s) is the same as .properties({name: s})
  • .color([r,g,b]) is the same as .properties({color:[r,g,b]})
  • you are free to add any kind of metadata, some export format will carry those on, e.g. 3MF, AMF and 3MJ format will carry them over

Simple Functions

A few simple functions help to port OpenSCAD source code, e.g. OpenSCAD for() statement resembles the forrange() as provided:

forrange

forrange([start,end],function(i) { })
forrange([start,step,end], function(i) { })

foreach

foreach([a1,a2,a3,...],function(i) { })

ifelse

ifelse(b, function() { })
ifelse(b, function() { }, function() { })

children

children(function(c) { })

whenever you have a scene, you may process all objects again using children()

Scene

ScriptCAD computes in two stages:

  1. computes scene
    • run the code, and create all 2D and 3D forms
    • object tree is formed
  2. render scene
    • all objects are rendered
      • with triangles to display on WebGL or export to polyhedral forms (STL, OBJ, AMF, 3MF, 3MJ etc)

computeScene

computeScene() computes the entire scene with all objects, and summarizes all transformations – at this point no vertices or actual geometries exist, only the representations.

renderScene

renderScene() takes the scene and renders it, in case WebGL or exporting a certain format, then it triangulates all objects in order to display or export.

Important: current implementation of computeScene() calls renderScene().

Import

Formats

  • STL ASCII / Binary: most common format, lasting support for slicers
  • OBJ Wavefront: common format, ASCII-based, compact
  • SCCAD ScriptCAD: native intermittent format describing the scene
  • AMF: multi-material/color format, XML-based, fading support for slicers
  • 3MJ: multi-material/color format, JSON-based, optionally compressed with gzip
  • Gcode: visualize 3D printing process with multitool (color) support

Any format which can be imported can also be Drag & Drop into the browser from a file browser.

Export

Formats

  • STL ASCII / Binary: most common format, lasting support for slicers
  • OBJ Wavefront: common format, ASCII-based, compact
  • SCCAD ScriptCAD: describing scene as intermittent format
  • SCAD OpenSCAD: to exchange with OpenSCAD, all objects are exported as polyhedron() or polygon() in triangulated form
  • AMF: multi-material/color format, XML-based, fading support for slicers
  • 3MF: multi-material/color format, XML-based, compressed with zip, multiple files, cumbersome specification
  • 3MJ: multi-material/color format, JSON-based, optionally compressed with gzip

Drag & Drop

Any Import Formats can be dragged and dropped from file browser into the inline-editor or 3D platform of your browser, and you edit the source with you preferred editor outside of the browser, and ScriptCAD automatically reloads the source and computes & renders the scene.

Command Line Usage

On the command line you can use scriptcad and it will perform:

  • computeScene() and renderScene()
  • and export to the format you desire

best call scriptcad --help for some basic usage information (those change with new version):

ScriptCAD CLI 0.1.5 USAGE: scriptcad {<options>} [<input-file>]
    options:
       -h or --help            print this
       -v or --verbose         increase verbosity
       --version               print version and exit
       -q or --quiet           be quiet (no output)
       -o <fileout>            set output filename
       --output=<fileout>          "             "
       -of <fmt>               fmt: stl, stla, stlb, obj, amf, 3mf, 3mj, sccad, png, gcode (default: stl)
       --output-format=<fmt>
       --unname                unname all solids (enumerate multiple solids)
       --subname               add name to existing export name
       --merge                 merge all top-level solids to one
       --imgsize={w}x{h}       set image size (default: 512x512)
       --lib=<libs>            set libraries (e.g. --lib=./js/extra.js,/lib/sccad/lib.js)
       --function=<name>       set function called (default: main), may include arguments too
       --select=<name>,…       select various solids by name
       --view=<name>           select particular view
       --code                  consider arguments as code

 examples:
       scriptcad -o test.stl example/sample.sccad
       scriptcad -o test.stl --output-format=stla example/sample.sccad
       scriptcad -o test.png --imgsize=800x600 example/sample.sccad
       scriptcad -o fan_adapter-50-40.stl "--function=fan_adapter({aoff:15})" examples/fan_adapter.sscad
       scriptcad -of stl --code 'cube()'
          writes code.stl
       scriptcad -of stl --code 'cube().name("test")'
          writes test.stl
       scriptcad -of stl --subname --code 'cube().name("test")'
          writes code.test.stl

Examples:

% scriptcad -o cube.stl cube.sccad
% scriptcad -of stl cube.sscad
% scriptcad -of png --code 'cube(20)'

End of ScriptCAD Reference

Misc: Formnext 2019 aka “just too much for one day”

I decided to visit Formnext 2019 in Frankfurt (Germany) November 20, 2019. And to give you the essence first, it was too much – 800 exhibitors in two larges halls each with 2 floors – one day is not enough, and others told me, not even two days is enough to have time to absorb what has been shown at this exhibition.

Metal Printing: one of the huge topics of Formnext 2019 was . . . metal printing aka “no more plastic”, it seemed like the motto for 2019, in the corporate sense of it.

The printers were huge, car or even tractor sized 3D printers.

The kind of faceless corporate world:

Ultimaker booth

Ultimaker: So I spotted Ultimaker booth, and asked for “Daid”, nobody seemed to know, but “David” was known (as author and driving force of Cura) but not there, as he left the company 2 months ago I was told – either way, I spoke with Roger Bergs and expressed my gratitude for Cura being Open Source and he replied: “you know, we come from there, it’s part of our company culture” . . . nice to see such a commitment to the Open Source, especially compared to the next:

MakerBot: . . . and to my surprise, there was a mid-sized booth of MakerBot, the owner of the struggling Thingiverse, on the brink of collapse. After some brief delay, I was able to talk to Jason Chan, responsible for Thingiverse who was on site, and we had a brief talk:

MakerBot booth
  • I acknowledged the role MakerBot played in early days of 3D printer development in contrast to the later abandonment of the Open Source principle with the acquisation by Stratasys . . .
  • I pointed out how important Thingiverse was and still is for existing projects, which still reference the STL files on Thingiverse and if it were to disappear it would be devastating and break many projects out there (not all migrated to github or other 3D model repos)
  • further I expressed my experience about other the 3D model repositories being functionally inferior compared to Thingiverse
  • Thingiverse was unbearable slow and unreliable – Jason acknowledged and confirmed my concerns of the current functionality of the site
  • Jason responded as following:
    • only 2 web developers are assigned to Thingiverse maintenance as of 2019/11
    • there is a backlog or debt of problems unaddressed for the years and MakerBot is aware of it (to the public it seemed nobody cares at MakerBot)
    • Thingiverse is costly running it, and provides no (significant) income
    • there are commitments within MakerBot to reboot Thingiverse and fix all the backend issues and resolve the “slowness” of the site (that has been said before, nothing happened – just check @makerbot Twitter account)
    • development of a financially sustainable foundation for Thingiverse, means, to create income – how this is planned he didn’t wanted to reveal in more details
    • MakerBot kind of was surprised of the immense success of Thingiverse of the past years

Josef Prusa: While visiting Hall 11, I came across Josef Prusa walking alone, and I just briefly shared my admiration for his success by combining Open Source and business to a self-sustaining model. I later visited the Prusa Research booth, and it was packed with visitors and and catched this short video showing Prusa Mini in action:

BuildTak: Just a brief talk with Igor Gomes, about their new products and shared a bit of my stuff as laid out on this web-site.

Creality booth

Creality: . . . and there it was, a tiny small booth of Creality – 4 or 5 shy representatives sitting there, and I walked toward them and greeted them in english, and a smile rushed unto their faces (to my surprise), and I expressed my thankfulness of their move to Open Source the Ender 3 entirely, that this move or gesture really was acknowledged in the Open Hardware and 3D printing community in the “West”. In a way it was bizarre, there was this small booth, while in reality, this company had more impact than perhaps the rest of the exhibitors of the entire hall – nobody else ships as many 3D printers as this company as of 2019.

Misc Small Chinese Exhibitors:

Too little time to explore their products in more depth.

E3D Online: Just briefly glanced at their booth, as I watched already videos online of their tool changer, and I was already significantly exhausted.

E3D Online: Tool changing with metalbrush to clean the changing toolhead

NinjaTek: just passing by . . .

FelixPrinters: . . . also too little time and openness left from my side cut this visit short, but their printers looked very well thought out.

Belts

Printing Big

Misc Perls

Anyway, after 7 hours I was exhausted from all the impressions – it was too much of visual stimulis and constant noise – and I left the exhibition and headed back to Switzerland by train again, and arrive at midnight finally – it was worth my time.

That’s it.