.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
If you are only entering data,
─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
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.
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.
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.
<?xml version="1.0" encoding="UTF-8"?>
<RectPacker FileTypeVersion="1.7">
<!--
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"/>
<!--
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>
<!--
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>
<!--
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 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 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>
<!--
-->
<Memo>
<Line>Sumple line 1</Line>
<Line>Sumple line 2</Line>
</Memo>
<!--
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>
<!--
ExecutionTime=Execution time in milliseconds
-->
<PanelSawList ExecutionTime="15">
<!--
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">
<!--
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>
<!-- -->
<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>
In the description of the above two dimensions, unnecessary parts for the first dimension are omitted.
In this example, the <PanalSaw>
<PanelSaw Count="1" SourceIndex="0">
< !--
-->
<LineData Count="1">0</LineData>
<LineData Count="1">1</LineData>
<LineData Count="1">2</LineData>
</PanelSaw>