.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.

 

─RectPacker
 ├─Memo (Description)
 │ └─Line (Line-by-line text)
 ├─Option
 ├─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)
 ├─SourceBoardData
 ├─PartsBoardData
 └─PrintSetUp

 

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">
 <!--

Options

 MaxCutLength=
Maximum size that can be cut by the cutting machine

 

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

 

 SmallSourcePriorityPoint=
Priority to use the smaller stocks panel

 

 LengthFormat=
ftDecimal
ftFeetDecimalInches
ftFactionalInches
ftFeetFractionalInches

 

 Precision=
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"

 

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

 

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

 

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

 

Problem= 1D or 2D
TabColor=
Thickness=
Material=
SameSizePartsMerge="true"

-->
<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.
 Comment= 
 Width=
 Height=
 Count=
 Cost=

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

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.
 Comment=
 Width=
 Height=
 Count=
 Cost=

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

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.
 Comment=
 Width=
 Height=
 Count=
 CanRotate= Can rotate=1, Cannot rotate=0 Ignored when set individually.

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

Stocks Panel Data

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

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

Parts Panel Data

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

-->
 <PartsBoardData>
   <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=""/>
 </PartsBoardData>
 <!--

Note

-->
 <Memo>
   <Line>Sumple line 1</Line>
   <Line>Sumple line 2</Line>
 </Memo>
 <!--

Parts color setting

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

-->
 <PartsColorList>
   <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"/>
 </PartsColorList>
 <!--

Cut Layout Figure list

ExecutionTime=Execution time in milliseconds

-->
 <PanelSawList ExecutionTime="15">
 <!--

 <PanelSaw> Cut Layout Figure

   Count=Number of figures
   SourceIndex=
   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
  SizeX=
  SizeY=
  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)
  PartsIndex=

-->
 <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>
 </BoardNode>
 <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>
   <BoardNode Category="cgSpace" SizeX="403" SizeY="94" OriginY="806" OriginX="0"/>
 </BoardNode>
   </BoardNode>
   <BoardNode Category="cgSpace" SizeX="1394" SizeY="900" OriginY="0" OriginX="406"/>
 </BoardNode>
   </PanelSaw>
 </PanelSawList>
<!-- -->

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=""/>
 </PrintSetUp>
</RectPacker>

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>
</PanelSaw>


Return to Top of Page