altec-icex / skeleton-windows
骨架窗口模板模型
v1.1
2021-06-29 09:50 UTC
Requires
- php: >=7.2
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>';