mirror of
https://github.com/snipe/snipe-it.git
synced 2026-02-21 02:35:50 +00:00
103 lines
3.4 KiB
PHP
103 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Models\Labels\Tapes\Generic;
|
|
|
|
use App\Helpers\Helper;
|
|
use App\Models\Labels\Label;
|
|
|
|
abstract class GenericTape extends Label
|
|
{
|
|
// Default tape width in mm
|
|
protected const TAPE_WIDTH = 42.0;
|
|
|
|
// Tape properties
|
|
protected float $width;
|
|
protected float $height;
|
|
protected bool $continuous;
|
|
protected float $spacing = 0.0; // Space between labels for non-continuous tapes
|
|
|
|
// Margins in mm
|
|
protected float $marginTop;
|
|
protected float $marginBottom;
|
|
protected float $marginLeft;
|
|
protected float $marginRight;
|
|
|
|
// Element sizing in mm
|
|
protected float $titleSize;
|
|
protected float $titleMargin;
|
|
protected float $fieldSize;
|
|
protected float $fieldMargin;
|
|
protected float $labelSize;
|
|
protected float $labelMargin;
|
|
protected float $barcodeMargin;
|
|
protected float $tagSize;
|
|
|
|
/**
|
|
* Constructor for generic tape
|
|
*
|
|
* @param float $width Width of the tape in mm
|
|
* @param float $height Height of the label in mm (for continuous tapes, this is the default height)
|
|
* @param bool $continuous Whether the tape is continuous or pre-cut
|
|
* @param float $spacing Spacing between labels for non-continuous tapes (in mm)
|
|
*/
|
|
public function __construct(float $width, float $height, bool $continuous = true, float $spacing = 0.0) {
|
|
$this->width = $width;
|
|
$this->height = $height;
|
|
$this->continuous = $continuous;
|
|
$this->spacing = $spacing;
|
|
|
|
// Calculate base font size (7% of tape width)
|
|
$baseFontSize = static::TAPE_WIDTH * 0.07;
|
|
|
|
// Calculate margin (4% of tape width)
|
|
$margin = static::TAPE_WIDTH * 0.04;
|
|
|
|
// Set margins
|
|
$this->marginTop = $margin;
|
|
$this->marginBottom = $margin;
|
|
$this->marginLeft = $margin;
|
|
$this->marginRight = $margin;
|
|
|
|
// Calculate and set element sizing based on base font size
|
|
$this->titleSize = $baseFontSize; // Same as base font size
|
|
$this->titleMargin = $baseFontSize * 0.3; // 30% of base font size
|
|
$this->fieldSize = $baseFontSize * 1.1; // 110% of base font size
|
|
$this->fieldMargin = $baseFontSize * 0.1; // 10% of base font size
|
|
$this->labelSize = $baseFontSize * 0.7; // 70% of base font size
|
|
$this->labelMargin = $baseFontSize * -0.1; // -10% of base font size
|
|
$this->barcodeMargin = $baseFontSize * 0.5; // 50% of base font size
|
|
$this->tagSize = $baseFontSize * 0.8; // 80% of base font size
|
|
}
|
|
|
|
// Unit of measurement
|
|
public function getUnit() { return 'mm'; }
|
|
|
|
// Label dimensions
|
|
public function getWidth() { return $this->width; }
|
|
public function getHeight() { return $this->height; }
|
|
|
|
// Margins
|
|
public function getMarginTop() { return $this->marginTop; }
|
|
public function getMarginBottom() { return $this->marginBottom; }
|
|
public function getMarginLeft() { return $this->marginLeft; }
|
|
public function getMarginRight() { return $this->marginRight; }
|
|
|
|
|
|
/**
|
|
* Check if this is a continuous tape
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isContinuous() {
|
|
return $this->continuous;
|
|
}
|
|
|
|
/**
|
|
* Get spacing between labels (for die-cut tapes)
|
|
*
|
|
* @return float
|
|
*/
|
|
public function getSpacing() {
|
|
return $this->spacing;
|
|
}
|
|
} |