A .recx file is Cutting Planner\'s proprietary file format, which is a .xml worksheet file that has been zipped and given a .recx extension. One .xml file is equivalent to one worksheet, so you do not need to be aware of the fact that it is a .zip file. You do not need to be aware of the fact that the file is a zip file, nor do you need to install separate compression and decompression software.
Generally, only the creator of a binary file understands the specifications of the binary format. Therefore, it may be difficult to reuse the data due to changes in the times. This software is a minor proprietary standard, and I think that leaving a large amount of data in this format will inevitably leave some concerns.
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 tree plans in other applications. The advantages are as follows.
If you put extra files in the .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 a multiple-sheet .recx file even on the command line by using the zip file creation tool.
As an example, here is an xml of the following data.
If you are only performing data input, providing just <PartsBoardList> and <SourceBoardList> is sufficient.
─RectPacker
├─Memo
│ └─Line (Text per line)
├─Option
├─PanelSawList (1D or 2D cutting plan list)
│ └─PanelSaw (Cutting plan)
│ ├──CuttingCoordinateList (2D: Coordinate list for parts/offcuts)
│ └─LineData (1D) or BoardNode (2D: Cutting plan)
├─ProcessNumberPriorityPanelSawList (1D process-count priority) or RemnantsLengthPriorityPanelSawList (1D offcut-length priority)
│ └─PanelSaw (Cutting plan)
│ └─LineData
├─PartsBoardList (Parts list)
├─PartsColorList (Color settings list for parts)
├─SourceBoardList (Stock sheet list)
├─StockBoardList (Priority material list)
├─SourceBoardData (Aggregated data for stock sheets)
├─PartsBoardData (Aggregated data for parts)
└─PrintSetUp (Print page settings)
Parts and stock sheets are sorted by area, and numbers starting from 0 are assigned starting from the largest. If the areas are equal, the one with the longer horizontal dimension is numbered first; if those are also equal, the rotatable one is numbered first. However, the value displayed on the application screen is this number +1. This change was made for users who find it counterintuitive for numbering to start at zero. Since changing this internally would cause issues such as compatibility with legacy files, the numbering in this XML file begins from zero.
The <BoardNode> tag is visually too complex for humans to understand, so we have added the <CuttingCoordinateList> tag, which extracts only the coordinates. We recommend using this tag for standard purposes.
Inputting contradictory values may cause Cutting Planner to malfunction. Please use only the values that have been output by the software.
<?xml version="1.0" encoding="UTF-8"?>
<RectPacker FileTypeVersion="3.7" ExeFileVersion="15.40" WindowsVersion="10.0.26200" UserID="XXXXXXXXX">
<FormatSettings DecimalSeparator="." ThousandSeparator=","/>
FormatSettings DecimalSeparator="." ThousandSeparator=","
The decimal separator and thousands separator settings of the PC that saved this file. They will be converted if opened on a PC with different regional settings.
<Option SheetName1="Sheet1_#2" SheetName2="" Material="Sheet1_#2" Thickness="" SameSizePartsMerge="False" TabColor="clBtnFace" Problem="2D" LengthFormat="ftDecimals" Precision="1" Decimals="0" Rotate="0" SmallSourcePriorityPoint="1" PartsColorListType="1" KerfSize="3" ConvergenceJudgmentTime="10" TopTrimSize="" BottomTrimSize="" LeftTrimSize="" RightTrimSize="" Objective="MaximizeYield" FigureSortOrder="sotSourceSize" DescriptionCount="1" DescriptionTitle="" MethodOfLeavingRemnants="lrArea" MaxCutLength="" ComparisonOrder="rtYield,rtDrawingsQty,rtContiPartsArrange,rtPartsStraddlingPoint,rtRotationalRrocesses,rtMaxRemainingSize"/>
Decimals="0": Number of decimal places (Precision takes priority; kept for legacy compatibility)
<SourceBoardList>
<Board Comment=" " Width="950" Height="450" Count=" " Cost="1000"/>
<Board Comment=" " Width=" " Height=" " Count=" " Cost=" "/>
Recorded exactly as entered in the app (except blank lines are removed). Invalid values are ignored during execution. For 1D, "Height" is omitted.
</SourceBoardList>
<StockBoardList>
<Board Comment=" " Width=" " Height=" " Count=" " Cost=" "/>
</StockBoardList>
Recorded exactly as entered in the app (except blank lines are removed). Invalid values are ignored during execution. For 1D, "Height" is omitted.
<PartsBoardList>
<Board Comment="#Parts1" Width="400" Count="1" Height="300"/>
<Board Comment="#Parts2" Width="500" Count="2" Height="200"/>
Recorded exactly as entered in the app (except blank lines are removed). Invalid values are ignored during execution.
</PartsBoardList>
<SourceBoardData>
<Board Index="0" Count="-1" Cost="1000" UsedNumber="1" Priority="0" Comment="" Width="950" Height="450"/>
</SourceBoardData>
Duplicates and invalid values are removed; sorted by area and index.
<PartsBoardData>
<Board Index="0" Width="400" Count="1" Cost="280.701754385965" Comment="#Parts1" Height="300" CanRotate="true" CanNotBeArrangedNumber="0"/>
</PartsBoardData>
Duplicates and invalid values are removed; sorted by area and index.
<Memo>
<Line>Sample line 1</Line>
<Line>Sample line 2</Line>
</Memo>
Recorded line by line.
Back=Background color, BrushColor=Pattern color, FontColor=Text color, PenColor=Border color, Style=Pattern type.
(Search for "Delphi VCL Color" or "Vcl.Graphics.TBrushStyle" for available values.)
<PanelSawList ExecutionTime="203">
ExecutionTime = Execution time in milliseconds.
RotationsNumber = Total number of rotation processes (2D).
Contains the layout data set in the "PlacementPriority1D" option.
If "Process-count priority (lrProcesses)" and "Offcut-length priority (lrRemnants)" yield different results, the alternative result is listed using the following tags.
Count: Number of identical layouts.
SourceIndex: Stock sheet number.
Count: Number of identical layouts.
SourceIndex: Stock sheet number.
PartitionID: If the PanelSaw is part of a split layout, it is numbered from 1. 0 means not split.
PartitionIndex: Numbered from 0 within the same PartitionID.
PartitionCount: Indicates the number of sheets split within the same PartitionID.
LayoutNumber: Unique ID assigned as a drawing number.
RotationsNumber: Number of rotation processes for this plan.
Because the BoardNode tag below is difficult for humans to read, this list provides the Top-Left and Bottom-Right coordinates for parts and offcuts in the layout.