altec-icex/skeleton-windows

骨架窗口模板模型

v1.1 2021-06-29 09:50 UTC

This package is not auto-updated.

Last update: 2024-10-02 00:52:54 UTC


README

用于创建和封装简单窗口、玻璃幕墙、夹层和纱窗模型的类集合。

安装

通过包管理器以标准方式安装。

composer require altec-icex/skeleton-windows

模型描述

构造模型由从左到右连接的部件组成。

部件

部件基于给定宽度和高度的矩形框架(下梁与地面平行)。所有部件构造框架的上梁都位于同一直线上。每个部件都有一个类型(窗户或阳台门),该类型由代码定义。

部件的左上角是坐标系统的起点:X轴向右,Y轴向下。

框架的梁形成包含第一个开口的轮廓。

开口

开口由梁的轮廓形成,可以安装一个“插入件”,并且只能安装一个。

插入件类型

  • 填充;
  • 窗扇;
  • 立柱;
  • 立柱组。

填充

填充是玻璃幕墙或夹层。

窗扇

窗扇以开启方式为特征。窗扇梁的轮廓形成开口。允许以下开启方式

  • 左转;
  • 左转-上提;
  • 右转;
  • 右转-上提;
  • 上提;
  • 上悬。

每个窗扇可以添加纱窗。

立柱

立柱是开口的分隔符,形成两个子开口。立柱梁的方向是垂直或水平,安装在指定的位置——垂直立柱的X轴坐标和水平立柱的Y轴坐标。

立柱的两个开口分别标记为“左上”和“右上”。

立柱组

立柱组由几个(N)方向相同的梁组成,形成几个(N+1)开口。

结构、部件、窗扇和填充可以添加用户参数值。

在程序中解包的说明

  • 所有模型元素都将带有所有默认值的用户参数;
  • 所有梁都将具有“自动”型材和加固的“自动”文号;
  • 部件将通过连接器连接,其长度由相邻部件的最小高度确定;
  • 窗扇的把手类型将根据部件类型和开启方式选择;
  • 把手将安装为“自动”位置;
  • 填充将被框边包围。

使用示例

use SkeletonWindows\Model;
use SkeletonWindows\SashFrame;
use SkeletonWindows\ModelPacker;

// Создаём новую модель
$model = new Model();
$model->setUserParameterValue('installation', true);

// Добавляем раму изделия c типом "window" и габаритами 1400 x 1400 мм
$frame = $model->add('window', 1400, 1400);
// Устанавливаем пользовательский параметр изделия
$frame->setUserParameterValue('base_profile', true);

// Берём проём рамы
$aperture = $frame->getAperture();
// Вставляем в проём вертикальный импост в положение 700 мм
$impost = $aperture->insertImpost(false, 700);

// Берём левый проём импоста
$aperture = $impost->getLeftTopAperture();
// Вставляем в проём створку с типом открывания "поворотное влево"
$sash = $aperture->insertSash(SashFrame::LeftTurn);
// Устанавливаем польз. параметры створки
$sash->setUserParameterValue('micro_airing', true);
// Устанавливаем москитную сетку из системы с кодом "system_code" к створке
$mosquito = $sash->addMosquito('system_code');
// Устанавливаем польз. параметры москитной сетки
$mosquito->setUserParameterValue('anti_cat', true);
// Берём проём створки
$aperture = $sash->getAperture();
// Вставляем в проём стеклопакет
$aperture->insertFilling(false);

// Берём правый проём импоста
$aperture = $impost->getRightBottomAperture();
// Вставляем в проём стеклопакет
$filling = $aperture->insertFilling(false);
// Устанавливаем пользовательский параметр cтеклопакета
$filling->setUserParameterValue('coating', 'low_e');

// Добавляем раму изделия c типом "balcony_door" и габаритами 800 x 2000 мм
$frame = $model->add('balcony_door', 800, 2000);

// Берём проём рамы
$aperture = $frame->getAperture();
// Вставляем в проём створку с типом открывания "поворотное вправо"
$sash = $aperture->insertSash(SashFrame::RightTurn);

// Берём проём створки
$aperture = $sash->getAperture();
// Вставляем в проём горизонтальный импост в положение 1400 мм
$impost = $aperture->insertImpost(true, 1400);

// Берём верхний проём импоста
$aperture = $impost->getLeftTopAperture();
// Вставляем в проём стеклопакет
$aperture->insertFilling(false);

// Берём нижний проём импоста
$aperture = $impost->getRightBottomAperture();
// Вставляем в проём сэндвич
$filling = $aperture->insertFilling(true);


// Создаём упаковщика модели
$packer = new ModelPacker();

// Запаковываем модель для api
$pack = $packer->pack($model);

// Посмотрим, что получилось
echo '<pre>' . json_encode(json_decode($pack), JSON_PRETTY_PRINT) . '</pre>';