using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace RobotNet10.MapManager.Data; /// /// Node vehicle property - Vehicle-specific properties for nodes /// Maps to VDMA LIF: node.vehicleTypeNodeProperties[] /// [Table("NodeVehicleProperties")] public class NodeVehicleProperty { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid Id { get; set; } /// /// Node reference /// [Required] public Guid NodeId { get; set; } /// /// Vehicle type reference /// [Required] public Guid VehicleTypeId { get; set; } /// /// Absolute orientation of vehicle on node (VDMA LIF: theta) - Optional /// In radians, range: [-Pi ... Pi] /// public double? Theta { get; set; } /// /// Actions that vehicle can perform at this node (VDMA LIF: actions) - Optional /// JSON array format: /// [ /// { /// "actionType": "pick", /// "actionDescription": "...", /// "requirementType": "REQUIRED", /// "blockingType": "HARD", /// "actionParameters": [{"key": "...", "value": "..."}] /// } /// ] /// public string? Actions { get; set; } /// /// Allowed deviation radius in meters (VDA5050: allowedDeviationXY) - Optional /// Indicates how exact an AGV has to drive over a node in order for it to count as traversed. /// If = 0: no deviation is allowed (no deviation means within the normal tolerance of the AGV manufacturer). /// If > 0: allowed deviation-radius in meters. If the AGV passes a node within the deviation-radius, the node is considered to have been traversed. /// Minimum: 0 /// public double? AllowedDeviationXY { get; set; } /// /// Allowed deviation of theta angle in radians (VDA5050: allowedDeviationTheta) - Optional /// Indicates how big the deviation of theta angle can be. /// The lowest acceptable angle is theta - allowedDeviationTheta and the highest acceptable angle is theta + allowedDeviationTheta. /// Range: [0.0 ... 3.141592654] (0 to Pi) /// public double? AllowedDeviationTheta { get; set; } // Navigation properties [ForeignKey(nameof(NodeId))] public virtual Node Node { get; set; } = null!; [ForeignKey(nameof(VehicleTypeId))] public virtual VehicleType VehicleType { get; set; } = null!; }