Tecan Fluent Custom Attributes

I was fumbling around with the .dll’s and I was able to spot some useful bits of information with regard to custom attributes.

I thought about teasing apart this info but figures it would be useful for determination of input variables as well.

private void AddGeneralAttributesForLabware()
    {
      this._templateList.Add("KeepForNewRun", this._factory.CreateCustomAttributeTemplate("KeepForNewRun", "Indicates that instances of last runtime workspace shall be taken for new run", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) true));
      this._templateList.Add("Static_Labware", this._factory.CreateCustomAttributeTemplate("Static_Labware", "Defines naming rule for Labware Group Editor", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) true));
      this._templateList.Add("StackerType", this._factory.CreateCustomAttributeTemplate("StackerType", "Stacker / Te-MagS plate type", true, string.Empty, (AttributeDataType) 2, string.Empty, (object) 1));
      this._templateList.Add("WasherPlateType", this._factory.CreateCustomAttributeTemplate("WasherPlateType", "Washer plate type", true, string.Empty, (AttributeDataType) 2, string.Empty, (object) 1));
    }

    private void AddPipettingAttributesForLabware()
    {
      this._templateList.Add("ClldSensitivityCalculationLabware", this._factory.CreateCustomAttributeTemplate("ClldSensitivityCalculationLabware", "Defines labware type used for cLLD sensitivity calculation", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("IsFcaLiquidWaste", this._factory.CreateCustomAttributeTemplate("IsFcaLiquidWaste", "Indicates whether labware is used as FCA liquid waste", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("IsMcaLiquidWaste", this._factory.CreateCustomAttributeTemplate("IsMcaLiquidWaste", "Indicates whether labware is used as MCA liquid waste", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("IsLiquidAspiratableIntoDevice", this._factory.CreateCustomAttributeTemplate("IsLiquidAspiratableIntoDevice", "Indicates whether the tool can be used to aspirate liquid", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("MountOffset", this._factory.CreateCustomAttributeTemplate("MountOffset", "Offset used when mounting tip; reduces Z-dimension of tip", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 0.0));
      this._templateList.Add("SensitivityOffset", this._factory.CreateCustomAttributeTemplate("SensitivityOffset", "Offset to apply to cLLD sensitivity group when performing cLLD in labware", true, "-3;-2;-1;0;1;2;3", (AttributeDataType) 2, string.Empty, (object) 0));
      this._templateList.Add("TipCapacity", this._factory.CreateCustomAttributeTemplate("TipCapacity", "Capacity of a single tip; used for context check", false, string.Empty, (AttributeDataType) 3, "[ul]", (object) 19.0));
      this._templateList.Add("TipDimension", this._factory.CreateCustomAttributeTemplate("TipDimension", "Size of the tip in X/Y/Z", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("ToolType", this._factory.CreateCustomAttributeTemplate("ToolType", "ToolType", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("ToolIdName", this._factory.CreateCustomAttributeTemplate("ToolIdName", "ToolIdName", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("NoDiTiDetectedThreshold", this._factory.CreateCustomAttributeTemplate("NoDiTiDetectedThreshold", "No Tips Threshold", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 7.3));
      this._templateList.Add("ContinueOnFailedFCATipPickup", this._factory.CreateCustomAttributeTemplate("ContinueOnFailedFCATipPickup", "Indicates whether to automatically continue at next position if DiTi Blocked error occurs", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("PiercingDetectionHeightCompensation", this._factory.CreateCustomAttributeTemplate("PiercingDetectionHeightCompensation", "Detection height compensation offset for piercing", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 0.0));
    }

    private void AddRoboticAttributesForLabware()
    {
      this._templateList.Add("HeavyObject", this._factory.CreateCustomAttributeTemplate("HeavyObject", "Indicates that a labware is a heavy object and shall be moved with limited speed", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("Grasp_location", this._factory.CreateCustomAttributeTemplate("Grasp_location", "Plate grip offset from default grasp position", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("Grasp_location_W", this._factory.CreateCustomAttributeTemplate("Grasp_location_W", "Plate grip offset Wide", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("Grasp_location_N", this._factory.CreateCustomAttributeTemplate("Grasp_location_N", "Plate grip offset Narrow", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("Force", this._factory.CreateCustomAttributeTemplate("Force", "Force to grip plate", false, string.Empty, (AttributeDataType) 2, "[%]", (object) 50));
      this._templateList.Add("LidHandlingManual", this._factory.CreateCustomAttributeTemplate("LidHandlingManual", "If true no automatic lid handling will be done.", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) true));
      this._templateList.Add("Grip_delta", this._factory.CreateCustomAttributeTemplate("Grip_delta", "Distance added to grip distance when releasing labware or lid", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 5.0));
      this._templateList.Add("FcaGripZOffset", this._factory.CreateCustomAttributeTemplate("FcaGripZOffset", "The height the labware is gripped by FCA grippers", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 0.0));
    }

    private void AddToolAttributesForLabware()
    {
      this._templateList.Add("ConnectorOffset", this._factory.CreateCustomAttributeTemplate("ConnectorOffset", "Tips: Offset between tip and adapter, Head Adapter: Offset between head and Z-Axis", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("DisplayToolName", this._factory.CreateCustomAttributeTemplate("DisplayToolName", "User-friendly name; used for Infopad, Controlbar and dropdown lists", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("DiTiTypeGroup", this._factory.CreateCustomAttributeTemplate("DiTiTypeGroup", "Group of DiTi type; used for liquid subclasses", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("DiTiToolType", this._factory.CreateCustomAttributeTemplate("DiTiToolType", "Identifier for the DiTi type", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("TipMinimumSubmergeDepth", this._factory.CreateCustomAttributeTemplate("TipMinimumSubmergeDepth", "Tip Minimum Submerge depth to prevent air aspiration", false, string.Empty, (AttributeDataType) 3, "mm", (object) 4.5));
      this._templateList.Add("FirstTipPositionOffset", this._factory.CreateCustomAttributeTemplate("FirstTipPositionOffset", "Offset between reference MCA384 tip adapter and this adapter", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("IsForMCA96TipPickup", this._factory.CreateCustomAttributeTemplate("IsForMCA96TipPickup", "Indicates whether the tool is an adapter for MCA96 tips", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("ListNumberInDropDownMenu", this._factory.CreateCustomAttributeTemplate("ListNumberInDropDownMenu", "Sorting rule in steps of ten for list of values in script command parameter 'AdapterPlate'", false, string.Empty, (AttributeDataType) 2, string.Empty, (object) 20));
      this._templateList.Add("MCA384ChannelsPerTip", this._factory.CreateCustomAttributeTemplate("MCA384ChannelsPerTip", "Factor for script commands when EVA adapter is mounted", false, string.Empty, (AttributeDataType) 2, string.Empty, (object) 1));
      this._templateList.Add("MountColumnRowWise", this._factory.CreateCustomAttributeTemplate("MountColumnRowWise", "Indicates that partial tips with this tool are only possible column- or row-wise", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("NbrOfTipsX", this._factory.CreateCustomAttributeTemplate("NbrOfTipsX", "Maximal connectable tips on an adapter in X-dimension", false, string.Empty, (AttributeDataType) 2, string.Empty, (object) 24));
      this._templateList.Add("NbrOfTipsY", this._factory.CreateCustomAttributeTemplate("NbrOfTipsY", "Maximal connectable tips on an adapter in Y-dimension", false, string.Empty, (AttributeDataType) 2, string.Empty, (object) 16));
      this._templateList.Add("OffsetConeIntoTip", this._factory.CreateCustomAttributeTemplate("OffsetConeIntoTip", "Minus offset to calculate new Z-dimension of tool after tip is mounted on the adapter", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 9.3));
      this._templateList.Add("TipSpacingX", this._factory.CreateCustomAttributeTemplate("TipSpacingX", "Spacing between single tips on tip adapter/block in X-dimension", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 4.5));
      this._templateList.Add("TipSpacingY", this._factory.CreateCustomAttributeTemplate("TipSpacingY", "Spacing between single tips on tip adapter/block in Y-dimension", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 4.5));
      this._templateList.Add("ReferenceWidth", this._factory.CreateCustomAttributeTemplate("ReferenceWidth", "Reference width of the tool", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("FingerTypeId", this._factory.CreateCustomAttributeTemplate("FingerTypeId", "Finger type number reported by memory chip of FES fingers.", false, string.Empty, (AttributeDataType) 2, string.Empty, (object) 100));
      this._templateList.Add("GripperCenterOffset", this._factory.CreateCustomAttributeTemplate("GripperCenterOffset", "Offset from rotation center to plate grip position", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 0.0));
      this._templateList.Add("GripperZOffset", this._factory.CreateCustomAttributeTemplate("GripperZOffset", "Z-Offset from rotation center to plate grip position", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 138.3));
      this._templateList.Add("GripperSpreadOffset", this._factory.CreateCustomAttributeTemplate("GripperSpreadOffset", "Measured between the grippers", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 0.0));
      this._templateList.Add("LeftGripperBoundingBox1Dimension", this._factory.CreateCustomAttributeTemplate("LeftGripperBoundingBox1Dimension", "LeftGripperBoundingBox1Dimension", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("LeftGripperBoundingBox1Offset", this._factory.CreateCustomAttributeTemplate("LeftGripperBoundingBox1Offset", "LeftGripperBoundingBox1Offset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("LeftGripperBoundingBox2Dimension", this._factory.CreateCustomAttributeTemplate("LeftGripperBoundingBox2Dimension", "LeftGripperBoundingBox2Dimension", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("LeftGripperBoundingBox2Offset", this._factory.CreateCustomAttributeTemplate("LeftGripperBoundingBox2Offset", "LeftGripperBoundingBox2Offset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("LeftGripperBoundingBox3Dimension", this._factory.CreateCustomAttributeTemplate("LeftGripperBoundingBox3Dimension", "LeftGripperBoundingBox3Dimension", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("LeftGripperBoundingBox3Offset", this._factory.CreateCustomAttributeTemplate("LeftGripperBoundingBox3Offset", "LeftGripperBoundingBox3Offset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("LeftGripperBoundingBox4Dimension", this._factory.CreateCustomAttributeTemplate("LeftGripperBoundingBox4Dimension", "LeftGripperBoundingBox4Dimension", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("LeftGripperBoundingBox4Offset", this._factory.CreateCustomAttributeTemplate("LeftGripperBoundingBox4Offset", "LeftGripperBoundingBox4Offset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("GripperBoundingBoxPlaceholderOffset", this._factory.CreateCustomAttributeTemplate("GripperBoundingBoxPlaceholderOffset", "GripperBoundingBoxPlaceholderOffset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("GripperBoundingBoxPlaceholderDimension", this._factory.CreateCustomAttributeTemplate("GripperBoundingBoxPlaceholderDimension", "GripperBoundingBoxPlaceholderDimension", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("RightGripperBoundingBox1Dimension", this._factory.CreateCustomAttributeTemplate("RightGripperBoundingBox1Dimension", "RightGripperBoundingBox1Dimension", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("RightGripperBoundingBox1Offset", this._factory.CreateCustomAttributeTemplate("RightGripperBoundingBox1Offset", "RightGripperBoundingBox1Offset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("RightGripperBoundingBox2Dimension", this._factory.CreateCustomAttributeTemplate("RightGripperBoundingBox2Dimension", "RightGripperBoundingBox2Dimension", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("RightGripperBoundingBox2Offset", this._factory.CreateCustomAttributeTemplate("RightGripperBoundingBox2Offset", "RightGripperBoundingBox2Offset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("RightGripperBoundingBox3Dimension", this._factory.CreateCustomAttributeTemplate("RightGripperBoundingBox3Dimension", "RightGripperBoundingBox3Dimension", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("RightGripperBoundingBox3Offset", this._factory.CreateCustomAttributeTemplate("RightGripperBoundingBox3Offset", "RightGripperBoundingBox3Offset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("RightGripperBoundingBox4Dimension", this._factory.CreateCustomAttributeTemplate("RightGripperBoundingBox4Dimension", "RightGripperBoundingBox4Dimension", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("RightGripperBoundingBox4Offset", this._factory.CreateCustomAttributeTemplate("RightGripperBoundingBox4Offset", "RightGripperBoundingBox4Offset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("MountOffsetOfFingerLeft", this._factory.CreateCustomAttributeTemplate("MountOffsetOfFingerLeft", "MountOffsetOfFingerLeft", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("MountOffsetOfFingerRight", this._factory.CreateCustomAttributeTemplate("MountOffsetOfFingerRight", "MountOffsetOfFingerRight", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
    }

    private void CreateDefaultCustomAttributesForCarrier(IDataStore dataStore)
    {
      this.AddGeneralAttributesForCarrier();
      this.AddPipettingAttributesForCarrier();
      this.AddRoboticAttributesForCarrier();
      this.AddDefaultCustomAttributesForAllTypes();
      Guid guid = new Guid("11111111-1234-aaaa-ffff-99999999999b");
      StringBuilder stringBuilder = new StringBuilder();
      foreach (KeyValuePair<string, ICustomAttributeTemplate> template in this._templateList)
        stringBuilder.Append(template.Value.SaveString());
      TypedObjectDescriptor objectDescriptor = new TypedObjectDescriptor(((IApplicationDataStore) this._appFrame).DatastoreKeys.WorktableCustomAttributeListKey, new DataObjectIdentifier("CustomAttributesCarrier"), string.Empty)
      {
        UniqueId = guid,
        Revision = "1.0"
      };
      dataStore.SaveData(objectDescriptor, new List<TypedObjectReference>(), false, stringBuilder.ToString(), objectDescriptor.Revision);
    }

    private void AddGeneralAttributesForCarrier()
    {
      this._templateList.Add("TransferStationSite", this._factory.CreateCustomAttributeTemplate("TransferStationSite", "Indicates whether the location is an transfer station site", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("BoundingBoxVisible", this._factory.CreateCustomAttributeTemplate("BoundingBoxVisible", "Indicates whether to show the bounding box(es).", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("Server", this._factory.CreateCustomAttributeTemplate("Server", "Call name of the device (internal name of driver)", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("IOState", this._factory.CreateCustomAttributeTemplate("IOState", "I/O State of associated tool driver", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("StartRack", this._factory.CreateCustomAttributeTemplate("StartRack", "Defines first position of a group of stacks for the carousel driver", false, string.Empty, (AttributeDataType) 2, string.Empty, (object) 1));
      this._templateList.Add("IsFrameElement", this._factory.CreateCustomAttributeTemplate("IsFrameElement", "Indicates whether to set carrier as part of worktable frame", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("IsGridBased", this._factory.CreateCustomAttributeTemplate("IsGridBased", "Indicates whether carrier is grid based or not", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("OpenLabwareGenerator", this._factory.CreateCustomAttributeTemplate("OpenLabwareGenerator", "Indicates whether to open labware generator", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("OpenCarrierAndSiteList", this._factory.CreateCustomAttributeTemplate("OpenCarrierAndSiteList", "Indicates whether to open labware and site list", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("PassiveStack", this._factory.CreateCustomAttributeTemplate("PassiveStack", "Indicates whether carrier is treated as a passive stack", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("WasteLocation", this._factory.CreateCustomAttributeTemplate("WasteLocation", "Indicates whether this location shall be treated as waste location", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
    }

    private void AddPipettingAttributesForCarrier() => this._templateList.Add("MaxZPositionOfHeadForGettingTips", this._factory.CreateCustomAttributeTemplate("MaxZPositionOfHeadForGettingTips", "The height which is used for the check if S-Axis can move below the active carrier clamps.", false, string.Empty, (AttributeDataType) 2, "[mm]", (object) 90.5));

    private void AddRoboticAttributesForCarrier()
    {
      this._templateList.Add("Grasp_location_min", this._factory.CreateCustomAttributeTemplate("Grasp_location_min", "Minimum Plate grip offset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("Grasp_location_max", this._factory.CreateCustomAttributeTemplate("Grasp_location_max", "Maximum Plate grip offset", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("Grasp_location_W_min", this._factory.CreateCustomAttributeTemplate("Grasp_location_W_min", "Minimum Plate grip offset Wide", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("Grasp_location_W_max", this._factory.CreateCustomAttributeTemplate("Grasp_location_W_max", "Maximum Plate grip offset Wide", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("Grasp_location_N_min", this._factory.CreateCustomAttributeTemplate("Grasp_location_N_min", "Minimum Plate grip offset Narrow", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("Grasp_location_N_max", this._factory.CreateCustomAttributeTemplate("Grasp_location_N_max", "Maximum Plate grip offset Narrow", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("Grip_min", this._factory.CreateCustomAttributeTemplate("Grip_min", "Minimum gripper distance for labware on this carrier", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 0.0));
      this._templateList.Add("Grip_max", this._factory.CreateCustomAttributeTemplate("Grip_max", "Maximum gripper distance for labware on this carrier", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 0.0));
      this._templateList.Add("Grip_Narrow", this._factory.CreateCustomAttributeTemplate("Grip_Narrow", "Gripper distance Narrow for this carrier", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 0.0));
      this._templateList.Add("Grip_Wide", this._factory.CreateCustomAttributeTemplate("Grip_Wide", "Gripper distance Wide for this carrier", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 0.0));
      this._templateList.Add("MoveableCarrier", this._factory.CreateCustomAttributeTemplate("MoveableCarrier", "Indicates whether this carrier can be moved by RGA", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) true));
      this._templateList.Add("Lid", this._factory.CreateCustomAttributeTemplate("Lid", "Specifies whether a lid is allowed on labware placed on this carrier", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("Lid_location", this._factory.CreateCustomAttributeTemplate("Lid_location", "Location to store lid", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("Lid_position", this._factory.CreateCustomAttributeTemplate("Lid_position", "Position of lid within lid location", false, string.Empty, (AttributeDataType) 4, "[mm]", (object) WorktableObjectFactory.CreateVector3D(0.0, 0.0, 0.0)));
      this._templateList.Add("LiddingStation", this._factory.CreateCustomAttributeTemplate("LiddingStation", "Carrier which is allowed to cover or uncover a lid on a labware", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("TransferStation", this._factory.CreateCustomAttributeTemplate("TransferStation", "Location to access labware for transfer from storage device", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("RobotMove", this._factory.CreateCustomAttributeTemplate("RobotMove", "On-The-Fly Tools: Used to enable/disable robot move", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("Storage", this._factory.CreateCustomAttributeTemplate("Storage", "Indicates whether lid shall remain at the location", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      this._templateList.Add("Regripstation", this._factory.CreateCustomAttributeTemplate("Regripstation", "Location to use for re-gripping", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("FesNestTouchDownOffset", this._factory.CreateCustomAttributeTemplate("FesNestTouchDownOffset", "How long should be the distance in Z to move in constant force to touch the FES nest.", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 8.0));
      this._templateList.Add("FesNestSpreadDistance", this._factory.CreateCustomAttributeTemplate("FesNestSpreadDistance", "How much spreading is needed to release the fingers (in drop fingers script command).", false, string.Empty, (AttributeDataType) 3, "[mm]", (object) 30.0));
      this._templateList.Add("OnTheFlySpeed", this._factory.CreateCustomAttributeTemplate("OnTheFlySpeed", "Maximum speed of robotic arm in % of full speed for the OnTheFly vectors.", false, string.Empty, (AttributeDataType) 2, "[%]", (object) 100));
    }

    private void AddDefaultCustomAttributesForAllTypes()
    {
      this._templateList.Add("FeatureSet", this._factory.CreateCustomAttributeTemplate("FeatureSet", "FeatureSet", false, string.Empty, (AttributeDataType) 0, string.Empty, (object) string.Empty));
      this._templateList.Add("RenderVisualChildren", this._factory.CreateCustomAttributeTemplate("RenderVisualChildren", "Indicates whether children of this object shall be rendered", false, string.Empty, (AttributeDataType) 1, string.Empty, (object) false));
      string str = ((CarrierOrLabwareProperties) 4).ToString();
      this._templateList.Add(str, this._factory.CreateCustomAttributeTemplate(str, "Preferred level for workspace delta for this type", false, string.Empty, (AttributeDataType) 2, string.Empty, (object) 0));
      this._templateList.Add("Speed", this._factory.CreateCustomAttributeTemplate("Speed", "Maximum speed of robotic arm in % of full speed", false, string.Empty, (AttributeDataType) 2, "[%]", (object) 100));
    }
6 Likes

Wow wouldn’t it be great if these descriptions were displayed as tooltips when hovering over those attributes within FC. The clarity added to things like grip_delta and gripZoffset is super useful.

Almost makes you wonder if that was the original intent and the functionality was removed to deter tinkering with settings that could easily harm the system.

2 Likes

Yeah these descriptions are useful which is why I wanted to share. I also feel like hovering over a text to display added info is a poor way to convey information outside of an IDE.

Nice find, I wonder why this isn’t just pasted into their F1 help documentation. A lot of these are useful / insightful into the cryptic world of custom attributes, but then again documentation for users isn’t Tecan’s strong suit :roll_eyes:

1 Like