Оператор Project
Оператор Project позволяет получить из программного кода постпроцессора доступ к информации уровня проекта SprutCAM (т.е. информацию, которая относится ко всему проекту, а не к отдельным операциям), которая лежит в CLData. Синтаксис оператора следующий.
Project.Ptr|Str|Int|Flt["ParameterName"]
Здесь Project - ключевое слово для доступа к параметрам уровня проекта SprutCAM.
Ptr или Str или Int или Flt - это ключевое слово, определяющее в каком виде нужно представить значение свойства - в виде строки, целого числа, числа с плавающей точкой или в виде указателя на свойство. Подробнее об этом смотрите статью Именованные параметры CLData.
Далее в квадратных скобках следует строковый идентификатор свойства, значение которого нужно получить. Это может быть как строковая константа, как показано здесть, так любое строковое выражение или переменная.
Описание возможных свойств и их значений смотрите в приложении в статье Информация о проекте в CLData .
Рассмотрим пример получения информации о заготовке с использованием данного оператора.
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 endsubendРезультатом работы данной подпрограммы может быть следующий текстовый блок.
( 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 )