.recx file format

.recx is Cutting Planner's proprietary file format, which is a .xml worksheet file that has been zipped and given the extension .recx. You do not need to be aware of the fact that the file is a .xml file, nor do you need to install separate compression and decompression software.


Generally, only the creator or the software vendor understands the specifications of the binary format. Therefore, it may be difficult to reuse the data due to changing times. This software is a minor proprietary standard, and we believe that leaving a large amount of data in this format willinevitably leave some uncertainty.


Therefore, we have changed to xml format. xml is flexible enough to accommodate future specification changes and extensions. By publishing the specifications, third parties can develop software to use the output layout diagrams in other applications. The following are some of the advantages.


If you put extra files in .recx, it may not work properly.


Multiple .xmls can be combined into a zip to support multiple sheets. The tab order is the order of the file list inside the zip. This allows you to create multi-sheet .recx files on the command line using the zip file creation tool, which must be UTF-8 compatible or Japanese characters will be garbled.


As an example, here is an xml file of the following data


Recx Sumple


Data structure

If you are only entering data,
and alone will work.


 ├─Memo (Description)
 │ └─Line (Line-by-line text)
 ├─PanelSawList (Cutting layout figure List)
 │ └─PanelSaw (Cutting layout figure)
 │   └─BoardNode (Panel)
 ├─PartsBoardList (Parts panel)
 ├─PartsColorList (Parts Color list)
 ├─SourceBoardList (Stock panel)
 ├─StockBoardList (First usage stocks list)


About parts panel and stocks panel numbers

Parts panels and stocks panels are sorted by area, and numbered starting from 0 in order of size. If the area is the same, the longer side is numbered first, and if the area is the same, the rotatable side is numbered first.
If all parts panels are the same, they are merged into the same parts panel.


Data Structure of Cut Layout Diagram

When a board is cut once, it is divided into two pieces. Cutting one of them will result in two pieces. In other words, the data structure is a two-branch tree structure.
The data structure can be expressed as it is in xml by just defining a "board". If we draw only the parts panel and unused space at the end of the tree structure, it will be as shown in the application.
If you have to read inconsistent values, Cutting Planner may not work properly. Please only use the output values.


Regarding board size and coordinates in the .xml file

The values must be integers according to the specifications. Therefore, they will be converted to a number with the smallest unit being 1 and recorded. The value will be an integer value with [Options]-[Optimize]-[Precision] as the unit of 1. For example, if the length format is a decimal point and the precision (minimum unit) is 0.1, 12.3 is 123. For fractional inches with a minimum unit of 1/8", 1 foot is 12 inches multiplied by 8, which is 96.

Example of 2D code

<?xml version="1.0" encoding="UTF-8"?>
<RectPacker FileTypeVersion="1.7">


Maximum size that can be cut by the cutting machine


All can be rotated=0
Allcannot be rotated=1
Individual settings=2


Priority to use the smaller stocks panel




if LengthFormat = "ftDecimal" 1, 0.1, 0.01
if LengthFormat = "ftFeetDecimalInches" 0.1, 0.01, 0.001
if "ftFactionalInches" or "ftFeetFractionalInches" "1/8", 1/16", 1/32", 1/64", 1/128"


[Tool]-[Options]-[Optimize]-[Speed and Yield] Menu


[Tool]-[Options]-[Optimize]-[MinimumSearchTime] Menu ; by seconds


 PartsColorListType =
[Tool]-[Options]-[Layout Pictures]-[Color coding of parts] Menu
Order of Similar Shape=1
Descending order of Area=2
Ascending order of Area=3


Problem= 1D or 2D

<Option Rotate="0" PartsAlignment="0" SmallSourcePriorityPoint="2" Decimals="0" SearchLevel="3" HighRatio="1" PartsColorListType="1" KerfSize="3" MaxCutLength="" Problem="2D" TabColor="" Thickness="" Material="Sheet1"/>

Stocks Panel list

Record as entered in the application, except that blank lines are deleted.
Invalid values are ignored at runtime.
Height is eliminated for 1D.

   <Board Comment="" Width="1800" Height="900" Count="" Cost=""/>

First usage Stocks Panel list


Record as entered in the application, except that blank lines are deleted.
Invalid values are ignored at runtime.
Height is eliminated for 1D.

   <Board Comment="" Width="1800" Height="900" Count="" Cost=""/>

Parts Panel list


Record as entered in the application, except that blank lines are deleted.
Invalid values are ignored at runtime.
Height is eliminated for 1D.
 CanRotate= Can rotate=1, Cannot rotate=0 Ignored when set individually.

   <Board Comment="" Width="400" Height="300" Count="1" CanRotate="1"/>
   <Board Comment="" Width="500" Height="200" Count="2" CanRotate=""/>

Stocks Panel Data

Stocks Panel list with duplicates and invalid values removed
 Index= Unique numbers starting from 0
 Count= -1 is unlimited
 Priority= 1 is "First usage Stoks panel"

   <Board Index="0" Width="1800" Height="900" Count="-1" Cost="0" UsedNumber="1" Comment="" Priority="0" />

Parts Panel Data

Parts Panel list with duplicates and invalid values removed
 Index= Unique numbers starting from 0
 Count= -1 is unlimited
 CanNotBeArrangedNumber= Number that could not be cut

   <Board Index="0" Width="400" Height="300" Count="1" CanRotate="true" Cost="0" CanNotBeArrangedNumber="0" Comment=""/>
   <Board Index="1" Width="500" Height="200" Count="2" CanRotate="true" Cost="0" CanNotBeArrangedNumber="0" Comment=""/>


   <Line>Sumple line 1</Line>
   <Line>Sumple line 2</Line>

Parts color setting

 Google "delphi VCL Color" and "Vcl.Graphics.TBrushStyle" for values.

   <PartsColor Back="clWindow" BrushColor="clAppWorkSpace" FontColor="clGrayText" PenColor="clGrayText" style="bsDiagCross"/>
   <PartsColor Back="clWindow" BrushColor="clWindow" FontColor="clWindowText" PenColor="clWindowText" style="bsClear"/>
   <PartsColor Back="clGradientInactiveCaption" BrushColor="clWindow" FontColor="clWindowText" PenColor="clWindowText" style="bsClear"/>
   <PartsColor Back="$008080FF" BrushColor="clWindow" FontColor="clBlack" PenColor="clBlack" style="bsClear"/>
   <PartsColor Back="$0080FFFF" BrushColor="clWindow" FontColor="clBlack" PenColor="clBlack" style="bsClear"/>
   <PartsColor Back="$0080FF80" BrushColor="clWindow" FontColor="clBlack" PenColor="clBlack" style="bsClear"/>
   <PartsColor Back="$00FFFF80" BrushColor="clWindow" FontColor="clBlack" PenColor="clBlack" style="bsClear"/>
   <PartsColor Back="$00FF8000" BrushColor="clWindow" FontColor="clWhite" PenColor="clBlack" style="bsClear"/>
   <PartsColor Back="$00C080FF" BrushColor="clWindow" FontColor="clBlack" PenColor="clBlack" style="bsClear"/>
   <PartsColor Back="$00404080" BrushColor="clWindow" FontColor="clWhite" PenColor="clBlack" style="bsClear"/>
   <PartsColor Back="$004080FF" BrushColor="clWindow" FontColor="clBlack" PenColor="clBlack" style="bsClear"/>
   <PartsColor Back="clTeal" BrushColor="clWindow" FontColor="clWhite" PenColor="clBlack" style="bsClear"/>
   <PartsColor Back="$00804000" BrushColor="clWindow" FontColor="clWhite" PenColor="clBlack" style="bsClear"/>
   <PartsColor Back="$00FF8080" BrushColor="clWindow" FontColor="clBlack" PenColor="clBlack" style="bsClear"/>

Cut Layout Figure list

ExecutionTime=Execution time in milliseconds

 <PanelSawList ExecutionTime="15">

 <PanelSaw> Cut Layout Figure

   Count=Number of figures
   PartitionID=If the figure is a split, it is numbered from 1. 0 is not split.
   PartitionIndex=Number assigned from 0 within the same PartitionID
   PartitionCount=Indicates the number of pieces divided within the same PartitionID.

   <PanelSaw Count="1" SourceIndex="0" PartitionID="0" PartitionIndex="0" PartitionCount="0">



<BoardNode> Definition of a Panel

Cutting a board once results in two pieces. Cutting one of the boards will result in two more boards.
In other words, the data structure is a two-branch tree structure. The bottom of the hierarchy is the parts panel or end piece data, and if you draw the data as it is, it will be as shown in the application.
The PartsIndex can be referenced by looking at the PartsBoardData tag for information such as size and comments.
 Category=Panel type
   This board is cut horizontally  = cgHCut (child nodes exists.)
   This board is cut lengthwise  = cgVCut (child nodes exists.)
   It is a rotated parts panel = cgPartsLength
   It is a non-rotating parts panel = cgPartsSide
   Unused or remnants= cgSpace
  OriginY=, OriginX=Y-coordinate and X-coordinate of the upper left corner of the parts panel when the upper left corner of the figure is (0,0)

 <BoardNode Category="cgVcut" SizeX="1800" SizeY="900" OriginY="0" OriginX="0">
   <BoardNode Category="cgHCut" SizeX="403" SizeY="900" OriginY="0" OriginX="0">
 <BoardNode Category="cgVcut" SizeX="403" SizeY="500" OriginY="0" OriginX="0">
   <BoardNode Category="cgPartsLength" SizeX="200" SizeY="500" OriginY="0" OriginX="0" PartsIndex="1"/>
   <BoardNode Category="cgVcut" SizeX="200" SizeY="500" OriginY="0" OriginX="203">
 <BoardNode Category="cgPartsLength" SizeX="200" SizeY="500" OriginY="0" OriginX="203" PartsIndex="1"/>
 <BoardNode Category="cgHCut" SizeX="403" SizeY="397" OriginY="503" OriginX="0">
   <BoardNode Category="cgVcut" SizeX="403" SizeY="300" OriginY="503" OriginX="0">
 <BoardNode Category="cgPartsSide" SizeX="400" SizeY="300" OriginY="503" OriginX="0" PartsIndex="0"/>
   <BoardNode Category="cgSpace" SizeX="403" SizeY="94" OriginY="806" OriginX="0"/>
   <BoardNode Category="cgSpace" SizeX="1394" SizeY="900" OriginY="0" OriginX="406"/>
<!-- -->

Print Setup

 <PrintSetUp Unit="mm" FixedRatio="false" PrintPartsList="true" PrintMemo="false" ViewCost="true" TextOnly1D="false">
   <Columns Number="2" Between="13"/>
   <Margin Top="10" Bottom="10" Left="10" Right="10"/>
   <Header Left="" Center="" Right=""/>
   <Footer Left="" Center="&p/&P" Right=""/>

1D Code

Recx Sumple

In the description of the above two dimensions, unnecessary parts for the first dimension are omitted.
In this example, the <PanalSaw>
tag portion would be as follows



<PanelSaw Count="1" SourceIndex="0">
< !--

0, 1, 2 is Parts Panel index

 <LineData Count="1">0</LineData>
 <LineData Count="1">1</LineData>
 <LineData Count="1">2</LineData>