Inside the Stratasys Dimension Catalyst CMB File Format

Way back I did a project involving 3D printed reproductions for visually impaired visitors of a science museum. The models were created using photogrammetric reconstruction, based on hundreds of photos of the large-scale exhibits. For production of scaled down tactile models, we chose a Stratasys Dimension BST 768 printer (a FDM rapid prototyping system) because of it’s relatively durable output and simply because we had one available for a comparably low printing fee.

After many hours of correcting, re-sculpting and tweaking around the digital models, I went to the catalyst ® ex program to create the toolpaths for the printer. The interface is really simple. You choose an STL file containing your 3d model, choose the orientation, scale and position on the building platform, and some basic build options (layer resolution, model interior fillings and type of support structure) and it generates the data for the machine stored as a CMB-File.
One thing that annoyed me is that the program only reads STL files, which is aa really terrible 3D file format. Nobody knows why the 3D printing guys back then invented this stupid format not containing any connectivity information or vertex indices. They just could have chosen any then established format from the computer graphics of CAD communities. But well, if it is the standard, I will stick with it, as long as I don’t have to read it back.
But, what annoyed me even more is that there is no possibility to preview the 3D printed version. Before starting the print job, I wanted to make sure that the model was nice enough, for the printing resolution, and that the printer did not introduce strange artifacts (e.g. staircase artifacts on slightly uneven horizontal surfaces). After all, our largest print took over 36 hours, and despite the low printing fees, it is not that cheap at all. So simply doing a test-print was not an option.
Unfortunately, Stratasys does not offer any kind of 3D preview. Catalyst ® ex only shows the 2D footprint on the building platform and statistics about the amount of building material and time needed. The co-installed utility program CMB View allows closer inspection of the CMB file (amongst other file formats). This is basically a slice viewer, displaying toolpaths of one build-slice. Using the home, end, page-up and page-down keys, you can conveniently step through all slices. In the (somewhat hidden) CMB Viewing Options pane (menu View/Controls/CMB…) you can choose among the different kinds of toolpaths to display. In addition, the View/Info/CMB… menu shows some meta-information. In fact, as it turned out, the CMB Viewer allows to browse all information stored in the CMB files.
The slice-viewer can actually display the slices in 3D and may be rotated freely. With the “Show one layer only” option (CMB Viewing Options) turned off, you can even view all slices simultaneously. So in order to see the 3D shape, you may turn off all options except part exterior and view all layers concurrently. However, this is only a kind of wireframe view, not very useful for judging the resulting surface.

To make a long story short, I found no way around, writing my own pre-visualization, which involved figuring out the file format of the CMB files and parsing the file in order to generate a true 3D preview. Now, after almost a year has passed since my first digging into the file format and after several people asked me about them, I decided to share them on my blog.


 

Disclaimer

I did not use any kind of reverse engineering other than educated guessing and trial and error until I managed to parse the few CMB files I had created with catalyst ® ex version 4.2 build 4147. My discoveries are definitely not complete, since I stopped once I got a working version of the outer shell. Although I tried to figure out the meaning of the rest of the values, before I wrote this post, these are only referred from observing existing files, I did not try to alter files to confirm my guesses.
In any case, it may very well be a good starting point for people who want to do further research. Especially interesting would be a coupling between open source path generation tools (e.g. ReplicatorG) to generate paths for the professional printer, since catalyst’s default path generation algorithms are only sub-optimal. Although it would be nice to see improved printing algorithms, I strongly discourage using custom built CMB files on an actual machine, since this may harm or destroy the machine, or in worse cases even more, and it would probably void your guarantee.
Feel free to use my findings, and I am happy if you report back any comments or further results.
 

File Format

As the extension of the generated files (.cmb.gz) suggests, the files are a gzipped version of the CMB file. After extracting, we get a binary CMB file whose format will be described in the reminder of this blog.
 

Field Naming

Many fields of the header can be seen in the CMB View info pane. The names below are according to the names there. L and R corresponds to the left or right number in case of two numbers given. Fields that exist for part material and support material are denoted Part or Supp. I assume that always Part values come first in the file, but this is not verified if values did not differ in the test files.

Values that appear constant in the test-files are given with their values (mostly in hex).

int: 4 byte little endian (large values did not appear, but probably they are unsigned ints)
float: 4 byte little endian IEEE 754 binary32 standard encoding

string
1 int N (number of following characters)
N byte (probably) ASCII encoded characters (no special characters occured -> probably ASCII, code page unknown)
 

Header:

4 byte 33 20 33 20 (ASCII “3 3 “) probably magic number
4 byte 0E 08 05 01 Maybe definition of machine type? 8.5 might be Version R in Info Pane?
1 float Slice height (0.01 in)
1 float Part Volume
1 float Supp Volume
1 string Part material (“P400”)
1 string Supp material (“P400_r”)
6 float Bounding box of needed build room (xMin, yMin, zMin, xMax, yMax, zMax)
//following 12 numbers: Limits in Info pane (CMB View)
1 float Part Area L
1 float Part Area R
1 float Supp Area L
1 float Supp Area R
1 float Part Width L
1 float Part Width R
1 float Supp Width L
1 float Supp Width R
1 float Part Aspect Ratio L
1 float Part Aspect Ratio R
1 float Supp Aspect Ratio L
1 float Supp Aspect Ratio R

1 int #Slices (Total Number of Slices)
1 int Address of Layer Table (absolute address in file, see below)
1 string Comment (“Written by CatalystEX!!!!!”)
1 int always 1 (probably number of pack lists?)

1 string Pack List Name
1 string Version (“7.1 (4147)”)
1 string ? (“dimension”)
1 string Part Tip Size (“T12”)
1 string Supp Tip Size (“T12”)
1 int Build Time (in seconds)

//Following could already be part of the remaining protocol but was always constant
27 bytes ? 10 02 00 00 00 11 00 00 00 04 00 00 00 12 00 00 00 08 00 00 00 11 01 00 00 00 11

//Outline of Area of pack (displayed in catalyst when placing pack)
1 int C (count of vertices of outline)

C times:
1 byte 12
1 float x coordinate of vertex
1 float y coordinate of vertex
 

Tool paths and other controls

The header is followed by the tool paths and other machine control codes.
These are given as a stream of commands, always starting with a control code, followed by its specific data.
 

Command:

1 byte Control Code
x byte Data, depending on Control Code
 

Control Codes:

All control codes that occured will be detailed below. Only the Data part is outlined there.
 

03 End of Program

no Data

This is the very last command. After this, the Layer Table starts directly in the observed files.
 

05 Minimums

1 float minimum X of this layer
1 float minimum Y of this layer
1 float minimum Z of this layer

Always issued as a first command of a layer. It is the minimum in each direction that occurs in this layer. X & Y displayed at “Current level data” in CMB View.
 

06 Maximums

1 float maximum X of this layer
1 float maximum Y of this layer
1 float maximum Z of this layer

Always issued after 05 Minimums. It is the maximum in each direction that occurs in this layer. X & Y displayed at “Current level data” in CMB View.
 

07 End of Layer

no Data

Always issued at the end of one layer. After this command, the layer counter is incremented. The Layer Table (see below) points to the byte following this command, i.e. where the next layer starts.
 

0B Tool Path Way-Point

These obviously move the printing tip to a new location. They can be observed with the step-by-step simulator of CMB View. Probably linear interpolation is used between the current and the given location. No printing velocities or material feed rates are given, so these must be stored inside the machine, probably depending on the current printing mode and maybe also on the width parameter.
There are 4 subtypes depending on the first byte:

Type 0:

1 byte 00
1 float X coordinate
1 float Y coordinate
1 float Z coordinate
4 byte 00 00 00 00 (don’t know its purpose, always zero.)

Probably denotes a fast move, without printing.

Type 1:

1 byte 01
1 float X coordinate
1 float Y coordinate

A horizontal printing move, linearly interpolated from previous position.

Type 2:

1 byte 02
1 float X coordinate
1 float Y coordinate
1 float Z coordinate

An arbitrary printing move, linearly interpolated from previous position. Only pure z moves occured.

Type 3:

1 byte 03
1 float X coordinate
1 float Y coordinate
1 float width

In the CMB View simulator, this is executed in two steps: first the width is set, then the position (X & Y).
The given width is typically 1/100 of what is displayed in the CMB View simulator, but not always. These Values that occured, depending on Mode (fist binary value, second the value in the simulator):

first layer 0.00039 -> 0.0299
support 0.00037 -> 0.037
interface 0.000181 -> 0.0181
support & sparse raster 0.000161 -> 0.0161
part surface & solid raster 0.000201 -> 0.0201
 

0D Mode Change

1 byte Mode
1 byte 00 (maybe reserved when number of modes exceed 256?)

This command is always issued in a layer before any path commands, width is always set to 0 and the tip is in a safe height. Probably all Part Groups and Support Groups in the CMB Viewing Options have their own code. The following Modes occured:

65 “Part Interior”. Part Material. These are walls inside the part, when using sparse filling. The Sparse Raster is attached to these walls.
66 “Part Surface”. Part Material. This is the outer wall, printed exactly.
67 “Sparse Raster”. Part Material. When using sparse filling, the pattern inside parts. Is rastered diagonally, directions alternating with each layer.
68 “Solid Raster”. Part Material. Dense part filling, rastered diagonally, directions alternating with each layer. Used in dense filling, but also at some regions with sparse filling.
6B “Part First Layer”. Part Material. The filing of the first printed layer that fuses with the base. Sparse diagonal raster, printed after the perimeter (6E).
6E “Part First Layer Perimeter”. Part Material. The outline of the first printed layer that fuses with the base.
C8 “Support”. Suport Material. Outlines and fillings.
CA “Interface”. Support Material. The top layer of support material, before Part Material is printed on it, or touching on the side. Dense raster.
CB “Sparse Bridge”. ?

This command at least sets the material. Probably other parameters are set as well inside the printer. Why would they make a difference if not? Only for the visualization?
 

Layer Table

Follows always directly the tool path section (after control code 03), but could probably start at a different location, since its address is given in the header.

#slices times (value in header):
1 int Absolute file address at which layer i starts (Always the byte following the “end of layer” control code 07)
 

End of File:

2 byte A6 00 (constant?)
6 byte maybe checksum?
4 byte 00 00 00 00 (end of file?)
 

Typical Control Sequences

Here are some general observations of how the printing files are typically composed. If you plan to write your own file, better observe the inherent printing rules more closely. Be aware, that using the printer with custom print files may void your guarantee, if not worse. I do strongly discurage such practice!

Always, first the outlines are printed, then the fillings. Fillings are always 45° diagonally, alternating directions with each layer.
Each job starts with a Part material layer “Part First Layer Perimeter” filled with a semi-dense “Part First Layer”. This fuses well with the base material and is probably performed to have a stable bond with the base.
After this, the support material base is printed. The first 3 layers are slightly smaller than the first layer, but the fillings match exactly. Following 3 layers are more densely filled in the other direction, and finally one dense Interface layer is printed, without outlines.
After this, the first Part Material layer starts, containing support material as needed.
Support and Part material may alternate its printing order with each layer in order to reduce necessary material change.

Each layer starts with 05 Minimums, 06 Maximums followed by one or more print sequences.
A typical print sequence
1) starts with a 0D Mode Selection,
2) a 0B 00 Move (sometimes 0B 01, if no material change occurs and we are already at the safe height) to the start position typically (e.g. not for the first layer) in a safety height (0.026 inches higher),
3) a 0B 02 Move down to printing height at the same XY position (not issued when the previous command was already on the printing height),
4) a 0B 03 setting of the width (possibly starting material) with already the second XY position,
5) and a sequence of 0B 01 Moves for the remaining path.

Printing ends with
6) a 0B 03 setting width to 0, still issuing the last point of the shape. I think I observed, that this last point is often moved into the inside of a part, maybe to put the possible plastic fin of stopped extrusion somewhere, where it is not perceptible.
7) a 0B 02 move to a save height (at same XY position)

After this, it either goes with a 0B 01 move to the next position and starts again from 3), a Mode change occurs and it starts from 1), or an end of layer occurs (07), either starting the next layer, or the printing ends (03).
 

Source Code

I have a C# test implementation I used to figure out the file format. It extracts all modes of all layers as SVG charts, and the outer shell as a VRML file (as lines, and as solid stacked disks).
It is part of a larger package, so I need more time to separate the code. If you are interested, please post a comment, so I will be doing it with higher priority.
 

Disclaimer (again)

All this has been created by simply observing the generated cmb files, and educated guessing. No reverse engineering, no decompilation of provided programs was necessary.
The information above is provided as is. I am not responsible for any consequences caused by missing or incorrect parts.
I strongly discourage writing and using your own CMB files, since this may harm or destroy your printing machine.

Advertisements

66 Comments to “Inside the Stratasys Dimension Catalyst CMB File Format”

  1. Superb work – I’ve never seen any documentation on the CMB format, official or otherwise. Thanks very much for sharing!

    As for the intelligence of the STL file format, consider that it was invented around 1986 – there really wasn’t much in the way of 3D file formats at that time, especially none that could really be considered standard. Sure, there’s better methods, but as far as being the lingua franca of 3D printing, I’d say the format has held up reasonably well.

    • Thanks, I’m glad if somebody can use it.
      Well, I don’t like STL from my side of use, as it is suboptimal to read a format that does not use indexed vertices. But, wow, 1986? Is stereolitography still that old? Don’t know when the alternatives arrived. OBJ or PLY are quite old, but maybe not that old. Anyway, thanks for your comment.

  2. Glad to see someone looking into this format. I’ve a few old cmb files that I lost the original file for. I was tempted to see if it would be possible to convert them into a STL file (or better) for further processing.

    A interesting thing I’ve noticed is that each cmb file is generated for a specific printer. This is where the material type and tip size come into play. The Catalyst ® software refuses to send a print job from one printer ‘type’ or ‘gender’ to another.

    Drop me a line, we should compare notes.

    • Restoring the geometry: Well, my (yet to be published) code actually converts the CMB back into a geometry file. More specifically the outer print path, therefore a little bit smaller, but it would be not too complicated to enlarge the files by half the extruder thickness. But it is of course rather high poly, since it is of course sliced. Hopefully I find some time to publish the code soon…
      Printer specific: That is interesting. Did not notice this, since we only had this one printer. But makes sense, since the full paths are stored in the file, and depending on printer-specs these might differ from printer to printer. There we would probably also see the other command codes. Best I release the code, and you can check if it can read your files… If you need it fast, I think it is not too complicated to write a parser on your own, though.

      • I’m in no rush. I’m just pleased to see someone hacking the cmb file format. I’ve heard it referred to as P-Code, and it does seem to be a distant cousin of G-Code from CNC machining.

        In Catalyst you should be able to manually add a different printer. When you do you’ll notice a few things change in the output file.

  3. Hello! We own a SST 768 printer and are thinking to use the Insight Software to create a CMB file and to use the Catalyst Ex to send it to the printer. Would this work changing some parameter inside the CMB file?

    • Hello Jarno! Sorry, I don’t know the Insight Software nor the SST 768. Maybe some of the other commenters can answer the question? In any case I would be careful, using a BST file created for another Printer, since build-size or commands could change. But If you analyze the BST files for the SST 768, maybe you notice only small differences to the format I posted. I got a note, that the constant string “dimension” actually refers to the machine. So probably you only have to change this entry to the string of the SST 768 (which I don’t know). In any case, good luck, and be careful to not destroy your machine!

      • The Insight is the CatalystEX for the Fortus line of Stratasys. I can provide CMB files created on a Fortus 250mc if anyone is interested in analyzing and comparing it to the Dimension CMB file. Unfortunately, the Catalyst is very simple and not offer some finishing features the Insight does. It´s a shame that Stratasys limits the Dimension printer to a low-level quality production, because the printer could do much more.
        I will try do not destroy the machine 😉

  4. That is a good job, thanks for sharing with the world.
    The next trick would be to be able to generate some compatible code for, let’s say, a dual head Replicator (for exemple) loaded with both support and model materia, directly from a Stratasys .cmb.

    It would cut the cost of ABS in 1/20th, the Stratasys prices are honestly insane when it turns to printing material…

    • Yea, having the opportunity to use the CMB file in various ways would help us to increase the value of either printers or toolpath generators. I can supply CMB files generated with the Insight software for a Fortus 250mc, same building volume as the 1200es series. I think some programmers here could find out the parameters to change and write a small converter app with input output settable varialbles. Are some crazy programmers here? 😉

      By the way, we are buying our ABS at iSquared in Germany, one third less comparing to original Stratasys and you can use ABSplus and ABS M30 material!

  5. Hi guys! I have found a very interesting software for slicing the 3D files. http://slic3r.org/
    Would be nice to have this software exporting a valid CMB file to use inside Catalyst EX.
    Any interested to create a working group for this challange?

    • Jarno, i am interested in this project. So, please, contact me by mail: oleg @ eonmail . ru (remove spaces)

  6. Great job. Thanks for sharing.
    I have been looking to the header section of a cmb file and I found out that before each string there is a integer with the length of the string. 🙂
    By now, I am trying to read the file and try to find out the tool path by my own. How is your code? Does the code could be shared already?

  7. I can assist to provide info from a SST1200es..with Catalyst… would love to run Fortus insight software on it

  8. I’ve made some basic steps to reverse engineer 1200 machine. Here you can see them: http://kisslicer.com/forum/index.php?topic=375.0

  9. Hi
    Is it possible that since V 9.0 Insight Cmb’s has changed??? I can’t read the files in catalyst after changes parameters in cmb to Catalyst basics.

    • Sorry, I’m not familiar with newer versions. This was a one time thing, I needed for a project. I didn’t do any 3d Printing recently. Only CNC-milling.

  10. Hi gandalf,

    did you managed to print out models with Catalyst using Insight 8 for CMB file generation??

    I was able to read CMB files with Catalyst generated by Insight, and you can see it well with the CMB Tool telling you it is a SST 768 file. But, at the time of sending the file from Catalyst to the SST 768 printer it comes to an error 😦

    Anyone have had success?

  11. Hi Jarno
    Yes I have success to print the helix-cmb file with the Catalyst-EX. 😉 If you need more Info call my private cmb [a t] progressive-tool[p o i n t] eu.

  12. Advise anyone how to print cmb from Insight by Catalyst on 1200es?

  13. A related query: I want to be able to adjust my Dimension 1200 SST Elite in order to be able to run materials of my own choosing, adapting the black-box Catalyst software so that temperature, extrusion speed, pauses and extrusion-head path speeds can be refined. The major motivation is to be able to use the machine to build high-performance parts using transparent materials with optical qualities, heavy-duty materials such as nylon, and flexible material, and also to optimize extrusion paths in order to enable design of structural orientations for extrusion filament paths. Since the machine was infernally expensive, I should have the right to adjust it (at my own risk of course). I have no intention of violating intellectual property and patents, I just want to be able to adjust the performance of my machine. If you are able to help me adjust the printing/machine operation software and give the ability to adjust those controls it would be tremendously helpful! Your advice would be greatly appreciated.
    Philip Beesley
    http://www.philipbeesley.com
    pbeesley-pbai@rogers.com

  14. Has any more work been done on this as I get things slightly different. After “Written by CatalystEX!!!!!” I get packs but then I get name of model before type of printer eg gear, Dimension. I then follow the above until the 27 bytes, my bytes are similar but not exactly the same ” 10 03 00 00 00 11 00 00 00 04 00 00 00 12 00 00 00 08 00 00 00 14 00 00 00 04 00 ” and after that I lost it, nothing makes sense.This is version 4.4 CatalystEX CMB file. I will try an older version of Catalyst because the files must be different, I get a warning in 4.4 if I open a file made in 4.01.

    I am currently interested in creating 2 colour prints by changing the PART/SUPP control byte

    • Mistake above. Pack list name is there, I just missed it in the list.

      OK, more looking and the 27 bytes from Catalyst are 35 bytes on CatalystEX. These 35 bytes seem to be mostly 4 byte INT numbers, no idea what the are. Following this is the “Vertices” number then the “byte(12) float float” of the vertices.

      The question is does the printer accept either format of file without errors? If so then this would make you think that command order within the CMB file is not critical.

      It’s baking my noodle is this.

      • Hi John,
        nice that someone is trying to upgrade these findings to a newer version.
        Here some ideas you could try:
        As I wrote in my post, I got a lot of ideas by looking at all the stuff the CMB View software outputs. It is (or at least was) more or less a viewer of exactly the data that is in the CMB file. You may want to compare old and new versions and see, if maybe there was some field added.
        Another idea is to work backwards. Look if there are some recognizable parts like the very characteristic Mode Changes 0D xx 00, and work your way back until you figure out what, and how big the new data is.

  15. This is very interesting. I could see this would be of grate use. Seeing as to what might be a problem for prints of small models and what might just fall apart when printed, such as small thin parts at a slight incline from horizontal. So if it is possible to get the path code the next step would be to write code and use the path and loft a shape along the path. the height of the shape would be roughly half the width of the bead. Basically an ellipse on its side.

    Many people have a hard time stepping threw the many layers and understanding how the layer interact with on another.

    Of course if a model is made showing only the model tool path I can imagine the file size could get huge. Kind of surprised Catalyst has not made some version of this. Many student when they see the wire frame version of the slices still have a very hard time understanding exactly what they are looking at.

    Heck if I could even get just the path into a format such as DXF I then bring it into another software and extrude shapes along the paths.

  16. The Elite has the following “mode change” codes that the BST does not have: 0xfa, 0x88, 0xcd, 0x92, 0x21

    0xcd, 0x21 and 0x92 only appear in the first 10 layers (support) and
    0xfa and 0x88 only appear within the first and last couple of layers of the model itself.

    The differences between Elite and 768 interest me.

  17. Forgot to mention, on the Elite there is no 0x00 following the 0x0d that specifies the “mode change”, it has the change number directly after the 0x0d.

  18. Yup, my bad. I’ll stop posting now as I seem to excel at talking out of it instead of sitting on it at the moment. 🙂

  19. OK, done it. This just implements the information above and spews the data out. Easy enough to use “cmbread (filename)” and pipe it into a text file if you want to read it. Compiled with Linux Mint.

    I am still getting unknown mode numbers from the elite CMB this is almost certainly my fault because I truly suck at C programming and apparently reading English considering the number of times I read the above and still understood it incorrectly.

    http://homepage.ntlworld.com/dknpower//stratasys/cmb/

  20. It seems that the CMB file is certainly checksummed. The CMB viewer and Catalyst do not check this but the printer does so if you modify a CMB file then try to send it to the printer by opening in Catalyst then selecting “print”, it will fail. The solution is to open in Catalyst then save the file in Catalyst before you send it to the printer, that forces Catalyst to rebuild the CMB with a new checksum. With the ability to modify the CMB you can now change the number following the mode command (0x0d) to make the printer use the other cartridge for a layer so you can print in two colours as long as you have ABS in the two cartridges.

  21. This:
    1 int always 1 (probably number of pack lists?)

    is certainly the number of CMB files in the pack. The whole decode goes to pot if you don’t account for it.

    Work in progress. 🙂

  22. Unknown data
    10 03 00 00 00 11 00 00 00 04 00 00 00 12 00 00 00 08 00 00 00 14 00 00 00 04 00 00 00 11 01 00 00 00 11 from mine (cat 4.4)
    10 02 00 00 00 11 00 00 00 04 00 00 00 12 00 00 00 08 00 00 00 11 01 00 00 00 11 from above

    I reckon that the second byte is actually a 4 byte INT giving something related to the number of INTs before the “number of CMBs , I think the 10 at the start is some sort of delimiter / command number? 5 bytes from the end seems to be the number of CMBs in the pack again. Outline of area of pack above is if there is only 1 CMB, if there are multiple CMB then “outline of area of pack” repeats for each of the CMBs in the pack, there is also a repeat of 11 0e 00 00 00 for each of these repeats.

    Work in progress, is anyone else looking at this, if not I’ll just carry on without updating until I have finished.

    I successfully did a two colour print all be it grey and white as that is all that I had, it worked fine but the surface finish of hte support material is not as fine as the model material. I also tried hte mode hex codes from the elite and 1200, the 768 accepts them OK, I am still trying to figure what they are.

  23. John, I’m also working on a program to read and modify CMBs. I don’t have any stratasys printer, but i do have the Inisght software and I’m playing with the parameters that would use a Fortus 400mc.

    Last week I did a program that acts like the CMB Viewer.

    I have the same mode format as the BST but the 27 bytes from the Catalyst are also 35 bytes in the Insight.

    I’m a little bit bussy now, later I’ll post something more elavorated.

    • My idea was the following: Use Insight with the Fortus 200mc if you whant to print on a SST 768, Fortus 250mc if you whant to print on a SST1200. I generated the CMB and had modified with a HEX editor the machine type to SST 768. I imported in in Catalyst like a charm and also CMB viewer shows it correctly with the correct machine type. But, when I pressed the “Print” button, an error was shown. I did´t recognized that I have to save it in Catalyst and reopen it. This should works!!

  24. Changing from elite to dimension with a hex editor will work but only if you have 0.254 layer height set for the elite. If you have a layer height that the 768 does not support it spews lots of errors. I think that it should be possible to print a smaller layer height with the 768 but only by changing the Z movements in the layers themselves, I have not tried this yet.

    It is not just a matter of saving it, you have to make catalyst rebuild it after you modified it. Sometimes saving it will do this but more often you have to add another CMB to the pack, Catalyst will rebuild the pack then.

    • using 0.254 and 0.33 will be ok, the most important side is the use of all the Insights features not present in Catalyst.

  25. Taken from one of the CMB files for calibrating on the machine.

    10 02 00 00 00 11 00 00 00 04 00 00 00 12 00 00 00 08 00 00 00 11
    00 << not the number of CMBs ??????????????????
    00 00 00 05 22 1c 57 3f a0 6e 54 3f 6f 12 03 bc 06 97 36 e6 40 65 ee f9 40 78 25 49 3d

    From then on it's all screwed, there is no "12 X Y" table for "vertices of outline".

    I can't work this one out at all.

  26. hmm, working backwards from the layer table at the end of the file it seems that the 00 that is not the CMBs is actually 00 00 00 00, followed by 05, that 05 is actually the start of the layers so it is correct it is just that the file has zero vertices of outline.

  27. Updated cmbread.c so it should now cope with multiple CMBs per pack and different versions of Catalyst and Catalyst EX. Need to work on these unknown bytes, they are something.

  28. This is a great discussion. I literally started the first print job on our brand new Stratasys uPrint SE Plus this very evening, so have just learned about the mysterious CMB file. At the very least, would it not be a fine thing to find a way to move the origin of the build, first so you could perhaps reuse the platen, but also to not wear the machine in the centre too much. I look forward to fooling around with this viewer program you noted, which I was not aware of.

  29. Function name and variables from CatalystEX

    getCmbInfo(
    String wcCmbpath,
    StringBuilder wcPackString,
    StringBuilder wcComment,
    StringBuilder wcMachineType,
    StringBuilder wcPartMaterial,
    StringBuilder wcPartTip,
    StringBuilder wcSupportMaterial,
    StringBuilder wcSupportTip,
    StringBuilder wcBuildVersion,
    StringBuilder wcBuildMode,
    Double* sliceHeight,
    Int32* majorVersion,
    Int32* minorVersion,
    Double* timeEstimate,
    Double* partVolume,
    Double* supportVolume,
    Double[,] boundingBox,
    Int32* numContour,
    IntPtr* contourCounts,
    Int32* numPts,
    IntPtr* contourPts,
    Int32* numLayers
    )

  30. I think the 0x0b 0x00 Xx Yy Zz ?? is width so it can print n the slope. An interesting experiment methinks.

  31. So would you guys be able to convert a 1200 to a Fortus 250 for a fee? 🙂 If so I’m very interested.

  32. Is there any relationship between changing the volume data within the CMB file and the filament consumed and stored in the cartridge chip?

    • No, this field stores only an estimate of the required material to build the model. Don’t know if it has any effect, except to display it for the user. The machine runs in any case until it runs out of material. At least it was, when I did the prints years ago.

  33. Mine stops when the computer thinks it is empty. I just rewound a cartridge and there was at least 0.2kg of plastic left when it said 0, I weighed it. The whole Stratasys mentality is about squeezing every penny they can out of the consumer but having said that the do print better than any other printer.

  34. How were you able to view the file text? The info in CMB Viewer is very limited; can you use a text editor to view the extracted CMB file?

    • I think, I don’t understand your question. The CMB file is binary, so there is no text in it but binary data like outlined above. You need a program that interprets the binary data, like CMBView, or the program I wrote. Or if you really want to read it yourself you could use a binary editor, and try to manually interpret the data.
      CMB Viewer is not really limited. In fact it is capable of showing all data that is stored in the CMB file, as also outlined above.

  35. Hello, I am a student Electromechanic Engineering and I’m working with 3D printers for the university. I am not really experienced with software and programming but I understand most of what you are saying. One thing I don’t really see and I would like to ask you is: Is it possible by using the CMB files to predict the time needed between layers? I think you can see the estimated total build time and you can also see the end of the layers, but is it possible to know the time for each layer? The surfaces of the layers are not equal so you can’t just divide the total build time with the number of layers. For the project I am investigating the effect of time between layers so I’m looking for a way to be able to know the time between layers and how to influence it.

    Thanks for your response

    • The catalyst software definitely knows the times of each layer, or each move. This is needed to compute the total time. However, it only writes the total time to the file, no intermediate timing. The total time is probably only a convenience to display it without having to compute it.
      So, no. There is no direct way of getting per-layer timings. You would have to do the math yourself. Maybe doing some regression to get the timings of the different move-types per unit-length, or something like that. Or you use open source software, to build the paths. It should be much easier to get the information there. But I don’t know if it is already compatible with Stratasys-Printers.

      • What we have done now is: we have found the number of slices of a file in the header, then we have translated all the commands and coordinates of the layer in the middle and now we want to multiply the distances between the coordinates with the translationspeed of the nozzle to calculate the total time for that layer. Now we want to know in what unit the coordinates are given, is it always 0.01 inch?

      • I must have forgotten to mention the unit of the coordinates. As far as I remember, the coordinates are given in inches. But I guess you can quickly find it out by analyzing the min/max coordinates of a known object.
        But it doesn’t matter that much, as long as your translation speed estimate uses the same units.
        Note: you need to divide the distance by the speed to get the time, not multiply them. And, there is surely some acceleration and deceleration phase of the nozzle, so there won’t be a direct (linear) distance-to-time mapping. But try your method, maybe it is accurate enough.
        Or maybe feed the coordinate stream to a CNC-milling simulator. I guess there won’t be much difference between positioning the milling tool or the nozzle. These simulators may produce quite accurate timings, once you figured out the correct velocity and acceleration/deceleration values.

        If you find out anything useful, please post your results here, so others may benefit.

  36. When we convert the hexadecimal coordinates to decimal coordinates with the 4 byte little endian IEEE 754 binary32 standard encoding, we sometimes get values like -7.422108657522835456E18 so this value is huge, even when the unit would be 0.01 inches. But sometimes we get values like 2.95054931640625E1 so I think we are doing something wrong during the conversion. We have contacted someone from Stratasys who could know the translation speed and accelerations. Maybe we can send our cmb-file to you so you can take a look at it? We already translated most of the file using your blog. When we have our end findings we will post our results here for sure!

  37. Can I get the code?

  38. hey im using strtasys 250mc. how do i can extract or read the .cmb files?

  39. To keep you informed, we have finished our research for our thesis and your findings helped us alot. If you want we can send you our results but it is described in Dutch so I don’t know if it’s worth your time.

  40. Is anyone still able to open a file generated with Insight in Catalyst?

  41. Hello,
    We are working on 3d printer project, and our project deal with cmb files, so can you share with us the C# code that you used to deal with cmb files.

    Thanks in advance

    • Thanks for your interest. I promise to put the code online. Have to extract the relevant parts from the codebase. Hope I’ll find enough time soon.

  42. Hi folks, any update on the topic for using Insight and print it on Catalyst?

    • I have printed Insight CMBs in Catalyst. There are a few bytes for each point that need to be adjusted/removed along with the header and endcode. I have a java code that automated it but you can do it manually in a hex or binary editor (I started with 010 Editor). It’s a really good learning experience to do it manually.

      Of course it depends on the printer you plan to use. I used a uPrint Plus, so I was able to use the definition for a Fortus 200mc (if I am remembering correctly) since they share the same build envelope dimensions. If you don’t match the build envelope definition, you’ll get errors with the coordinates falling outside of the bounding box. What are you trying to do?

      • I had didi the same, manually modifying the CMB file with a hex editor, but it is not an option for me. I´m looking for a converter where you save your Indight CMB file in a folder (e.g. Insight2Catalyst) and it will be converted automatically. On the converter it would be good just to set the input and output format (e.g. IN: Fortus 250 – OUT: Dimension SST1200 or IN: Fortus 200 – OUT: SST768; etc). Can I test your java converter?

      • Unfortunately I lost the java converter in a file sharing mishap. All the same, it doesn’t have all of the functionality that you are looking for (it doesn’t run automatically and it only converts 200mc files to uPrint Plus format). If you have already figured it out manually then creating the converter is a minor task. You can use MATLAB, Java, Python…any of those have decent capabilities for this type of program. It sounds like you’re almost there though.

      • Unfortunately I´m not a programmer, so no way to make such a programmer.

  43. Super useful! Thanks!!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: