Project operator
The Project operator allows you to get access from the code of the postprocessor to the information about the SprutCAM project (information that relates to the entire project, and not to individual operations), which lies in the CLData. Operator syntax is as follows.
Project.Ptr|Str|Int|Flt["ParameterName"]
Here, Project is the key word to access SprutCAM project level parameters.
Ptr or Str or Int or Flt is a keyword that defines the form in which you want to represent the value of a property — as a string, as an integer, as a floating point number, or as a pointer to a property. Read more about this in Named CLData parameters topic.
Further in square brackets follows the string identifier of the property whose value is to be obtained. It can be a string constant, as shown here, as well as any string expression or variable.
For a description of possible properties and their values, see the appendix in the Project information in CLData article.
Consider an example of obtaining information about the workpiece using this operator.
sub PrintAllWorkpiece i: Integer j: Integer px, py, pz, pv: Real for i = 1 to Project.Ptr["Parts"].ItemCount do begin Output "( Part" + str(i) + ".Workpiece )" for j = 1 to Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].ItemCount do begin Output "( Primitive " + str(j) + " )" case Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Int["PrimitiveType"] of 0: begin !Unknown Output "( Type: Unknown )" end 1: begin !Empty Output "( Type: Empty workpiece )" end 2: begin !Faces Output "( Type: Faces )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Min.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Min.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Min.Z"] Output "( Min point: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Max.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Max.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Max.Z"] Output "( Max point: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" end 3: begin !Casting Output "( Type: Casting )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Stock"] Output "( Stock: " + str(pv) + " )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Min.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Min.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Min.Z"] Output "( Min point: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Max.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Max.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Box.Max.Z"] Output "( Max point: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" end 4: begin !Box Output "( Type: Box )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Min.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Min.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Min.Z"] Output "( Min point: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Max.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Max.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Max.Z"] Output "( Max point: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" end 5: begin !RevBody Output "( Type: Turn envelope )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.Z"] Output "( Origin: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.Z"] Output "( Axis: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" end 6: begin !Cylinder Output "( Type: Cylinder )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.Z"] Output "( Origin: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.Z"] Output "( Axis: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["HMin"] Output "( Min level: " + str(pv) + " )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["HMax"] Output "( Max level: " + str(pv) + " )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["ROut"] Output "( Outer radius: " + str(pv) + " )" end 7: begin !Tube Output "( Type: Tube )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.Z"] Output "( Origin: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.Z"] Output "( Axis: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["HMin"] Output "( Min level: " + str(pv) + " )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["HMax"] Output "( Max level: " + str(pv) + " )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["ROut"] Output "( Outer radius: " + str(pv) + " )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["RInn"] Output "( Inner radius: " + str(pv) + " )" end 8: begin !Prism Output "( Type: Prism )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.Z"] Output "( Origin: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.Z"] Output "( Axis: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["HMin"] Output "( Min level: " + str(pv) + " )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["HMax"] Output "( Max level: " + str(pv) + " )" end 9: begin !PolygonalPrism Output "( Type: Polygonal prism )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Origin.Z"] Output "( Origin: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" px = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.X"] py = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.Y"] pz = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Axis.Z"] Output "( Axis: (" + str(px) + ", " + str(py) + ", " + str(pz) + " ) )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Int["CornerCount"] Output "( Corner count: " + str(pv) + " )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["RInn"] Output "( Inscribed radius: " + str(pv) + " )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["Angle"] Output "( Angle around axis: " + str(pv) + " )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["HMin"] Output "( Min level: " + str(pv) + " )" pv = Project.Ptr["Parts"].Item[i].Ptr["Workpiece"].Item[j].Flt["HMax"] Output "( Max level: " + str(pv) + " )" end else begin Output "( Type: Something else )" end end end endsubendThe result of this subroutine may be the following text block.
( Part1.Workpiece )( Primitive 1 )( Type: Tube )( Origin: (0, 0, 117.5 ) )( Axis: (0, 0, 1 ) )( Min level: -149.5 )( Max level: 149.5 )( Outer radius: 66 )( Inner radius: 29 )( Primitive 2 )( Type: Cylinder )( Origin: (0, 0, 117.5 ) )( Axis: (0, 0, 1 ) )( Min level: -147.5 )( Max level: 147.5 )( Outer radius: 64 )( Primitive 3 )( Type: Turn envelope )( Origin: (0, 0, 117.5 ) )( Axis: (0, 0, 1 ) )( Primitive 4 )( Type: Box )( Min point: (-64, -64, -30 ) )( Max point: (64, 64, 265 ) )( Primitive 5 )( Type: Casting )( Stock: 1 )( Min point: (-65, -65, -31 ) )( Max point: (65, 65, 266 ) )( Primitive 6 )( Type: Faces )( Min point: (-54, -54, -30 ) )( Max point: (54, 54, 265 ) )( Primitive 7 )( Type: Polygonal prism )( Origin: (0, 0, 117.5 ) )( Axis: (0, 1, 0 ) )( Corner count: 6 )( Inscribed radius: 160.786 )( Angle around axis: 0 )( Min level: -64 )( Max level: 64 )( Primitive 8 )( Type: Empty workpiece )