171 lines
5.7 KiB
C#
171 lines
5.7 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
using RobotNet.VDA5050.Type;
|
|
|
|
namespace RobotNet10.MapManager.Data;
|
|
|
|
/// <summary>
|
|
/// Edge vehicle property - Vehicle-specific properties for edges
|
|
/// Maps to VDMA LIF: edge.vehicleTypeEdgeProperties[]
|
|
/// </summary>
|
|
[Table("EdgeVehicleProperties")]
|
|
public class EdgeVehicleProperty
|
|
{
|
|
[Key]
|
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
|
public Guid Id { get; set; }
|
|
|
|
/// <summary>
|
|
/// Edge reference
|
|
/// </summary>
|
|
[Required]
|
|
public Guid EdgeId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Vehicle type reference
|
|
/// </summary>
|
|
[Required]
|
|
public Guid VehicleTypeId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Vehicle orientation while traversing edge (VDMA LIF: vehicleOrientation) - Optional
|
|
/// In degrees, range: [0.0 ... 360.0]
|
|
/// </summary>
|
|
public double? VehicleOrientation { get; set; }
|
|
|
|
/// <summary>
|
|
/// Type of orientation (VDMA LIF: orientationType) - Optional
|
|
/// Values: GLOBAL, TANGENTIAL
|
|
/// </summary>
|
|
public OrientationType? OrientationType { get; set; }
|
|
|
|
/// <summary>
|
|
/// Is rotation allowed while on edge (VDMA LIF: rotationAllowed) - Optional
|
|
/// </summary>
|
|
public bool? RotationAllowed { get; set; }
|
|
|
|
/// <summary>
|
|
/// Rotation allowed at start node (VDMA LIF: rotationAtStartNodeAllowed) - Optional
|
|
/// Values: NONE, CCW, CW, BOTH
|
|
/// </summary>
|
|
public RotationDirection? RotationAtStartNodeAllowed { get; set; }
|
|
|
|
/// <summary>
|
|
/// Rotation allowed at end node (VDMA LIF: rotationAtEndNodeAllowed) - Optional
|
|
/// Values: NONE, CCW, CW, BOTH
|
|
/// </summary>
|
|
public RotationDirection? RotationAtEndNodeAllowed { get; set; }
|
|
|
|
/// <summary>
|
|
/// Maximum speed allowed on edge (VDMA LIF: maxSpeed) - Optional
|
|
/// In meters per second, range: [0.0 ... double.MaxValue]
|
|
/// </summary>
|
|
public double? MaxSpeed { get; set; }
|
|
|
|
/// <summary>
|
|
/// Maximum rotation speed allowed (VDMA LIF: maxRotationSpeed) - Optional
|
|
/// In radians per second, range: [0.0 ... double.MaxValue]
|
|
/// </summary>
|
|
public double? MaxRotationSpeed { get; set; }
|
|
|
|
/// <summary>
|
|
/// Minimum height of vehicle on edge (VDMA LIF: minHeight) - Optional
|
|
/// In meters, range: [0.0 ... double.MaxValue]
|
|
/// </summary>
|
|
public double? MinHeight { get; set; }
|
|
|
|
/// <summary>
|
|
/// Maximum height of vehicle on edge (VDMA LIF: maxHeight) - Optional
|
|
/// In meters, range: [0.0 ... double.MaxValue]
|
|
/// </summary>
|
|
public double? MaxHeight { get; set; }
|
|
|
|
/// <summary>
|
|
/// Can edge be traversed without load (VDMA LIF: loadRestriction.unloaded) - Optional
|
|
/// </summary>
|
|
public bool? LoadRestriction_Unloaded { get; set; }
|
|
|
|
/// <summary>
|
|
/// Can edge be traversed with load (VDMA LIF: loadRestriction.loaded) - Optional
|
|
/// </summary>
|
|
public bool? LoadRestriction_Loaded { get; set; }
|
|
|
|
/// <summary>
|
|
/// Load set names allowed on edge (VDMA LIF: loadRestriction.loadSetNames) - Optional
|
|
/// JSON array of strings: ["pallet", "box"]
|
|
/// </summary>
|
|
public string? LoadRestriction_LoadSetNames { get; set; }
|
|
|
|
/// <summary>
|
|
/// Trajectory degree (NURBS curve degree) - Optional
|
|
/// Values: 1 (linear), 2 (quadratic), 3 (cubic)
|
|
/// </summary>
|
|
public int? TrajectoryDegree { get; set; }
|
|
|
|
/// <summary>
|
|
/// Trajectory control point 1 X coordinate (meters) - Optional
|
|
/// Used for degree 2 and 3 curves
|
|
/// </summary>
|
|
public double? TrajectoryControlPoint1X { get; set; }
|
|
|
|
/// <summary>
|
|
/// Trajectory control point 1 Y coordinate (meters) - Optional
|
|
/// Used for degree 2 and 3 curves
|
|
/// </summary>
|
|
public double? TrajectoryControlPoint1Y { get; set; }
|
|
|
|
/// <summary>
|
|
/// Trajectory control point 2 X coordinate (meters) - Optional
|
|
/// Used for degree 3 curves only
|
|
/// </summary>
|
|
public double? TrajectoryControlPoint2X { get; set; }
|
|
|
|
/// <summary>
|
|
/// Trajectory control point 2 Y coordinate (meters) - Optional
|
|
/// Used for degree 3 curves only
|
|
/// </summary>
|
|
public double? TrajectoryControlPoint2Y { get; set; }
|
|
|
|
/// <summary>
|
|
/// Actions that vehicle can perform at this edge (VDMA LIF: actions) - Optional
|
|
/// JSON array format:
|
|
/// [
|
|
/// {
|
|
/// "actionType": "pick",
|
|
/// "actionDescription": "...",
|
|
/// "requirementType": "REQUIRED",
|
|
/// "blockingType": "HARD",
|
|
/// "actionParameters": [{"key": "...", "value": "..."}]
|
|
/// }
|
|
/// ]
|
|
/// </summary>
|
|
public string? Actions { get; set; }
|
|
|
|
/// <summary>
|
|
/// Corridor left width (meters) - Optional
|
|
/// Defines the width of the corridor to the left related to the trajectory
|
|
/// </summary>
|
|
public double? CorridorLeftWidth { get; set; }
|
|
|
|
/// <summary>
|
|
/// Corridor right width (meters) - Optional
|
|
/// Defines the width of the corridor to the right related to the trajectory
|
|
/// </summary>
|
|
public double? CorridorRightWidth { get; set; }
|
|
|
|
/// <summary>
|
|
/// Corridor reference point (VDA5050: corridorRefPoint) - Optional
|
|
/// Defines whether the boundaries are valid for the kinematic center or the contour of the vehicle
|
|
/// Values: KINEMATICCENTER, CONTOUR
|
|
/// </summary>
|
|
public CorridorRefPoint? CorridorRefPoint { get; set; }
|
|
|
|
// Navigation properties
|
|
[ForeignKey(nameof(EdgeId))]
|
|
public virtual Edge Edge { get; set; } = null!;
|
|
|
|
[ForeignKey(nameof(VehicleTypeId))]
|
|
public virtual VehicleType VehicleType { get; set; } = null!;
|
|
}
|
|
|